annotate onsub.py @ 15:6ee895918df9

Ignore .orig and .err files
author Martin Geisler <mg@aragost.com>
date Tue, 06 Mar 2012 16:21:28 +0100
parents 34aa014b5989
children 44feac64ecfe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
11fd0da50daa Copyright and license header
Martin Geisler <mg@aragost.com>
parents: 4
diff changeset
1 # onsub.py - execute commands recursively on subrepositories
11fd0da50daa Copyright and license header
Martin Geisler <mg@aragost.com>
parents: 4
diff changeset
2 #
11fd0da50daa Copyright and license header
Martin Geisler <mg@aragost.com>
parents: 4
diff changeset
3 # Copyright 2010, 2011 aragost Trifork
11fd0da50daa Copyright and license header
Martin Geisler <mg@aragost.com>
parents: 4
diff changeset
4 #
11fd0da50daa Copyright and license header
Martin Geisler <mg@aragost.com>
parents: 4
diff changeset
5 # This software may be used and distributed according to the terms of
11fd0da50daa Copyright and license header
Martin Geisler <mg@aragost.com>
parents: 4
diff changeset
6 # the GNU General Public License version 2 or any later version.
0
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
7
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
8 import os
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
9 from mercurial.i18n import _
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
10 from mercurial import extensions, subrepo, util
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
11
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
12 """execute a command in each subrepository"""
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
13
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
14 def onsub(ui, repo, *args, **opts):
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
15 """execute a command in each subrepository
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
16
7
a2ad7553ba79 Improve help text (in particular, clarify meaning of --print0).
Greg Ward <greg@gerg.ca>
parents: 6
diff changeset
17 Executes CMD with the current working directory set to the root of
a2ad7553ba79 Improve help text (in particular, clarify meaning of --print0).
Greg Ward <greg@gerg.ca>
parents: 6
diff changeset
18 each subrepository. By default, execution stops if CMD returns a
a2ad7553ba79 Improve help text (in particular, clarify meaning of --print0).
Greg Ward <greg@gerg.ca>
parents: 6
diff changeset
19 non-zero exit code. Use --ignore-errors to override this.
0
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
20
14
34aa014b5989 Add help for POST-CMD
Martin Geisler <mg@aragost.com>
parents: 12
diff changeset
21 If a POST-CMD is specified, this will be executed after all
34aa014b5989 Add help for POST-CMD
Martin Geisler <mg@aragost.com>
parents: 12
diff changeset
22 subrepositories below the current subrepository has been visited.
34aa014b5989 Add help for POST-CMD
Martin Geisler <mg@aragost.com>
parents: 12
diff changeset
23 This corresponds to a post-order traversal of the tree.
34aa014b5989 Add help for POST-CMD
Martin Geisler <mg@aragost.com>
parents: 12
diff changeset
24
34aa014b5989 Add help for POST-CMD
Martin Geisler <mg@aragost.com>
parents: 12
diff changeset
25 It is an error to specify a POST-CMD together with the
34aa014b5989 Add help for POST-CMD
Martin Geisler <mg@aragost.com>
parents: 12
diff changeset
26 --breadth-first flag.
34aa014b5989 Add help for POST-CMD
Martin Geisler <mg@aragost.com>
parents: 12
diff changeset
27
7
a2ad7553ba79 Improve help text (in particular, clarify meaning of --print0).
Greg Ward <greg@gerg.ca>
parents: 6
diff changeset
28 Use --verbose/-v to print the command being run and the subrepo
a2ad7553ba79 Improve help text (in particular, clarify meaning of --print0).
Greg Ward <greg@gerg.ca>
parents: 6
diff changeset
29 name for each run of CMD in a subrepo. Alternately, use
a2ad7553ba79 Improve help text (in particular, clarify meaning of --print0).
Greg Ward <greg@gerg.ca>
parents: 6
diff changeset
30 --print0/-0 to print just the subrepo name followed by a NUL
a2ad7553ba79 Improve help text (in particular, clarify meaning of --print0).
Greg Ward <greg@gerg.ca>
parents: 6
diff changeset
31 character instead of a newline. This can be useful in combination
a2ad7553ba79 Improve help text (in particular, clarify meaning of --print0).
Greg Ward <greg@gerg.ca>
parents: 6
diff changeset
32 with :hg:`status --print0`.
0
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
33
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
34 The command has access to the following environment variables:
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
35
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
36 ``HG_REPO``:
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
37 Absolute path to the top-level repository in which the onsub
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
38 command was executed.
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
39
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
40 ``HG_SUBPATH``:
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
41 Relative path to the current subrepository from the top-level
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
42 repository.
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
43
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
44 ``HG_SUBURL``:
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
45 URL for the current subrepository as specified in the
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
46 containing repository's ``.hgsub`` file.
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
47
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
48 ``HG_SUBSTATE``:
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
49 State of the current subrepository as specified in the
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
50 containing repository's ``.hgsubstate`` file.
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
51 """
12
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
52 if len(args) == 2:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
53 precmd = args[0]
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
54 postcmd = args[1]
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
55 if opts.get('breadth_first') or opts.get('post_order'):
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
56 raise util.Abort(_("onsub: '-b' and '-p' imply the use of only one command"))
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
57 elif len(args) == 1:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
58 if opts.get('post_order'):
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
59 precmd = None
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
60 postcmd = args[0]
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
61 else:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
62 precmd = args[0]
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
63 postcmd = None
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
64 elif len(args) == 0:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
65 # cmd == '' means only do print0
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
66 if opts.get('post_order'):
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
67 precmd = None
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
68 postcmd = ''
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
69 else:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
70 precmd = ''
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
71 postcmd = None
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
72 else:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
73 raise util.Abort(_("onsub: at most 2 command arguments required"))
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
74 if opts.get('post_order') and opts.get('breadth_first'):
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
75 raise util.Abort(_("onsub: '-b' and '-p' are mutually exclusive"))
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
76 foreach(ui, repo, precmd, postcmd,
8
ecc4fd16555d Add --max-depth option to limit depth of recursion.
Greg Ward <greg@gerg.ca>
parents: 7
diff changeset
77 not opts.get('breadth_first'),
ecc4fd16555d Add --max-depth option to limit depth of recursion.
Greg Ward <greg@gerg.ca>
parents: 7
diff changeset
78 opts.get('max_depth'),
ecc4fd16555d Add --max-depth option to limit depth of recursion.
Greg Ward <greg@gerg.ca>
parents: 7
diff changeset
79 opts.get('print0'),
12
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
80 opts.get('ignore_errors'),
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
81 opts.get('root_repo'))
0
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
82
12
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
83 def execCmd(ui, rootrepo, sub, doaction, print0, cmd, inroot, ignoreerrors):
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
84 """ if doaction, execute cmd; else, do nothing. if inroot,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
85 then command is executed inside rootrepo; else, inside sub
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
86
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
87 If cmd == None, do nothing. If cmd == '', do only the print0 (if needed).
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
88 Else, do either print0 or the debugging message, then execute the command.
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
89 """
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
90 if not doaction:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
91 return
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
92 if inroot:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
93 envargdict = dict(HG_SUBPATH='.',
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
94 HG_SUBURL='.',
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
95 HG_SUBSTATE=rootrepo['.'].hex(),
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
96 HG_REPO=rootrepo.root)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
97 relpath = '.'
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
98 cmdwd = rootrepo.root
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
99 else:
4
aa0c2e9f5f59 Adapt to Mercurial API change
Martin Geisler <mg@aragost.com>
parents: 3
diff changeset
100 # subrepo.relpath was renamed to subrepo.subrelpath in
aa0c2e9f5f59 Adapt to Mercurial API change
Martin Geisler <mg@aragost.com>
parents: 3
diff changeset
101 # 18b5b6392fcf.
aa0c2e9f5f59 Adapt to Mercurial API change
Martin Geisler <mg@aragost.com>
parents: 3
diff changeset
102 if hasattr(subrepo, 'relpath'):
aa0c2e9f5f59 Adapt to Mercurial API change
Martin Geisler <mg@aragost.com>
parents: 3
diff changeset
103 relpath = subrepo.relpath(sub)
aa0c2e9f5f59 Adapt to Mercurial API change
Martin Geisler <mg@aragost.com>
parents: 3
diff changeset
104 else:
aa0c2e9f5f59 Adapt to Mercurial API change
Martin Geisler <mg@aragost.com>
parents: 3
diff changeset
105 relpath = subrepo.subrelpath(sub)
12
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
106 envargdict = dict(HG_SUBPATH=relpath,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
107 HG_SUBURL=sub._path,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
108 HG_SUBSTATE=sub._state[1],
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
109 HG_REPO=rootrepo.root)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
110 cmdwd = os.path.join(rootrepo.root, relpath)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
111 if ignoreerrors:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
112 onerr = None
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
113 else:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
114 onerr = util.Abort
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
115 if cmd != None:
0
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
116 if print0:
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
117 ui.write(relpath, "\0")
12
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
118 if cmd != '':
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
119 if not print0: ui.note(_("executing '%s' in %s\n") % (cmd, relpath))
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
120 util.system(cmd, environ=envargdict, cwd=cmdwd, onerr=onerr,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
121 errprefix=_('terminated onsub in %s') % relpath)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
122
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
123
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
124
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
125 def foreach(ui, repo, precmd, postcmd, depthfirst, maxdepth, print0, ignoreerrors, includeroot):
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
126 """execute (pre/post)cmd in repo.root and in each subrepository"""
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
127 seen = set()
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
128 execCmd(ui=ui, rootrepo=repo, sub=None, doaction=includeroot,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
129 print0=print0, cmd=precmd, inroot=True, ignoreerrors=ignoreerrors)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
130 ctx = repo['.']
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
131 work = [(1, ctx.sub(subpath)) for subpath in sorted(ctx.substate)]
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
132 if depthfirst:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
133 work.reverse()
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
134 while work:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
135 if depthfirst:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
136 (depth, sub) = work[-1]
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
137 if sub in seen:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
138 dopreaction = False
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
139 dopostaction = True
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
140 doaddchildren = False
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
141 work.pop()
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
142 else:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
143 dopreaction = True
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
144 dopostaction = False
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
145 doaddchildren = True
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
146 seen.add(sub)
3
a2184bbf38e6 Implement --ignore-errors.
Martin Geisler <mg@lazybytes.net>
parents: 0
diff changeset
147 else:
12
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
148 (depth, sub) = work.pop(0)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
149 dopreaction = True
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
150 dopostaction = False
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
151 doaddchildren = True
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
152 if depth > maxdepth >= 0:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
153 continue
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
154 execCmd(ui=ui, rootrepo=repo, sub=sub, doaction=dopreaction,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
155 print0=print0, cmd=precmd, inroot=False, ignoreerrors=ignoreerrors)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
156 if doaddchildren:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
157 if isinstance(sub, subrepo.hgsubrepo):
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
158 rev = sub._state[1]
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
159 ctx = sub._repo[rev]
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
160 w = [(depth + 1, ctx.sub(subpath))
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
161 for subpath in sorted(ctx.substate)]
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
162 if depthfirst:
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
163 w.reverse()
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
164 work.extend(w)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
165 execCmd(ui=ui, rootrepo=repo, sub=sub, doaction=dopostaction,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
166 print0=print0, cmd=postcmd, inroot=False, ignoreerrors=ignoreerrors)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
167 execCmd(ui=ui, rootrepo=repo, sub=None, doaction=includeroot,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
168 print0=print0, cmd=postcmd, inroot=True, ignoreerrors=ignoreerrors)
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
169
0
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
170 cmdtable = {
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
171 "onsub":
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
172 (onsub,
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
173 [('b', 'breadth-first', None,
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
174 _('use breadth-first traversal')),
12
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
175 ('p', 'post-order', None,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
176 _('use post-order depth-first traversal')),
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
177 ('', 'root-repo', None,
90b54c4fe4fe onsub extension: pre and post order
jakob krainz <jakob@hawo-net.de>
parents: 8
diff changeset
178 _('include root repository in traversal')),
8
ecc4fd16555d Add --max-depth option to limit depth of recursion.
Greg Ward <greg@gerg.ca>
parents: 7
diff changeset
179 ('', 'max-depth', -1,
ecc4fd16555d Add --max-depth option to limit depth of recursion.
Greg Ward <greg@gerg.ca>
parents: 7
diff changeset
180 _('limit recursion to N levels (negative for no limit)'), 'N'),
3
a2184bbf38e6 Implement --ignore-errors.
Martin Geisler <mg@lazybytes.net>
parents: 0
diff changeset
181 ('', 'ignore-errors', None,
a2184bbf38e6 Implement --ignore-errors.
Martin Geisler <mg@lazybytes.net>
parents: 0
diff changeset
182 _('continue execution despite errors')),
0
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
183 ('0', 'print0', None,
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
184 _('end subrepository names with NUL, for use with xargs'))],
14
34aa014b5989 Add help for POST-CMD
Martin Geisler <mg@aragost.com>
parents: 12
diff changeset
185 _('[-b] [-0] [--ignore-errors] CMD [POST-CMD]'))
0
e49f3bbfec4d Initial version.
Martin Geisler <mg@aragost.com>
parents:
diff changeset
186 }