comparison contrib/purge/purge.py @ 4147:691f9168a815

Make the purge extension use the statwalk walker from the dirstate object
author Emanuele Aina <faina.mail@tiscali.it>
date Tue, 06 Mar 2007 17:45:40 -0300
parents d250076824e3
children de85ff0aaac5
comparison
equal deleted inserted replaced
4146:e287d61dd268 4147:691f9168a815
32 32
33 def purge(self, ui, repo, dirs=None): 33 def purge(self, ui, repo, dirs=None):
34 self._repo = repo 34 self._repo = repo
35 self._ui = ui 35 self._ui = ui
36 self._hg_root = self._split_path(repo.root) 36 self._hg_root = self._split_path(repo.root)
37
38 directories = []
39 files = []
40 for src, f, st in repo.dirstate.statwalk(files=dirs, ignored=True,
41 directories=True):
42 if src == 'd':
43 directories.append(f)
44 elif src == 'f' and f not in repo.dirstate:
45 files.append(f)
37 46
38 if not dirs: 47 directories.sort()
39 dirs = [repo.root]
40 48
41 for path in dirs: 49 for f in files:
42 path = os.path.abspath(path) 50 self._remove_file(os.path.join(repo.root, f))
43 for root, dirs, files in os.walk(path, topdown=False): 51
44 if '.hg' in self._split_path(root): 52 for f in directories[::-1]:
45 # Skip files in the .hg directory. 53 f = os.path.join(repo.root, f)
46 # Note that if the repository is in a directory 54 if not os.listdir(f):
47 # called .hg this command does not work. 55 self._remove_dir(f)
48 continue
49 for name in files:
50 self._remove_file(os.path.join(root, name))
51 if not os.listdir(root):
52 # Remove this directory if it is empty.
53 self._remove_dir(root)
54 56
55 self._repo = None 57 self._repo = None
56 self._ui = None 58 self._ui = None
57 self._hg_root = None 59 self._hg_root = None
58 60