annotate hgext/purge.py @ 40425:5e5c8f2a1eb5

branchmap: do not specify changelog as an argument Since (unfiltered)repo.changelog lookup gets as fast as __dict__ lookup, there's no point to pass in changelog instance. $ hg perfbranchmap --clear-revbranch -R mozilla-central ! base (orig) wall 20.593091 comb 20.600000 user 20.520000 sys 0.080000 (best of 3) (this) wall 20.129126 comb 20.130000 user 20.020000 sys 0.110000 (best of 3) This backs out most of the changes in 76d4272bd57b and 47c03042cd1d.
author Yuya Nishihara <yuya@tcha.org>
date Tue, 23 Oct 2018 21:11:13 +0900
parents c303d65d2e34
children 2372284d9457
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2364
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
1 # Copyright (C) 2006 - Marco Barisione <marco@barisione.org>
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
2 #
26421
4b0fc75f9403 urls: bulk-change primary website URLs
Matt Mackall <mpm@selenic.com>
parents: 25186
diff changeset
3 # This is a small extension for Mercurial (https://mercurial-scm.org/)
2364
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
4 # that removes files not known to mercurial
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
5 #
9270
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
6 # This program was inspired by the "cvspurge" script contained in CVS
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
7 # utilities (http://www.red-bean.com/cvsutils/).
4154
15cd36db4230 Delete the README for purge, putting the useful informations in comments
Emanuele Aina <em@nerd.ocracy.org>
parents: 4153
diff changeset
8 #
15cd36db4230 Delete the README for purge, putting the useful informations in comments
Emanuele Aina <em@nerd.ocracy.org>
parents: 4153
diff changeset
9 # For help on the usage of "hg purge" use:
15cd36db4230 Delete the README for purge, putting the useful informations in comments
Emanuele Aina <em@nerd.ocracy.org>
parents: 4153
diff changeset
10 # hg help purge
15cd36db4230 Delete the README for purge, putting the useful informations in comments
Emanuele Aina <em@nerd.ocracy.org>
parents: 4153
diff changeset
11 #
2364
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
12 # This program is free software; you can redistribute it and/or modify
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
13 # it under the terms of the GNU General Public License as published by
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
14 # the Free Software Foundation; either version 2 of the License, or
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
15 # (at your option) any later version.
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
16 #
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
17 # This program is distributed in the hope that it will be useful,
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
18 # but WITHOUT ANY WARRANTY; without even the implied warranty of
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
19 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
20 # GNU General Public License for more details.
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
21 #
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
22 # You should have received a copy of the GNU General Public License
15782
7de7630053cb Remove FSF mailing address from GPL headers
Martin Geisler <mg@aragost.com>
parents: 14671
diff changeset
23 # along with this program; if not, see <http://www.gnu.org/licenses/>.
2364
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
24
8934
9dda4c73fc3b extensions: change descriptions for extensions providing a few commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8894
diff changeset
25 '''command to delete untracked files from the working directory'''
28382
27996f78a64c purge: use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
26 from __future__ import absolute_import
8873
e872ef2e6758 help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8866
diff changeset
27
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 28382
diff changeset
28 from mercurial.i18n import _
28382
27996f78a64c purge: use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
29 from mercurial import (
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
30 cmdutil,
39463
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
31 merge as mergemod,
36571
5a3f8da663e5 purge: apply byteskwargs to opts, fixing all python3 issues here
Augie Fackler <augie@google.com>
parents: 32375
diff changeset
32 pycompat,
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29841
diff changeset
33 registrar,
28382
27996f78a64c purge: use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
34 scmutil,
27996f78a64c purge: use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
35 )
2364
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
36
14310
c16ec14d44b6 purge: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 10973
diff changeset
37 cmdtable = {}
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29841
diff changeset
38 command = registrar.command(cmdtable)
29841
d5883fd055c6 extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents: 29222
diff changeset
39 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for
25186
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 22920
diff changeset
40 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 22920
diff changeset
41 # be specifying the version(s) of Mercurial they are tested with, or
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 22920
diff changeset
42 # leave the attribute unspecified.
29841
d5883fd055c6 extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents: 29222
diff changeset
43 testedwith = 'ships-with-hg-core'
14310
c16ec14d44b6 purge: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 10973
diff changeset
44
c16ec14d44b6 purge: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 10973
diff changeset
45 @command('purge|clean',
c16ec14d44b6 purge: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 10973
diff changeset
46 [('a', 'abort-on-err', None, _('abort if an error occurs')),
c16ec14d44b6 purge: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 10973
diff changeset
47 ('', 'all', None, _('purge ignored files too')),
21853
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
48 ('', 'dirs', None, _('purge empty directories')),
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
49 ('', 'files', None, _('purge files')),
14310
c16ec14d44b6 purge: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 10973
diff changeset
50 ('p', 'print', None, _('print filenames instead of deleting them')),
c16ec14d44b6 purge: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 10973
diff changeset
51 ('0', 'print0', None, _('end filenames with NUL, for use with xargs'
c16ec14d44b6 purge: use cmdutil.command decorator
Adrian Buehlmann <adrian@cadifra.com>
parents: 10973
diff changeset
52 ' (implies -p/--print)')),
32375
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
53 ] + cmdutil.walkopts,
40293
c303d65d2e34 help: assigning categories to existing commands
rdamazio@google.com
parents: 39463
diff changeset
54 _('hg purge [OPTION]... [DIR]...'),
c303d65d2e34 help: assigning categories to existing commands
rdamazio@google.com
parents: 39463
diff changeset
55 helpcategory=command.CATEGORY_MAINTENANCE)
6573
44cd348e6529 purge: eliminate dopurge
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
56 def purge(ui, repo, *dirs, **opts):
7605
3e592067515d 1 file changed, 7 insertions(+), 9 deletions(-)
Benjamin Pollack <benjamin@bitquabit.com>
parents: 7570
diff changeset
57 '''removes files not tracked by Mercurial
6573
44cd348e6529 purge: eliminate dopurge
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
58
9270
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
59 Delete files not known to Mercurial. This is useful to test local
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
60 and uncommitted changes in an otherwise-clean source tree.
6573
44cd348e6529 purge: eliminate dopurge
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
61
21853
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
62 This means that purge will delete the following by default:
9215
f6a880fa9cd7 purge: fix formatting of lists with proper reST markup
Martin Geisler <mg@lazybytes.net>
parents: 9072
diff changeset
63
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 9270
diff changeset
64 - Unknown files: files marked with "?" by :hg:`status`
9270
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
65 - Empty directories: in fact Mercurial ignores directories unless
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
66 they contain files under source control management
9215
f6a880fa9cd7 purge: fix formatting of lists with proper reST markup
Martin Geisler <mg@lazybytes.net>
parents: 9072
diff changeset
67
6573
44cd348e6529 purge: eliminate dopurge
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
68 But it will leave untouched:
9215
f6a880fa9cd7 purge: fix formatting of lists with proper reST markup
Martin Geisler <mg@lazybytes.net>
parents: 9072
diff changeset
69
f6a880fa9cd7 purge: fix formatting of lists with proper reST markup
Martin Geisler <mg@lazybytes.net>
parents: 9072
diff changeset
70 - Modified and unmodified tracked files
f6a880fa9cd7 purge: fix formatting of lists with proper reST markup
Martin Geisler <mg@lazybytes.net>
parents: 9072
diff changeset
71 - Ignored files (unless --all is specified)
10973
49a07f441496 Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents: 9270
diff changeset
72 - New files added to the repository (with :hg:`add`)
6573
44cd348e6529 purge: eliminate dopurge
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
73
21853
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
74 The --files and --dirs options can be used to direct purge to delete
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
75 only files, only directories, or both. If neither option is given,
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
76 both will be deleted.
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
77
6573
44cd348e6529 purge: eliminate dopurge
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
78 If directories are given on the command line, only files in these
44cd348e6529 purge: eliminate dopurge
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
79 directories are considered.
44cd348e6529 purge: eliminate dopurge
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
80
9270
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
81 Be careful with purge, as you could irreversibly delete some files
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
82 you forgot to add to the repository. If you only want to print the
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
83 list of files that this program would delete, use the --print
00cc7fa0c0c6 purge: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9215
diff changeset
84 option.
6573
44cd348e6529 purge: eliminate dopurge
Matt Mackall <mpm@selenic.com>
parents: 6212
diff changeset
85 '''
36571
5a3f8da663e5 purge: apply byteskwargs to opts, fixing all python3 issues here
Augie Fackler <augie@google.com>
parents: 32375
diff changeset
86 opts = pycompat.byteskwargs(opts)
39463
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
87
29222
ed4bd789fc55 purge: use opts.get()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29205
diff changeset
88 act = not opts.get('print')
6757
55c71226eceb purge: cleanup
Matt Mackall <mpm@selenic.com>
parents: 6754
diff changeset
89 eol = '\n'
29222
ed4bd789fc55 purge: use opts.get()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29205
diff changeset
90 if opts.get('print0'):
6757
55c71226eceb purge: cleanup
Matt Mackall <mpm@selenic.com>
parents: 6754
diff changeset
91 eol = '\0'
55c71226eceb purge: cleanup
Matt Mackall <mpm@selenic.com>
parents: 6754
diff changeset
92 act = False # --print0 implies --print
39463
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
93
29222
ed4bd789fc55 purge: use opts.get()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29205
diff changeset
94 removefiles = opts.get('files')
ed4bd789fc55 purge: use opts.get()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29205
diff changeset
95 removedirs = opts.get('dirs')
39463
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
96
21853
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
97 if not removefiles and not removedirs:
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
98 removefiles = True
8127b9e798b1 purge: add options for deleting only files or only directories
Ben Kehoe <benk@berkeley.edu>
parents: 20565
diff changeset
99 removedirs = True
2364
f368a1c302d5 Initial commit
demian@gaudron.lan
parents:
diff changeset
100
39463
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
101 match = scmutil.match(repo[None], dirs, opts)
4151
337010e50dcd Use nested functions instead of object methods
Emanuele Aina <faina.mail@tiscali.it>
parents: 4150
diff changeset
102
39463
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
103 paths = mergemod.purge(
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
104 repo, match, ignored=opts.get('all', False),
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
105 removeemptydirs=removedirs, removefiles=removefiles,
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
106 abortonerror=opts.get('abort_on_err'),
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
107 noop=not act)
4147
691f9168a815 Make the purge extension use the statwalk walker from the dirstate object
Emanuele Aina <faina.mail@tiscali.it>
parents: 4121
diff changeset
108
39463
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
109 for path in paths:
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
110 if not act:
7fea205fd5dc merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36571
diff changeset
111 ui.write('%s%s' % (path, eol))