29 |
29 |
30 from mercurial import hg, util |
30 from mercurial import hg, util |
31 from mercurial.i18n import _ |
31 from mercurial.i18n import _ |
32 import os |
32 import os |
33 |
33 |
34 def dopurge(ui, repo, dirs=None, act=True, abort_on_err=False, eol='\n', |
34 def dopurge(ui, repo, dirs=None, act=True, ignored=False, |
|
35 abort_on_err=False, eol='\n', |
35 force=False, include=None, exclude=None): |
36 force=False, include=None, exclude=None): |
36 def error(msg): |
37 def error(msg): |
37 if abort_on_err: |
38 if abort_on_err: |
38 raise util.Abort(msg) |
39 raise util.Abort(msg) |
39 else: |
40 else: |
52 files = [] |
53 files = [] |
53 missing = [] |
54 missing = [] |
54 roots, match, anypats = util.cmdmatcher(repo.root, repo.getcwd(), dirs, |
55 roots, match, anypats = util.cmdmatcher(repo.root, repo.getcwd(), dirs, |
55 include, exclude) |
56 include, exclude) |
56 for src, f, st in repo.dirstate.statwalk(files=roots, match=match, |
57 for src, f, st in repo.dirstate.statwalk(files=roots, match=match, |
57 ignored=True, directories=True): |
58 ignored=ignored, directories=True): |
58 if src == 'd': |
59 if src == 'd': |
59 directories.append(f) |
60 directories.append(f) |
60 elif src == 'm': |
61 elif src == 'm': |
61 missing.append(f) |
62 missing.append(f) |
62 elif src == 'f' and f not in repo.dirstate: |
63 elif src == 'f' and f not in repo.dirstate: |
137 Be careful with purge, you could irreversibly delete some files you |
138 Be careful with purge, you could irreversibly delete some files you |
138 forgot to add to the repository. If you only want to print the list of |
139 forgot to add to the repository. If you only want to print the list of |
139 files that this program would delete use the --print option. |
140 files that this program would delete use the --print option. |
140 ''' |
141 ''' |
141 act = not opts['print'] |
142 act = not opts['print'] |
|
143 ignored = bool(opts['all']) |
142 abort_on_err = bool(opts['abort_on_err']) |
144 abort_on_err = bool(opts['abort_on_err']) |
143 eol = opts['print0'] and '\0' or '\n' |
145 eol = opts['print0'] and '\0' or '\n' |
144 if eol == '\0': |
146 if eol == '\0': |
145 # --print0 implies --print |
147 # --print0 implies --print |
146 act = False |
148 act = False |
147 force = bool(opts['force']) |
149 force = bool(opts['force']) |
148 include = opts['include'] |
150 include = opts['include'] |
149 exclude = opts['exclude'] |
151 exclude = opts['exclude'] |
150 dopurge(ui, repo, dirs, act, abort_on_err, eol, force, include, exclude) |
152 dopurge(ui, repo, dirs, act, ignored, abort_on_err, |
|
153 eol, force, include, exclude) |
151 |
154 |
152 |
155 |
153 cmdtable = { |
156 cmdtable = { |
154 'purge': |
157 'purge': |
155 (purge, |
158 (purge, |
156 [('a', 'abort-on-err', None, _('abort if an error occurs')), |
159 [('a', 'abort-on-err', None, _('abort if an error occurs')), |
|
160 ('', 'all', None, _('purge ignored files too')), |
157 ('f', 'force', None, _('purge even when missing files are detected')), |
161 ('f', 'force', None, _('purge even when missing files are detected')), |
158 ('p', 'print', None, _('print the file names instead of deleting them')), |
162 ('p', 'print', None, _('print the file names instead of deleting them')), |
159 ('0', 'print0', None, _('end filenames with NUL, for use with xargs' |
163 ('0', 'print0', None, _('end filenames with NUL, for use with xargs' |
160 ' (implies -p)')), |
164 ' (implies -p)')), |
161 ('I', 'include', [], _('include names matching the given patterns')), |
165 ('I', 'include', [], _('include names matching the given patterns')), |