Mercurial > hg-allpaths
annotate mercurial_all_paths.py @ 45:237dd8c4fe78
Finalized separators
author | Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl> |
---|---|
date | Sun, 25 Sep 2016 09:35:56 +0200 |
parents | 2d6c7e0c1b2f |
children | 916b05f73b53 |
rev | line source |
---|---|
0 | 1 # allpaths.py - execute commands on multiple paths |
2 # | |
3 # This software may be used and distributed according to the terms of | |
4 # the GNU General Public License version 2 or any later version. | |
5 | |
6 '''execute commands on multiple paths''' | |
7 | |
8 import mercurial.util | |
9 import mercurial.commands | |
7
1ea915867337
Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
6
diff
changeset
|
10 import mercurial.cmdutil |
0 | 11 from mercurial.i18n import _ |
12 | |
34
7500a4ecb935
Preliminary steps towards tests (tox.ini, would-be testedwith decl)
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
31
diff
changeset
|
13 # pylint:disable=invalid-name,broad-except,line-too-long |
0 | 14 |
8
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
15 |
44
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
16 def _iter_over_paths(command, ui, repo, add_sep, **opts): |
8
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
17 """execute given command on multiple paths""" |
6
b1d440f1027a
(internal) Changed the way in which extension options are separated:
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
1
diff
changeset
|
18 # Extract our options and filter them out |
11
e702b63eea3f
Making it obvious that we scan paths section
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
9
diff
changeset
|
19 group = opts.pop('group', None) or 'paths' |
6
b1d440f1027a
(internal) Changed the way in which extension options are separated:
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
1
diff
changeset
|
20 ignore_errors = opts.pop('ignore_errors', None) |
0 | 21 |
22 # Get the paths to push to. | |
23 paths = ui.configitems(group) | |
24 if not paths: | |
25 raise mercurial.util.Abort(_('No paths defined in section %s') % group) | |
26 | |
12
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
27 # Used to avoid handling duplicate paths twice |
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
28 handled = {} |
44
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
29 # Used to add extra newline between items |
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
30 sep = '' |
12
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
31 |
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
32 # Act! |
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
33 for alias, path in paths: |
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
34 if path in handled: |
45
237dd8c4fe78
Finalized separators
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
44
diff
changeset
|
35 ui.status(sep + _("Skipping %s as path %s was already handled\n") % (alias, handled[path])) |
237dd8c4fe78
Finalized separators
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
44
diff
changeset
|
36 sep = '\n' |
12
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
37 else: |
44
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
38 ui.status(sep) |
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
39 sep = '\n' if add_sep else '' |
12
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
40 handled[path] = alias |
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
41 try: |
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
42 command(ui, repo, path, **opts) |
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
43 except Exception as e: |
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
44 if not ignore_errors: |
bed42905e871
Avoiding doing pull or push twice in case some path has more than one
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
11
diff
changeset
|
45 raise |
31
9d595bda6f2f
Fixed buggy information printed on errors:
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
13
diff
changeset
|
46 ui.warn(_('error handling %s: %s\n') % (alias, e)) |
44
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
47 sep = '\n' |
8
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
48 |
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
49 def pushall(ui, repo, **opts): |
35
6dae5ed53f22
Setting up tests for 3.8 (not yet really tested)
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
34
diff
changeset
|
50 """execute push on multiple paths""" |
44
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
51 _iter_over_paths(mercurial.commands.push, ui, repo, True, **opts) |
8
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
52 |
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
53 |
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
54 def pullall(ui, repo, **opts): |
35
6dae5ed53f22
Setting up tests for 3.8 (not yet really tested)
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
34
diff
changeset
|
55 """execute pull on multiple paths""" |
44
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
56 _iter_over_paths(mercurial.commands.pull, ui, repo, True, **opts) |
0 | 57 |
58 | |
9
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
59 def incomingall(ui, repo, **opts): |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
60 """execute incoming on multiple paths""" |
44
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
61 _iter_over_paths(mercurial.commands.incoming, ui, repo, False, **opts) |
9
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
62 |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
63 |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
64 def outgoingall(ui, repo, **opts): |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
65 """execute outgoing on multiple paths""" |
44
2d6c7e0c1b2f
Added newline between successive items output
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
41
diff
changeset
|
66 _iter_over_paths(mercurial.commands.outgoing, ui, repo, False, **opts) |
9
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
67 |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
68 |
7
1ea915867337
Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
6
diff
changeset
|
69 def _original_options(cmdname): |
1ea915867337
Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
6
diff
changeset
|
70 """Gets list of given command options as specified in Mercurial core""" |
1ea915867337
Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
6
diff
changeset
|
71 _, spec = mercurial.cmdutil.findcmd(cmdname, mercurial.commands.table) |
1ea915867337
Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
6
diff
changeset
|
72 return spec[1] |
1ea915867337
Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
6
diff
changeset
|
73 |
1ea915867337
Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
6
diff
changeset
|
74 |
9
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
75 EXT_OPTS = [ |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
76 ('g', 'group', 'paths', _('use a named group of paths')), |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
77 ('', 'ignore-errors', None, _('continue execution despite errors')), |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
78 ] |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
79 |
0 | 80 cmdtable = { |
6
b1d440f1027a
(internal) Changed the way in which extension options are separated:
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
1
diff
changeset
|
81 "pushall": ( |
b1d440f1027a
(internal) Changed the way in which extension options are separated:
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
1
diff
changeset
|
82 pushall, |
9
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
83 EXT_OPTS + _original_options('push'), |
7
1ea915867337
Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
6
diff
changeset
|
84 _('[-g GROUP] [--ignore-errors] <push options>')), |
8
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
85 "pullall": ( |
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
86 pullall, |
9
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
87 EXT_OPTS + _original_options('pull'), |
8
eced61373a74
Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
7
diff
changeset
|
88 _('[-g GROUP] [--ignore-errors] <pull options>')), |
41
b8a7342fbf23
outgoingall and incomingall can't handle -g as it is already taken,
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
35
diff
changeset
|
89 # For incoming and outgoing -g is taken (--git diff format) |
9
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
90 "incomingall": ( |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
91 incomingall, |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
92 EXT_OPTS + _original_options('incoming'), |
41
b8a7342fbf23
outgoingall and incomingall can't handle -g as it is already taken,
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
35
diff
changeset
|
93 _('[--group GROUP] [--ignore-errors] <incoming options>')), |
9
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
94 "outgoingall": ( |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
95 outgoingall, |
dac7580bfff2
Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
8
diff
changeset
|
96 EXT_OPTS + _original_options('outgoing'), |
41
b8a7342fbf23
outgoingall and incomingall can't handle -g as it is already taken,
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
35
diff
changeset
|
97 _('[--group GROUP] [--ignore-errors] <outgoing options>')), |
6
b1d440f1027a
(internal) Changed the way in which extension options are separated:
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
1
diff
changeset
|
98 } |
34
7500a4ecb935
Preliminary steps towards tests (tox.ini, would-be testedwith decl)
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
31
diff
changeset
|
99 |
35
6dae5ed53f22
Setting up tests for 3.8 (not yet really tested)
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
34
diff
changeset
|
100 testedwith = '2.7 2.9 3.0 3.3 3.6 3.7 3.8' |
34
7500a4ecb935
Preliminary steps towards tests (tox.ini, would-be testedwith decl)
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents:
31
diff
changeset
|
101 buglink = 'https://bitbucket.org/Mekk/mercurial-all_paths/issues' |