/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-11 22:02:47 UTC
  • mto: This revision was merged to the branch mainline in revision 2455.
  • Revision ID: amanic@gmail.com-20070411220247-plcjs3dvidvjx2vj
* workingtree.remove
  - Add and test a new force option in order to force the deletion of changed files
    and non-empty directories.
  - Some doc fixups.
  - Remove some implemented todo's
  - Remove ## TODO: Remove nested loops; better scalability
    as I can't see any nested loop.s
  - small whitespace cleanups in tests.

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, keep_files=True):
 
1769
    def remove(self, files, verbose=False, to_file=None, keep_files=True, 
 
1770
        force=False):
1770
1771
        """Remove nominated files from the working inventor.
1771
1772
 
1772
 
        TODO: Refuse to remove modified files unless --force is given?
1773
 
 
1774
 
        TODO: Do something useful with directories.
1775
 
 
1776
1773
        :keep_files: If true, the files will also be kept.
 
1774
        :force: Delete files and directories, even if they are changed and
 
1775
            even if the directories are not empty.
1777
1776
        """
1778
1777
        ## TODO: Normalize names
1779
 
        ## TODO: Remove nested loops; better scalability
1780
1778
        if isinstance(files, basestring):
1781
1779
            files = [files]
1782
1780
 
1805
1803
                message="%s is not versioned."%f
1806
1804
            else:
1807
1805
                if verbose:
1808
 
                    # having remove it, it must be either ignored or unknown
 
1806
                    # having removed it, it must be either ignored or unknown
1809
1807
                    if self.is_ignored(f):
1810
1808
                        new_status = 'I'
1811
1809
                    else:
1816
1814
 
1817
1815
                if not keep_files:
1818
1816
                    if osutils.lexists(f):
1819
 
                        if changed_files:
1820
 
                            message="%s has changed and won't be deleted."%f
1821
 
                        elif osutils.isdir(f) and len(os.listdir(f)) > 0:
1822
 
                            message="%s is not empty directory "\
1823
 
                                "and won't be deleted."%f
1824
 
                        else:
1825
 
                            #TODO check if folder is empty
1826
 
                            osutils.delete_any(f)
 
1817
                        if force:
 
1818
                            if osutils.isdir(f):
 
1819
                                osutils.rmtree(f)
 
1820
                            else:
 
1821
                                os.unlink(f)
1827
1822
                            message="deleted %s"%f
 
1823
                        else:
 
1824
                            if f in changed_files:
 
1825
                                message="%s has changed and won't be deleted."%f
 
1826
                            elif osutils.isdir(f) and len(os.listdir(f)) > 0:
 
1827
                                message="%s is not empty directory "\
 
1828
                                    "and won't be deleted."%f
 
1829
                            else:
 
1830
                                osutils.delete_any(f)
 
1831
                                message="deleted %s"%f
1828
1832
                    else:
1829
1833
                        message="%s does not exist."%f
1830
1834
                else: