annotate mercurial_all_paths.py @ 41:b8a7342fbf23

outgoingall and incomingall can't handle -g as it is already taken, sticking to just --group
author Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
date Sat, 24 Sep 2016 23:06:23 +0200
parents 6dae5ed53f22
children 2d6c7e0c1b2f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 # allpaths.py - execute commands on multiple paths
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 #
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 # This software may be used and distributed according to the terms of
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4 # the GNU General Public License version 2 or any later version.
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 '''execute commands on multiple paths'''
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 import mercurial.util
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 from mercurial.i18n import _
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14
8
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
15
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
16 def _iter_over_paths(command, ui, repo, **opts):
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
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 # Get the paths to push to.
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 paths = ui.configitems(group)
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 if not paths:
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25 raise mercurial.util.Abort(_('No paths defined in section %s') % group)
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
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 = {}
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
29
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
30 # 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
31 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
32 if path in handled:
35
6dae5ed53f22 Setting up tests for 3.8 (not yet really tested)
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 34
diff changeset
33 ui.note(_("Skipping %s as path %s was already handled %s\n") % (alias, handled[path]))
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
34 else:
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
35 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
36 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
37 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
38 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
39 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
40 raise
31
9d595bda6f2f Fixed buggy information printed on errors:
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 13
diff changeset
41 ui.warn(_('error handling %s: %s\n') % (alias, e))
8
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
42
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
43
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
44 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
45 """execute push on multiple paths"""
8
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
46 _iter_over_paths(mercurial.commands.push, ui, repo, **opts)
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
47
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 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
50 """execute pull on multiple paths"""
8
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
51 _iter_over_paths(mercurial.commands.pull, ui, repo, **opts)
0
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53
9
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
54 def incomingall(ui, repo, **opts):
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
55 """execute incoming on multiple paths"""
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
56 _iter_over_paths(mercurial.commands.incoming, ui, repo, **opts)
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
57
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
58
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
59 def outgoingall(ui, repo, **opts):
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
60 """execute outgoing on multiple paths"""
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
61 _iter_over_paths(mercurial.commands.outgoing, ui, repo, **opts)
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
7
1ea915867337 Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 6
diff changeset
64 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
65 """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
66 _, 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
67 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
68
1ea915867337 Standard push options are imported from mercurial, not copied here.
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 6
diff changeset
69
9
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
70 EXT_OPTS = [
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
71 ('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
72 ('', 'ignore-errors', None, _('continue execution despite errors')),
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
73 ]
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
74
0
6f92e4c814d1 Initial commit.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 cmdtable = {
6
b1d440f1027a (internal) Changed the way in which extension options are separated:
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 1
diff changeset
76 "pushall": (
b1d440f1027a (internal) Changed the way in which extension options are separated:
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 1
diff changeset
77 pushall,
9
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
78 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
79 _('[-g GROUP] [--ignore-errors] <push options>')),
8
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
80 "pullall": (
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
81 pullall,
9
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
82 EXT_OPTS + _original_options('pull'),
8
eced61373a74 Added pullall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 7
diff changeset
83 _('[-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
84 # 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
85 "incomingall": (
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
86 incomingall,
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
87 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
88 _('[--group GROUP] [--ignore-errors] <incoming options>')),
9
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
89 "outgoingall": (
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
90 outgoingall,
dac7580bfff2 Added incomingall and outgoingall
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 8
diff changeset
91 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
92 _('[--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
93 }
34
7500a4ecb935 Preliminary steps towards tests (tox.ini, would-be testedwith decl)
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 31
diff changeset
94
35
6dae5ed53f22 Setting up tests for 3.8 (not yet really tested)
Marcin Kasperski <Marcin.Kasperski@mekk.waw.pl>
parents: 34
diff changeset
95 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
96 buglink = 'https://bitbucket.org/Mekk/mercurial-all_paths/issues'