comparison contrib/purge/purge.py @ 4153:af72395580e8

Delete the Purge class, refactoring Purge.purge() in dopurge()
author Emanuele Aina <faina.mail@tiscali.it>
date Tue, 06 Mar 2007 17:45:47 -0300
parents 1c0488b58ece
children 15cd36db4230
comparison
equal deleted inserted replaced
4152:1c0488b58ece 4153:af72395580e8
19 19
20 from mercurial import hg, util 20 from mercurial import hg, util
21 from mercurial.i18n import _ 21 from mercurial.i18n import _
22 import os 22 import os
23 23
24 class Purge(object): 24 def dopurge(ui, repo, dirs=None, act=True, abort_on_err=False, eol='\n'):
25 def __init__(self): 25 def error(msg):
26 pass 26 if abort_on_err:
27 raise util.Abort(msg)
28 else:
29 ui.warn(_('warning: %s\n') % msg)
27 30
28 def purge(self, ui, repo, dirs=None, act=True, abort_on_err=False, eol='\n'): 31 def remove(remove_func, name):
29 def error(msg): 32 if act:
30 if abort_on_err: 33 try:
31 raise util.Abort(msg) 34 remove_func(os.path.join(repo.root, name))
32 else: 35 except OSError, e:
33 ui.warn(_('warning: %s\n') % msg) 36 error(_('%s cannot be removed') % name)
37 else:
38 ui.write('%s%s' % (name, eol))
34 39
35 def remove(remove_func, name): 40 directories = []
36 if act: 41 files = []
37 try: 42 for src, f, st in repo.dirstate.statwalk(files=dirs, ignored=True,
38 remove_func(os.path.join(repo.root, name)) 43 directories=True):
39 except OSError, e: 44 if src == 'd':
40 error(_('%s cannot be removed') % name) 45 directories.append(f)
41 else: 46 elif src == 'f' and f not in repo.dirstate:
42 ui.write('%s%s' % (name, eol)) 47 files.append(f)
43 48
44 directories = [] 49 directories.sort()
45 files = []
46 for src, f, st in repo.dirstate.statwalk(files=dirs, ignored=True,
47 directories=True):
48 if src == 'd':
49 directories.append(f)
50 elif src == 'f' and f not in repo.dirstate:
51 files.append(f)
52 50
53 directories.sort() 51 for f in files:
52 if f not in repo.dirstate:
53 ui.note(_('Removing file %s\n') % f)
54 remove(os.remove, f)
54 55
55 for f in files: 56 for f in directories[::-1]:
56 if f not in repo.dirstate: 57 if not os.listdir(repo.wjoin(f)):
57 ui.note(_('Removing file %s\n') % f) 58 ui.note(_('Removing directory %s\n') % f)
58 remove(os.remove, f) 59 remove(os.rmdir, f)
59
60 for f in directories[::-1]:
61 if not os.listdir(repo.wjoin(f)):
62 ui.note(_('Removing directory %s\n') % f)
63 remove(os.rmdir, f)
64 60
65 61
66 def purge(ui, repo, *dirs, **opts): 62 def purge(ui, repo, *dirs, **opts):
67 '''removes files not tracked by mercurial 63 '''removes files not tracked by mercurial
68 64
91 abort_on_err = bool(opts['abort_on_err']) 87 abort_on_err = bool(opts['abort_on_err'])
92 eol = opts['print0'] and '\0' or '\n' 88 eol = opts['print0'] and '\0' or '\n'
93 if eol == '\0': 89 if eol == '\0':
94 # --print0 implies --print 90 # --print0 implies --print
95 act = False 91 act = False
96 p = Purge() 92 dopurge(ui, repo, dirs, act, abort_on_err, eol)
97 p.purge(ui, repo, dirs, act, abort_on_err, eol)
98 93
99 94
100 cmdtable = { 95 cmdtable = {
101 'purge': 96 'purge':
102 (purge, 97 (purge,