contrib/purge/purge.py
changeset 4150 cf26f4564000
parent 4149 e59286f15189
child 4151 337010e50dcd
equal deleted inserted replaced
4149:e59286f15189 4150:cf26f4564000
    43                 files.append(f)
    43                 files.append(f)
    44 
    44 
    45         directories.sort()
    45         directories.sort()
    46 
    46 
    47         for f in files:
    47         for f in files:
    48             self._remove_file(f)
    48             if f not in self._repo.dirstate:
       
    49                 self._ui.note(_('Removing file %s\n') % f)
       
    50                 self._remove(os.remove, f)
    49 
    51 
    50         for f in directories[::-1]:
    52         for f in directories[::-1]:
    51             if not os.listdir(repo.wjoin(f)):
    53             if not os.listdir(repo.wjoin(f)):
    52                 self._remove_dir(f)
    54                 self._ui.note(_('Removing directory %s\n') % f)
       
    55                 self._remove(os.rmdir, f)
    53 
    56 
    54         self._repo = None
    57         self._repo = None
    55         self._ui = None
    58         self._ui = None
    56 
    59 
    57     def _error(self, msg):
    60     def _error(self, msg):
    58         if self._abort_on_err:
    61         if self._abort_on_err:
    59             raise util.Abort(msg)
    62             raise util.Abort(msg)
    60         else:
    63         else:
    61             self._ui.warn(_('warning: %s\n') % msg)
    64             self._ui.warn(_('warning: %s\n') % msg)
    62 
    65 
    63     def _remove_file(self, name):
    66     def _remove(self, remove_func, name):
    64         if name in self._repo.dirstate:
       
    65             return
       
    66         self._ui.note(_('Removing file %s\n') % name)
       
    67         if self._act:
    67         if self._act:
    68             try:
    68             try:
    69                 os.remove(self._repo.wjoin(name))
    69                 remove_func(self._repo.wjoin(name))
    70             except OSError, e:
       
    71                 self._error(_('%s cannot be removed') % name)
       
    72         else:
       
    73             self._ui.write('%s%s' % (name, self._eol))
       
    74 
       
    75     def _remove_dir(self, name):
       
    76         self._ui.note(_('Removing directory %s\n') % name)
       
    77         if self._act:
       
    78             try:
       
    79                 os.rmdir(self._repo.wjoin(name))
       
    80             except OSError, e:
    70             except OSError, e:
    81                 self._error(_('%s cannot be removed') % name)
    71                 self._error(_('%s cannot be removed') % name)
    82         else:
    72         else:
    83             self._ui.write('%s%s' % (name, self._eol))
    73             self._ui.write('%s%s' % (name, self._eol))
    84 
    74