Show More
@@ -21,46 +21,42 b' 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 |
|
|
33 | try: | |
31 | raise util.Abort(msg) |
|
34 | remove_func(os.path.join(repo.root, name)) | |
32 |
e |
|
35 | except OSError, e: | |
33 | ui.warn(_('warning: %s\n') % msg) |
|
36 | error(_('%s cannot be removed') % name) | |
34 |
|
37 | else: | ||
35 | def remove(remove_func, name): |
|
38 | ui.write('%s%s' % (name, eol)) | |
36 | if act: |
|
|||
37 | try: |
|
|||
38 | remove_func(os.path.join(repo.root, name)) |
|
|||
39 | except OSError, e: |
|
|||
40 | error(_('%s cannot be removed') % name) |
|
|||
41 | else: |
|
|||
42 | ui.write('%s%s' % (name, eol)) |
|
|||
43 |
|
39 | |||
44 |
|
|
40 | directories = [] | |
45 |
|
|
41 | files = [] | |
46 |
|
|
42 | for src, f, st in repo.dirstate.statwalk(files=dirs, ignored=True, | |
47 |
|
|
43 | directories=True): | |
48 |
|
|
44 | if src == 'd': | |
49 |
|
|
45 | directories.append(f) | |
50 |
|
|
46 | elif src == 'f' and f not in repo.dirstate: | |
51 |
|
|
47 | files.append(f) | |
52 |
|
48 | |||
53 |
|
|
49 | directories.sort() | |
54 |
|
50 | |||
55 |
|
|
51 | for f in files: | |
56 |
|
|
52 | if f not in repo.dirstate: | |
57 |
|
|
53 | ui.note(_('Removing file %s\n') % f) | |
58 |
|
|
54 | remove(os.remove, f) | |
59 |
|
55 | |||
60 |
|
|
56 | for f in directories[::-1]: | |
61 |
|
|
57 | if not os.listdir(repo.wjoin(f)): | |
62 |
|
|
58 | ui.note(_('Removing directory %s\n') % f) | |
63 |
|
|
59 | remove(os.rmdir, f) | |
64 |
|
60 | |||
65 |
|
61 | |||
66 | def purge(ui, repo, *dirs, **opts): |
|
62 | def purge(ui, repo, *dirs, **opts): | |
@@ -93,8 +89,7 b' def purge(ui, repo, *dirs, **opts):' | |||||
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 = { |
General Comments 0
You need to be logged in to leave comments.
Login now