/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

  • Committer: Marius Kruger
  • Date: 2007-04-09 21:50:50 UTC
  • mto: This revision was merged to the branch mainline in revision 2455.
  • Revision ID: amanic@gmail.com-20070409215050-9k4jxh76grq7jxz8
First pass at only deleting files on 'bzr remove' when
they haven't changed.

Needed to modify _find_children_across_trees (tree.py) because
tree.has_id did not work as excpeted.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1766
1766
        return result
1767
1767
 
1768
1768
    @needs_tree_write_lock
1769
 
    def remove(self, files, verbose=False, to_file=None, delete_files=False):
1770
 
        """Remove nominated files from the working inventory..
 
1769
    def remove(self, files, verbose=False, to_file=None, keep_files=True):
 
1770
        """Remove nominated files from the working inventor.
1771
1771
 
1772
1772
        TODO: Refuse to remove modified files unless --force is given?
1773
1773
 
1774
1774
        TODO: Do something useful with directories.
1775
1775
 
1776
 
        :delete_files: If true, the files will also be delete.
1777
 
                       At present recursion is not supported.
 
1776
        :keep_files: If true, the files will also be kept.
1778
1777
        """
1779
1778
        ## TODO: Normalize names
1780
1779
        ## TODO: Remove nested loops; better scalability
1782
1781
            files = [files]
1783
1782
 
1784
1783
        inv = self.inventory
 
1784
        changed_files=[]
1785
1785
 
1786
1786
        # Sort needed when deleting files:
1787
1787
        # first delete directory content before the directory
1788
 
        if delete_files:
 
1788
        if not keep_files:
1789
1789
            files = files[:]
1790
1790
            files.sort(reverse=True)
1791
1791
 
 
1792
            changes = self.changes_from(self.basis_tree())
 
1793
 
 
1794
            for f in changes.modified:
 
1795
                changed_files.append(f[0])
 
1796
            for f in changes.added:
 
1797
                changed_files.append(f[0])
 
1798
 
1792
1799
        # do this before any modifications
1793
1800
        for f in files:
1794
1801
            fid = inv.path2id(f)
1805
1812
                    textui.show_status(new_status, inv[fid].kind, f,
1806
1813
                                       to_file=to_file)
1807
1814
                del inv[fid]
1808
 
                message="removed %s"%f
1809
 
            if delete_files:
1810
 
                if osutils.lexists(f):
1811
 
                    osutils.delete_any(f)
1812
 
                    message="deleted %s"%f
 
1815
 
 
1816
                if not keep_files:
 
1817
                    if osutils.lexists(f):
 
1818
                        if changed_files:
 
1819
                            message="%s has changed and won't be deleted."%f
 
1820
                        else:
 
1821
                            #TODO check if folder is empty
 
1822
                            osutils.delete_any(f)
 
1823
                            message="deleted %s"%f
 
1824
                    else:
 
1825
                        message="%s does not exist."%f
1813
1826
                else:
1814
 
                    message="%s does not exist."%f
 
1827
                    message="removed %s"%f
1815
1828
            # print only one message per file.
1816
1829
            if message is not None:
1817
1830
                note(message)