annotate hgext/children.py @ 28087:0b7ce0b16d8a

pathauditor: change parts verification order to be root first Previously, when we verified the parts of a path in the auditor, we would validate the deepest directory first, then it's parent, and so on up to the root. If there happened to be a symlink in the chain, that meant our first check would likely traverse that symlink. In some cases that symlink might point to a network filesystem that is expensive, and therefore this simple check could be very slow. The fix is to check the path parts starting at the root and working our way down. This has a minor performance difference in that we used to be able to short circuit from the audit if we reached a directory that had already been checked. Now we can't, but the cost is N dictionary look ups, where N is the number of parts in the path, which should be fairly minor.
author Durham Goode <durham@fb.com>
date Thu, 11 Feb 2016 17:04:33 -0800
parents 3501bd89dad2
children 7353cacd5d54
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
1 # Mercurial extension to provide the 'hg children' command
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
2 #
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
3 # Copyright 2007 by Intevation GmbH <intevation@intevation.de>
8228
eee2319c5895 add blank line after copyright notices and after header
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
4 #
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
5 # Author(s):
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
6 # Thomas Arendsen Hein <thomas@intevation.de>
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
7 #
8225
46293a0c7e9f updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents: 8076
diff changeset
8 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9253
diff changeset
9 # GNU General Public License version 2 or any later version.
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
10
16668
f393d20fb2ba children: mark extension as deprecated
Augie Fackler <raf@durin42.com>
parents: 11321
diff changeset
11 '''command to display child changesets (DEPRECATED)
f393d20fb2ba children: mark extension as deprecated
Augie Fackler <raf@durin42.com>
parents: 11321
diff changeset
12
16670
052047753f7d children: use hg reST role for example
Martin Geisler <mg@lazybytes.net>
parents: 16668
diff changeset
13 This extension is deprecated. You should use :hg:`log -r
052047753f7d children: use hg reST role for example
Martin Geisler <mg@lazybytes.net>
parents: 16668
diff changeset
14 "children(REV)"` instead.
16668
f393d20fb2ba children: mark extension as deprecated
Augie Fackler <raf@durin42.com>
parents: 11321
diff changeset
15 '''
8873
e872ef2e6758 help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8277
diff changeset
16
21780
2d3fb8476d7a children: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21248
diff changeset
17 from mercurial import cmdutil
6192
cd65a67aff31 Introduce templateopts and logopts to reduce duplicate option definitions.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4785
diff changeset
18 from mercurial.commands import templateopts
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
19 from mercurial.i18n import _
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
20
21248
48e859e30cbf children: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 17773
diff changeset
21 cmdtable = {}
48e859e30cbf children: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 17773
diff changeset
22 command = cmdutil.command(cmdtable)
25186
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24482
diff changeset
23 # Note for extension authors: ONLY specify testedwith = 'internal' for
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24482
diff changeset
24 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
80c5b2666a96 extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents: 24482
diff changeset
25 # 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: 24482
diff changeset
26 # leave the attribute unspecified.
16743
38caf405d010 hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents: 16670
diff changeset
27 testedwith = 'internal'
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
28
21248
48e859e30cbf children: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 17773
diff changeset
29 @command('children',
48e859e30cbf children: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 17773
diff changeset
30 [('r', 'rev', '',
48e859e30cbf children: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 17773
diff changeset
31 _('show children of the specified revision'), _('REV')),
48e859e30cbf children: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 17773
diff changeset
32 ] + templateopts,
21780
2d3fb8476d7a children: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21248
diff changeset
33 _('hg children [-r REV] [FILE]'),
2d3fb8476d7a children: define inferrepo in command decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21248
diff changeset
34 inferrepo=True)
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
35 def children(ui, repo, file_=None, **opts):
8026
683d8ebcf434 expand "dir" to "directory" in help texts
Martin Geisler <mg@lazybytes.net>
parents: 7986
diff changeset
36 """show the children of the given or working directory revision
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
37
9253
d6d811d90976 children: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9055
diff changeset
38 Print the children of the working directory's revisions. If a
d6d811d90976 children: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9055
diff changeset
39 revision is given via -r/--rev, the children of that revision will
d6d811d90976 children: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9055
diff changeset
40 be printed. If a file argument is given, revision in which the
d6d811d90976 children: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9055
diff changeset
41 file was last changed (after the working directory revision or the
d6d811d90976 children: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents: 9055
diff changeset
42 argument to --rev if given) is printed.
27716
3501bd89dad2 children: update help with replacement
timeless <timeless@mozdev.org>
parents: 25186
diff changeset
43
3501bd89dad2 children: update help with replacement
timeless <timeless@mozdev.org>
parents: 25186
diff changeset
44 Please use :hg:`log` instead::
3501bd89dad2 children: update help with replacement
timeless <timeless@mozdev.org>
parents: 25186
diff changeset
45
3501bd89dad2 children: update help with replacement
timeless <timeless@mozdev.org>
parents: 25186
diff changeset
46 hg children => hg log -r 'children()'
3501bd89dad2 children: update help with replacement
timeless <timeless@mozdev.org>
parents: 25186
diff changeset
47 hg children -r REV => hg log -r 'children(REV)'
3501bd89dad2 children: update help with replacement
timeless <timeless@mozdev.org>
parents: 25186
diff changeset
48
3501bd89dad2 children: update help with replacement
timeless <timeless@mozdev.org>
parents: 25186
diff changeset
49 See :hg:`help log` and :hg:`help revsets.children`.
3501bd89dad2 children: update help with replacement
timeless <timeless@mozdev.org>
parents: 25186
diff changeset
50
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
51 """
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
52 rev = opts.get('rev')
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
53 if file_:
24482
3eb9045396b0 children: don't pass filectx to displayer
Yuya Nishihara <yuya@tcha.org>
parents: 21780
diff changeset
54 fctx = repo.filectx(file_, changeid=rev)
3eb9045396b0 children: don't pass filectx to displayer
Yuya Nishihara <yuya@tcha.org>
parents: 21780
diff changeset
55 childctxs = [fcctx.changectx() for fcctx in fctx.children()]
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
56 else:
6747
f6c00b17387c use repo[changeid] to get a changectx
Matt Mackall <mpm@selenic.com>
parents: 6192
diff changeset
57 ctx = repo[rev]
24482
3eb9045396b0 children: don't pass filectx to displayer
Yuya Nishihara <yuya@tcha.org>
parents: 21780
diff changeset
58 childctxs = ctx.children()
4783
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
59
8b90d763ea90 Add extension to provide the 'hg children' command (with tests)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
60 displayer = cmdutil.show_changeset(ui, repo, opts)
24482
3eb9045396b0 children: don't pass filectx to displayer
Yuya Nishihara <yuya@tcha.org>
parents: 21780
diff changeset
61 for cctx in childctxs:
7369
87158be081b8 cmdutil: use change contexts for cset-printer and cset-templater
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 6747
diff changeset
62 displayer.show(cctx)
10152
56284451a22c Added support for templatevar "footer" to cmdutil.py
Robert Bachmann <rbachm@gmail.com>
parents: 9253
diff changeset
63 displayer.close()