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 class Purge(object): |
25 def __init__(self, act=True, abort_on_err=False, eol='\n'): |
25 def __init__(self): |
26 self._repo = None |
26 pass |
27 self._ui = None |
|
28 self._act = act |
|
29 self._abort_on_err = abort_on_err |
|
30 self._eol = eol |
|
31 |
27 |
32 def purge(self, ui, repo, dirs=None): |
28 def purge(self, ui, repo, dirs=None, act=True, abort_on_err=False, eol='\n'): |
33 self._repo = repo |
29 def error(msg): |
34 self._ui = ui |
30 if abort_on_err: |
35 |
|
36 def error(self, msg): |
|
37 if self._abort_on_err: |
|
38 raise util.Abort(msg) |
31 raise util.Abort(msg) |
39 else: |
32 else: |
40 self._ui.warn(_('warning: %s\n') % msg) |
33 ui.warn(_('warning: %s\n') % msg) |
41 |
34 |
42 def remove(remove_func, name): |
35 def remove(remove_func, name): |
43 if self._act: |
36 if act: |
44 try: |
37 try: |
45 remove_func(os.path.join(self._repo.root, name)) |
38 remove_func(os.path.join(repo.root, name)) |
46 except OSError, e: |
39 except OSError, e: |
47 error(_('%s cannot be removed') % name) |
40 error(_('%s cannot be removed') % name) |
48 else: |
41 else: |
49 self._ui.write('%s%s' % (name, self._eol)) |
42 ui.write('%s%s' % (name, eol)) |
50 |
43 |
51 directories = [] |
44 directories = [] |
52 files = [] |
45 files = [] |
53 for src, f, st in repo.dirstate.statwalk(files=dirs, ignored=True, |
46 for src, f, st in repo.dirstate.statwalk(files=dirs, ignored=True, |
54 directories=True): |
47 directories=True): |
98 abort_on_err = bool(opts['abort_on_err']) |
91 abort_on_err = bool(opts['abort_on_err']) |
99 eol = opts['print0'] and '\0' or '\n' |
92 eol = opts['print0'] and '\0' or '\n' |
100 if eol == '\0': |
93 if eol == '\0': |
101 # --print0 implies --print |
94 # --print0 implies --print |
102 act = False |
95 act = False |
103 p = Purge(act, abort_on_err, eol) |
96 p = Purge() |
104 p.purge(ui, repo, dirs) |
97 p.purge(ui, repo, dirs, act, abort_on_err, eol) |
105 |
98 |
106 |
99 |
107 cmdtable = { |
100 cmdtable = { |
108 'purge': |
101 'purge': |
109 (purge, |
102 (purge, |