##// END OF EJS Templates
purge: fix formatting of lists with proper reST markup
Martin Geisler -
r9215:f6a880fa default
parent child Browse files
Show More
@@ -1,107 +1,110
1 1 # Copyright (C) 2006 - Marco Barisione <marco@barisione.org>
2 2 #
3 3 # This is a small extension for Mercurial (http://mercurial.selenic.com/)
4 4 # that removes files not known to mercurial
5 5 #
6 6 # This program was inspired by the "cvspurge" script contained in CVS utilities
7 7 # (http://www.red-bean.com/cvsutils/).
8 8 #
9 9 # For help on the usage of "hg purge" use:
10 10 # hg help purge
11 11 #
12 12 # This program is free software; you can redistribute it and/or modify
13 13 # it under the terms of the GNU General Public License as published by
14 14 # the Free Software Foundation; either version 2 of the License, or
15 15 # (at your option) any later version.
16 16 #
17 17 # This program is distributed in the hope that it will be useful,
18 18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 20 # GNU General Public License for more details.
21 21 #
22 22 # You should have received a copy of the GNU General Public License
23 23 # along with this program; if not, write to the Free Software
24 24 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 25
26 26 '''command to delete untracked files from the working directory'''
27 27
28 28 from mercurial import util, commands, cmdutil
29 29 from mercurial.i18n import _
30 30 import os, stat
31 31
32 32 def purge(ui, repo, *dirs, **opts):
33 33 '''removes files not tracked by Mercurial
34 34
35 35 Delete files not known to Mercurial. This is useful to test local and
36 36 uncommitted changes in an otherwise-clean source tree.
37 37
38 38 This means that purge will delete:
39 - Unknown files: files marked with "?" by "hg status"
40 - Empty directories: in fact Mercurial ignores directories unless they
41 contain files under source control management
39
40 - Unknown files: files marked with "?" by "hg status"
41 - Empty directories: in fact Mercurial ignores directories unless they
42 contain files under source control management
43
42 44 But it will leave untouched:
43 - Modified and unmodified tracked files
44 - Ignored files (unless --all is specified)
45 - New files added to the repository (with "hg add")
45
46 - Modified and unmodified tracked files
47 - Ignored files (unless --all is specified)
48 - New files added to the repository (with "hg add")
46 49
47 50 If directories are given on the command line, only files in these
48 51 directories are considered.
49 52
50 53 Be careful with purge, as you could irreversibly delete some files you
51 54 forgot to add to the repository. If you only want to print the list of
52 55 files that this program would delete, use the --print option.
53 56 '''
54 57 act = not opts['print']
55 58 eol = '\n'
56 59 if opts['print0']:
57 60 eol = '\0'
58 61 act = False # --print0 implies --print
59 62
60 63 def remove(remove_func, name):
61 64 if act:
62 65 try:
63 66 remove_func(repo.wjoin(name))
64 67 except OSError:
65 68 m = _('%s cannot be removed') % name
66 69 if opts['abort_on_err']:
67 70 raise util.Abort(m)
68 71 ui.warn(_('warning: %s\n') % m)
69 72 else:
70 73 ui.write('%s%s' % (name, eol))
71 74
72 75 def removefile(path):
73 76 try:
74 77 os.remove(path)
75 78 except OSError:
76 79 # read-only files cannot be unlinked under Windows
77 80 s = os.stat(path)
78 81 if (s.st_mode & stat.S_IWRITE) != 0:
79 82 raise
80 83 os.chmod(path, stat.S_IMODE(s.st_mode) | stat.S_IWRITE)
81 84 os.remove(path)
82 85
83 86 directories = []
84 87 match = cmdutil.match(repo, dirs, opts)
85 88 match.dir = directories.append
86 89 status = repo.status(match=match, ignored=opts['all'], unknown=True)
87 90
88 91 for f in sorted(status[4] + status[5]):
89 92 ui.note(_('Removing file %s\n') % f)
90 93 remove(removefile, f)
91 94
92 95 for f in sorted(directories, reverse=True):
93 96 if match(f) and not os.listdir(repo.wjoin(f)):
94 97 ui.note(_('Removing directory %s\n') % f)
95 98 remove(os.rmdir, f)
96 99
97 100 cmdtable = {
98 101 'purge|clean':
99 102 (purge,
100 103 [('a', 'abort-on-err', None, _('abort if an error occurs')),
101 104 ('', 'all', None, _('purge ignored files too')),
102 105 ('p', 'print', None, _('print filenames instead of deleting them')),
103 106 ('0', 'print0', None, _('end filenames with NUL, for use with xargs'
104 107 ' (implies -p/--print)')),
105 108 ] + commands.walkopts,
106 109 _('hg purge [OPTION]... [DIR]...'))
107 110 }
General Comments 0
You need to be logged in to leave comments. Login now