Mercurial > hgsubversion
annotate hgsubversion/wrappers.py @ 1602:6a6ce9d9da35 default tip
compathacks: make memfilectx construction compatible with hg5.0
'copied' in memfilectx was renamed to 'copysource' in 550a172a603b9ed in core
mercurial.
author | Pulkit Goyal <pulkit@yandex-team.ru> |
---|---|
date | Fri, 19 Apr 2019 16:28:39 +0300 |
parents | 5d8603f080c5 |
children |
rev | line source |
---|---|
1494
051a517b473b
findcommonoutgoing: adapt to change to take a repo rather than changelog
Augie Fackler <raf@durin42.com>
parents:
1376
diff
changeset
|
1 import inspect |
051a517b473b
findcommonoutgoing: adapt to change to take a repo rather than changelog
Augie Fackler <raf@durin42.com>
parents:
1376
diff
changeset
|
2 import os |
051a517b473b
findcommonoutgoing: adapt to change to take a repo rather than changelog
Augie Fackler <raf@durin42.com>
parents:
1376
diff
changeset
|
3 |
264
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
4 from hgext import rebase as hgrebase |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
5 |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
438
diff
changeset
|
6 from mercurial import cmdutil |
1039
3df6ed4e7561
drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1005
diff
changeset
|
7 from mercurial import discovery |
1246
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
8 try: |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
9 from mercurial import exchange |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
10 exchange.push # existed in first iteration of this file |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
11 except ImportError: |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
12 # We only *use* the exchange module in hg 3.2+, so this is safe |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
13 pass |
1555
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1551
diff
changeset
|
14 from mercurial import error as hgerror |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
15 from mercurial import patch |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
16 from mercurial import hg |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
17 from mercurial import util as hgutil |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
18 from mercurial import node |
283
521d9c1bb11d
Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents:
278
diff
changeset
|
19 from mercurial import i18n |
713
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
20 from mercurial import extensions |
1557
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
21 try: |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
22 # hg 4.6 and later |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
23 from mercurial import logcmdutil |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
24 logcmdutil.changesetdisplayer |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
25 except ImportError: |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
26 # hg 4.5 and earlier |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
27 logcmdutil = None |
1039
3df6ed4e7561
drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1005
diff
changeset
|
28 from mercurial import scmutil |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
29 |
1601
5d8603f080c5
compathacks: add compat code for ui.makeprogress() deprecation
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1582
diff
changeset
|
30 import compathacks |
435
7c576ae19d80
replay: start new replay module that has the relevant functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
31 import replay |
438
e8f13bd20467
pushmod: split push functions out into separate module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
435
diff
changeset
|
32 import pushmod |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
33 import stupid as stupidmod |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
34 import svnwrap |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
35 import util |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
36 |
1055
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
37 try: |
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
38 from mercurial import obsolete |
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
39 except ImportError: |
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
40 obsolete = None |
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
41 |
366
25ebdc16b05b
Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
356
diff
changeset
|
42 pullfuns = { |
435
7c576ae19d80
replay: start new replay module that has the relevant functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
432
diff
changeset
|
43 True: replay.convert_rev, |
366
25ebdc16b05b
Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
356
diff
changeset
|
44 False: stupidmod.convert_rev, |
25ebdc16b05b
Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
356
diff
changeset
|
45 } |
25ebdc16b05b
Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
356
diff
changeset
|
46 |
404
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
47 revmeta = [ |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
48 ('revision', 'revnum'), |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
49 ('user', 'author'), |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
50 ('date', 'date'), |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
51 ('message', 'message'), |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
52 ] |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
53 |
507
4ce09bf4d382
wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents:
499
diff
changeset
|
54 |
4ce09bf4d382
wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents:
499
diff
changeset
|
55 def version(orig, ui, *args, **opts): |
4ce09bf4d382
wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents:
499
diff
changeset
|
56 svn = opts.pop('svn', None) |
4ce09bf4d382
wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents:
499
diff
changeset
|
57 orig(ui, *args, **opts) |
4ce09bf4d382
wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents:
499
diff
changeset
|
58 if svn: |
664
5c94a86ddd73
version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
59 svnversion, bindings = svnwrap.version() |
5c94a86ddd73
version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
60 ui.status('\n') |
507
4ce09bf4d382
wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents:
499
diff
changeset
|
61 ui.status('hgsubversion: %s\n' % util.version(ui)) |
664
5c94a86ddd73
version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
62 ui.status('Subversion: %s\n' % svnversion) |
5c94a86ddd73
version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
657
diff
changeset
|
63 ui.status('bindings: %s\n' % bindings) |
507
4ce09bf4d382
wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents:
499
diff
changeset
|
64 |
4ce09bf4d382
wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents:
499
diff
changeset
|
65 |
403
37c96b78b8c0
uisetup: use a single loop/abstraction for wrapping all the commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
402
diff
changeset
|
66 def parents(orig, ui, repo, *args, **opts): |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
67 """show Mercurial & Subversion parents of the working dir or revision |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
68 """ |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
69 if not opts.get('svn', False): |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
70 return orig(ui, repo, *args, **opts) |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
71 meta = repo.svnmeta() |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
72 hashes = meta.revmap.hashes() |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
438
diff
changeset
|
73 ha = util.parentrev(ui, repo, meta, hashes) |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
74 if ha.node() == node.nullid: |
1555
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1551
diff
changeset
|
75 raise hgerror.Abort('No parent svn revision!') |
1557
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
76 if logcmdutil is not None: |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
77 displayer = logcmdutil.changesetdisplayer( |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
78 ui, repo, opts, buffered=False) |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
79 else: |
dd409375c261
wrappers: adapt to introduction of logcmdutil package in hg
Augie Fackler <raf@durin42.com>
parents:
1555
diff
changeset
|
80 displayer = cmdutil.show_changeset(ui, repo, opts, buffered=False) |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
81 displayer.show(ha) |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
82 return 0 |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
83 |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
84 |
915
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
85 def getpeer(ui, opts, source): |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
86 # Since 2.3 (1ac628cd7113) |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
87 peer = getattr(hg, 'peer', None) |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
88 if peer: |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
89 return peer(ui, opts, source) |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
90 return hg.repository(ui, source) |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
91 |
930
5bacb9c63e3e
Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents:
928
diff
changeset
|
92 def getlocalpeer(ui, opts, source): |
5bacb9c63e3e
Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents:
928
diff
changeset
|
93 peer = getpeer(ui, opts, source) |
5bacb9c63e3e
Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents:
928
diff
changeset
|
94 repo = getattr(peer, 'local', lambda: peer)() |
5bacb9c63e3e
Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents:
928
diff
changeset
|
95 if isinstance(repo, bool): |
5bacb9c63e3e
Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents:
928
diff
changeset
|
96 repo = peer |
5bacb9c63e3e
Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents:
928
diff
changeset
|
97 return repo |
915
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
98 |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
99 def getcaps(other): |
1519
aec176db232c
svnrepo: update with the latest upstream change
Jun Wu <quark@fb.com>
parents:
1516
diff
changeset
|
100 caps = (getattr(other, 'caps', None) or |
915
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
101 getattr(other, 'capabilities', None) or set()) |
1519
aec176db232c
svnrepo: update with the latest upstream change
Jun Wu <quark@fb.com>
parents:
1516
diff
changeset
|
102 # 'capabilities' might be an instance method |
aec176db232c
svnrepo: update with the latest upstream change
Jun Wu <quark@fb.com>
parents:
1516
diff
changeset
|
103 if hgutil.safehasattr(caps, '__call__'): |
aec176db232c
svnrepo: update with the latest upstream change
Jun Wu <quark@fb.com>
parents:
1516
diff
changeset
|
104 caps = caps() |
aec176db232c
svnrepo: update with the latest upstream change
Jun Wu <quark@fb.com>
parents:
1516
diff
changeset
|
105 return caps |
915
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
106 |
771
768639283275
incoming: pass unexpanded source to wrapped function (fixes #178)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
769
diff
changeset
|
107 def incoming(orig, ui, repo, origsource='default', **opts): |
404
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
108 """show incoming revisions from Subversion |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
109 """ |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
110 |
771
768639283275
incoming: pass unexpanded source to wrapped function (fixes #178)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
769
diff
changeset
|
111 source, revs, checkout = util.parseurl(ui.expandpath(origsource)) |
915
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
112 other = getpeer(ui, opts, source) |
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
113 if 'subversion' not in getcaps(other): |
771
768639283275
incoming: pass unexpanded source to wrapped function (fixes #178)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
769
diff
changeset
|
114 return orig(ui, repo, origsource, **opts) |
404
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
115 |
751
5e54e333ec3d
wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
749
diff
changeset
|
116 svn = other.svn |
5e54e333ec3d
wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
749
diff
changeset
|
117 meta = repo.svnmeta(svn.uuid, svn.subdir) |
404
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
118 |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
119 ui.status('incoming changes from %s\n' % other.svnurl) |
1434
0a6b3da6d34c
RevMap: move lastpulled from SVNMeta down into RevMap
Augie Fackler <raf@durin42.com>
parents:
1426
diff
changeset
|
120 svnrevisions = list(svn.revisions(start=meta.revmap.lastpulled)) |
984
6315bdd1546e
wrappers: Implement --newest-first option in incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
983
diff
changeset
|
121 if opts.get('newest_first'): |
6315bdd1546e
wrappers: Implement --newest-first option in incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
983
diff
changeset
|
122 svnrevisions.reverse() |
985
b303b60be11e
wrappers: Return the same value as the original incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
984
diff
changeset
|
123 # Returns 0 if there are incoming changes, 1 otherwise. |
b303b60be11e
wrappers: Return the same value as the original incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
984
diff
changeset
|
124 if len(svnrevisions) > 0: |
b303b60be11e
wrappers: Return the same value as the original incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
984
diff
changeset
|
125 ret = 0 |
b303b60be11e
wrappers: Return the same value as the original incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
984
diff
changeset
|
126 else: |
b303b60be11e
wrappers: Return the same value as the original incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
984
diff
changeset
|
127 ret = 1 |
984
6315bdd1546e
wrappers: Implement --newest-first option in incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
983
diff
changeset
|
128 for r in svnrevisions: |
404
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
129 ui.status('\n') |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
130 for label, attr in revmeta: |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
131 l1 = label + ':' |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
132 val = str(getattr(r, attr)).strip() |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
133 if not ui.verbose: |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
134 val = val.split('\n')[0] |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
135 ui.status('%s%s\n' % (l1.ljust(13), val)) |
985
b303b60be11e
wrappers: Return the same value as the original incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents:
984
diff
changeset
|
136 return ret |
404
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
137 |
28e4b47b2179
add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
403
diff
changeset
|
138 |
999
3f45bd7b60cf
bundle: add 'portable' parameter to prevent error (issue383)
Michael Connor <mconnor@fb.com>
parents:
992
diff
changeset
|
139 def findcommonoutgoing(repo, other, onlyheads=None, force=False, |
3f45bd7b60cf
bundle: add 'portable' parameter to prevent error (issue383)
Michael Connor <mconnor@fb.com>
parents:
992
diff
changeset
|
140 commoninc=None, portable=False): |
805
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
804
diff
changeset
|
141 assert other.capable('subversion') |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
804
diff
changeset
|
142 # split off #rev; TODO implement --revision/#rev support |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
804
diff
changeset
|
143 svn = other.svn |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
804
diff
changeset
|
144 meta = repo.svnmeta(svn.uuid, svn.subdir) |
1376
717bf096197e
compat: fix some more use of repo.parents()
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1368
diff
changeset
|
145 parent = repo[None].parents()[0].node() |
805
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
804
diff
changeset
|
146 hashes = meta.revmap.hashes() |
845
8cf8ff0f52fe
outgoing: fix for hg change cd956049fc14
Augie Fackler <durin42@gmail.com>
parents:
841
diff
changeset
|
147 common, heads = util.outgoing_common_and_heads(repo, hashes, parent) |
1039
3df6ed4e7561
drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1005
diff
changeset
|
148 outobj = getattr(discovery, 'outgoing', None) |
3df6ed4e7561
drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1005
diff
changeset
|
149 if outobj is not None: |
1492 | 150 argspec = inspect.getargspec(outobj.__init__) |
151 if 'repo' in argspec[0]: | |
152 # Starting from Mercurial 3.9.1 outgoing.__init__ accepts | |
153 # `repo` object instead of a `changelog` | |
154 return outobj(repo, common, heads) | |
1498 | 155 # Mercurial 2.1 through 3.9 |
1039
3df6ed4e7561
drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1005
diff
changeset
|
156 return outobj(repo.changelog, common, heads) |
845
8cf8ff0f52fe
outgoing: fix for hg change cd956049fc14
Augie Fackler <durin42@gmail.com>
parents:
841
diff
changeset
|
157 # Mercurial 2.0 and earlier |
8cf8ff0f52fe
outgoing: fix for hg change cd956049fc14
Augie Fackler <durin42@gmail.com>
parents:
841
diff
changeset
|
158 return common, heads |
805
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
804
diff
changeset
|
159 |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
804
diff
changeset
|
160 |
a3f727c41c1d
Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
804
diff
changeset
|
161 def findoutgoing(repo, dest=None, heads=None, force=False): |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
162 """show changesets not found in the Subversion repository |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
163 """ |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
346
diff
changeset
|
164 assert dest.capable('subversion') |
284
f8f9a2993705
Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents:
283
diff
changeset
|
165 # split off #rev; TODO implement --revision/#rev support |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
821
diff
changeset
|
166 # svnurl, revs, checkout = util.parseurl(dest.svnurl, heads) |
751
5e54e333ec3d
wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
749
diff
changeset
|
167 svn = dest.svn |
5e54e333ec3d
wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
749
diff
changeset
|
168 meta = repo.svnmeta(svn.uuid, svn.subdir) |
1376
717bf096197e
compat: fix some more use of repo.parents()
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1368
diff
changeset
|
169 parent = repo[None].parents()[0].node() |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
170 hashes = meta.revmap.hashes() |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
171 return util.outgoing_revisions(repo, hashes, parent) |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
172 |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
173 |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
174 def diff(orig, ui, repo, *args, **opts): |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
175 """show a diff of the most recent revision against its parent from svn |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
176 """ |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
177 if not opts.get('svn', False) or opts.get('change', None): |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
178 return orig(ui, repo, *args, **opts) |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
179 meta = repo.svnmeta() |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
180 hashes = meta.revmap.hashes() |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
181 if not opts.get('rev', None): |
1376
717bf096197e
compat: fix some more use of repo.parents()
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1368
diff
changeset
|
182 parent = repo[None].parents()[0] |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
183 o_r = util.outgoing_revisions(repo, hashes, parent.node()) |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
184 if o_r: |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
185 parent = repo[o_r[-1]].parents()[0] |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
186 opts['rev'] = ['%s:.' % node.hex(parent.node()), ] |
1039
3df6ed4e7561
drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1005
diff
changeset
|
187 node1, node2 = scmutil.revpair(repo, opts['rev']) |
1573
bb09e8a230d6
wrappers: fix old versions of hg without breaking 4.6
Augie Fackler <raf@durin42.com>
parents:
1564
diff
changeset
|
188 if not isinstance(node1, bytes): |
bb09e8a230d6
wrappers: fix old versions of hg without breaking 4.6
Augie Fackler <raf@durin42.com>
parents:
1564
diff
changeset
|
189 # hg 4.6 and later return contexts, so convert to bytestr |
bb09e8a230d6
wrappers: fix old versions of hg without breaking 4.6
Augie Fackler <raf@durin42.com>
parents:
1564
diff
changeset
|
190 node1, node2 = node1.node(), node2.node() |
406
e360558ba65f
add a function to generate svn_commit_hashes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
405
diff
changeset
|
191 baserev, _junk = hashes.get(node1, (-1, 'junk')) |
e360558ba65f
add a function to generate svn_commit_hashes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
405
diff
changeset
|
192 newrev, _junk = hashes.get(node2, (-1, 'junk')) |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
193 it = patch.diff(repo, node1, node2, |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
194 opts=patch.diffopts(ui, opts={'git': True, |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
195 'show_function': False, |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
196 'ignore_all_space': False, |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
197 'ignore_space_change': False, |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
198 'ignore_blank_lines': False, |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
199 'unified': True, |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
200 'text': False, |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
201 })) |
440
80909328aef1
move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
438
diff
changeset
|
202 ui.write(util.filterdiff(''.join(it), baserev, newrev)) |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
203 |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
346
diff
changeset
|
204 def push(repo, dest, force, revs): |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
205 """push revisions starting at a specified head back to Subversion. |
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
206 """ |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
329
diff
changeset
|
207 assert not revs, 'designated revisions for push remains unimplemented.' |
1039
3df6ed4e7561
drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1005
diff
changeset
|
208 cmdutil.bailifchanged(repo) |
783
7913a82a8cdd
Check mercurial/third-parties push conditions before pushing
Patrick Mezard <pmezard@gmail.com>
parents:
779
diff
changeset
|
209 checkpush = getattr(repo, 'checkpush', None) |
7913a82a8cdd
Check mercurial/third-parties push conditions before pushing
Patrick Mezard <pmezard@gmail.com>
parents:
779
diff
changeset
|
210 if checkpush: |
1175
d6296f901fc7
push: update push logic to match mercurial upstream
Durham Goode <durham@fb.com>
parents:
1094
diff
changeset
|
211 try: |
1173
b04758acf410
wrappers: note which version of hg e10000369b47 is from
Augie Fackler <raf@durin42.com>
parents:
1172
diff
changeset
|
212 # The checkpush function changed as of e10000369b47 (first |
b04758acf410
wrappers: note which version of hg e10000369b47 is from
Augie Fackler <raf@durin42.com>
parents:
1172
diff
changeset
|
213 # in 3.0) in mercurial |
1175
d6296f901fc7
push: update push logic to match mercurial upstream
Durham Goode <durham@fb.com>
parents:
1094
diff
changeset
|
214 from mercurial.exchange import pushoperation |
d6296f901fc7
push: update push logic to match mercurial upstream
Durham Goode <durham@fb.com>
parents:
1094
diff
changeset
|
215 pushop = pushoperation(repo, dest, force, revs, False) |
d6296f901fc7
push: update push logic to match mercurial upstream
Durham Goode <durham@fb.com>
parents:
1094
diff
changeset
|
216 checkpush(pushop) |
d6296f901fc7
push: update push logic to match mercurial upstream
Durham Goode <durham@fb.com>
parents:
1094
diff
changeset
|
217 except (ImportError, TypeError): |
d6296f901fc7
push: update push logic to match mercurial upstream
Durham Goode <durham@fb.com>
parents:
1094
diff
changeset
|
218 checkpush(force, revs) |
d6296f901fc7
push: update push logic to match mercurial upstream
Durham Goode <durham@fb.com>
parents:
1094
diff
changeset
|
219 |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
329
diff
changeset
|
220 ui = repo.ui |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
221 old_encoding = util.swap_out_encoding() |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
222 |
1176
97a064e2075d
push: fix obsolete feature detection
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1175
diff
changeset
|
223 try: |
1513
07c38eee3954
obsolete: support obsolete.isenabled
Durham Goode <durham@fb.com>
parents:
1504
diff
changeset
|
224 hasobsolete = (obsolete._enabled or |
07c38eee3954
obsolete: support obsolete.isenabled
Durham Goode <durham@fb.com>
parents:
1504
diff
changeset
|
225 obsolete.isenabled(repo, obsolete.createmarkersopt)) |
1176
97a064e2075d
push: fix obsolete feature detection
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1175
diff
changeset
|
226 except: |
97a064e2075d
push: fix obsolete feature detection
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1175
diff
changeset
|
227 hasobsolete = False |
1055
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
228 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
229 temporary_commits = [] |
1340
db9d85618d3d
wrapper: delay marker creation in push
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
230 obsmarkers = [] |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
231 try: |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
232 # TODO: implement --rev/#rev support |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
233 # TODO: do credentials specified in the URL still work? |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
234 svn = dest.svn |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
235 meta = repo.svnmeta(svn.uuid, svn.subdir) |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
329
diff
changeset
|
236 |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
237 # Strategy: |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
238 # 1. Find all outgoing commits from this head |
1376
717bf096197e
compat: fix some more use of repo.parents()
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1368
diff
changeset
|
239 if len(repo[None].parents()) != 1: |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
240 ui.status('Cowardly refusing to push branch merge\n') |
626
8e621dbb82d4
push: return reasonable status codes to the end user
Augie Fackler <durin42@gmail.com>
parents:
620
diff
changeset
|
241 return 0 # results in nonzero exit status, see hg's commands.py |
1368
4f8b1f202c90
compat: fix use of repo.parents() to repo[None].parents()
Laurent Charignon <lcharignon@fb.com>
parents:
1361
diff
changeset
|
242 workingrev = repo[None].parents()[0] |
1236
f367a4462191
push: update to branch tip instead of tip
David Schleimer <dschleimer@fb.com>
parents:
1184
diff
changeset
|
243 workingbranch = workingrev.branch() |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
244 ui.status('searching for changes\n') |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
245 hashes = meta.revmap.hashes() |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
246 outgoing = util.outgoing_revisions(repo, hashes, workingrev.node()) |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
247 if not (outgoing and len(outgoing)): |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
248 ui.status('no changes found\n') |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
249 return 1 # so we get a sane exit status, see hg's commands.push |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
250 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
251 tip_ctx = repo[outgoing[-1]].p1() |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
252 svnbranch = tip_ctx.branch() |
991
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
253 modified_files = {} |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
254 for i in range(len(outgoing) - 1, -1, -1): |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
255 # 2. Pick the oldest changeset that needs to be pushed |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
256 current_ctx = repo[outgoing[i]] |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
257 original_ctx = current_ctx |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
258 |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
259 if len(current_ctx.parents()) != 1: |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
260 ui.status('Found a branch merge, this needs discussion and ' |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
261 'implementation.\n') |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
262 # results in nonzero exit status, see hg's commands.py |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
263 return 0 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
264 |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
265 # 3. Move the changeset to the tip of the branch if necessary |
991
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
266 conflicts = False |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
267 for file in current_ctx.files(): |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
268 if file in modified_files: |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
269 conflicts = True |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
270 break |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
271 |
991
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
272 if conflicts or current_ctx.branch() != svnbranch: |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
273 util.swap_out_encoding(old_encoding) |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
274 try: |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
275 def extrafn(ctx, extra): |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
276 extra['branch'] = ctx.branch() |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
277 |
1050
fb0715c9347d
decrease verbosity somewhat
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1045
diff
changeset
|
278 ui.note('rebasing %s onto %s \n' % (current_ctx, tip_ctx)) |
991
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
279 hgrebase.rebase(ui, repo, |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
280 dest=node.hex(tip_ctx.node()), |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
281 rev=[node.hex(current_ctx.node())], |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
282 extrafn=extrafn, keep=True) |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
283 finally: |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
284 util.swap_out_encoding() |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
285 |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
286 # Don't trust the pre-rebase repo and context. |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
287 repo = getlocalpeer(ui, {}, meta.path) |
1293
9e85feb93984
wrappers: improve push performance by reusing the existing metadata
Mateusz Kwapich <mitrandir@fb.com>
parents:
1286
diff
changeset
|
288 meta = repo.svnmeta(svn.uuid, svn.subdir) |
9e85feb93984
wrappers: improve push performance by reusing the existing metadata
Mateusz Kwapich <mitrandir@fb.com>
parents:
1286
diff
changeset
|
289 hashes = meta.revmap.hashes() |
991
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
290 tip_ctx = repo[tip_ctx.node()] |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
291 for c in tip_ctx.descendants(): |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
292 rebasesrc = c.extra().get('rebase_source') |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
293 if rebasesrc and node.bin(rebasesrc) == current_ctx.node(): |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
294 current_ctx = c |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
295 temporary_commits.append(c.node()) |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
296 break |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
297 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
298 # 4. Push the changeset to subversion |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
299 tip_hash = hashes[tip_ctx.node()][0] |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
300 try: |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
301 ui.status('committing %s\n' % current_ctx) |
1055
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
302 pushedrev = pushmod.commit(ui, repo, current_ctx, meta, |
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
303 tip_hash, svn) |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
304 except pushmod.NoFilesException: |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
305 ui.warn("Could not push revision %s because it had no changes " |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
306 "in svn.\n" % current_ctx) |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
307 return |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
308 |
1236
f367a4462191
push: update to branch tip instead of tip
David Schleimer <dschleimer@fb.com>
parents:
1184
diff
changeset
|
309 # This hook is here purely for testing. It allows us to |
f367a4462191
push: update to branch tip instead of tip
David Schleimer <dschleimer@fb.com>
parents:
1184
diff
changeset
|
310 # onsistently trigger hit the race condition between |
f367a4462191
push: update to branch tip instead of tip
David Schleimer <dschleimer@fb.com>
parents:
1184
diff
changeset
|
311 # pushing and pulling here. In particular, we use it to |
f367a4462191
push: update to branch tip instead of tip
David Schleimer <dschleimer@fb.com>
parents:
1184
diff
changeset
|
312 # trigger another revision landing between the time we |
f367a4462191
push: update to branch tip instead of tip
David Schleimer <dschleimer@fb.com>
parents:
1184
diff
changeset
|
313 # push a revision and pull it back. |
f367a4462191
push: update to branch tip instead of tip
David Schleimer <dschleimer@fb.com>
parents:
1184
diff
changeset
|
314 repo.hook('debug-hgsubversion-between-push-and-pull-for-tests') |
f367a4462191
push: update to branch tip instead of tip
David Schleimer <dschleimer@fb.com>
parents:
1184
diff
changeset
|
315 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
316 # 5. Pull the latest changesets from subversion, which will |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
317 # include the one we just committed (and possibly others). |
1293
9e85feb93984
wrappers: improve push performance by reusing the existing metadata
Mateusz Kwapich <mitrandir@fb.com>
parents:
1286
diff
changeset
|
318 r = pull(repo, dest, force=force, meta=meta) |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
319 assert not r or r == 0 |
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
320 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
321 # 6. Move our tip to the latest pulled tip |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
322 for c in tip_ctx.descendants(): |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
323 if c.node() in hashes and c.branch() == svnbranch: |
1055
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
324 if meta.get_source_rev(ctx=c)[0] == pushedrev.revnum: |
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
325 # This is corresponds to the changeset we just pushed |
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
326 if hasobsolete: |
1340
db9d85618d3d
wrapper: delay marker creation in push
Laurent Charignon <lcharignon@fb.com>
parents:
1338
diff
changeset
|
327 obsmarkers.append([(original_ctx, [c])]) |
1055
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
328 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
329 tip_ctx = c |
933
a9f315eae67c
push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents:
930
diff
changeset
|
330 |
991
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
331 # Remember what files have been modified since the |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
332 # whole push started. |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
333 for file in c.files(): |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
334 modified_files[file] = True |
26e9fd21f3bf
push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents:
990
diff
changeset
|
335 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
336 # 7. Rebase any children of the commit we just pushed |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
337 # that are not in the outgoing set |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
338 for c in original_ctx.children(): |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
339 if not c.node() in hashes and not c.node() in outgoing: |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
340 util.swap_out_encoding(old_encoding) |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
341 try: |
992
110794582448
push: avoid failure when push is being called from a newly created subdirectory
Kapil Bajaj <kapilbajaj@fb.com>
parents:
991
diff
changeset
|
342 # Path changed as subdirectories were getting |
110794582448
push: avoid failure when push is being called from a newly created subdirectory
Kapil Bajaj <kapilbajaj@fb.com>
parents:
991
diff
changeset
|
343 # deleted during push. |
110794582448
push: avoid failure when push is being called from a newly created subdirectory
Kapil Bajaj <kapilbajaj@fb.com>
parents:
991
diff
changeset
|
344 saved_path = os.getcwd() |
110794582448
push: avoid failure when push is being called from a newly created subdirectory
Kapil Bajaj <kapilbajaj@fb.com>
parents:
991
diff
changeset
|
345 os.chdir(repo.root) |
110794582448
push: avoid failure when push is being called from a newly created subdirectory
Kapil Bajaj <kapilbajaj@fb.com>
parents:
991
diff
changeset
|
346 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
347 def extrafn(ctx, extra): |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
348 extra['branch'] = ctx.branch() |
933
a9f315eae67c
push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents:
930
diff
changeset
|
349 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
350 ui.status('rebasing non-outgoing %s onto %s\n' % (c, tip_ctx)) |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
351 needs_rebase_set = "%s::" % node.hex(c.node()) |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
352 hgrebase.rebase(ui, repo, |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
353 dest=node.hex(tip_ctx.node()), |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
354 rev=[needs_rebase_set], |
1055
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
355 extrafn=extrafn, |
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
356 keep=not hasobsolete) |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
357 finally: |
992
110794582448
push: avoid failure when push is being called from a newly created subdirectory
Kapil Bajaj <kapilbajaj@fb.com>
parents:
991
diff
changeset
|
358 os.chdir(saved_path) |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
359 util.swap_out_encoding() |
933
a9f315eae67c
push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents:
930
diff
changeset
|
360 |
a9f315eae67c
push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents:
930
diff
changeset
|
361 |
946
289f2c7752a8
push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents:
933
diff
changeset
|
362 util.swap_out_encoding(old_encoding) |
289f2c7752a8
push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents:
933
diff
changeset
|
363 try: |
1236
f367a4462191
push: update to branch tip instead of tip
David Schleimer <dschleimer@fb.com>
parents:
1184
diff
changeset
|
364 hg.update(repo, repo.branchtip(workingbranch)) |
946
289f2c7752a8
push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents:
933
diff
changeset
|
365 finally: |
289f2c7752a8
push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents:
933
diff
changeset
|
366 util.swap_out_encoding() |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
367 |
1533
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
368 with repo.wlock(): |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
369 with repo.lock(): |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
370 if hasobsolete: |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
371 for marker in obsmarkers: |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
372 obsolete.createmarkers(repo, marker) |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
373 beforepush = marker[0][0] |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
374 afterpush = marker[0][1][0] |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
375 ui.note('marking %s as obsoleted by %s\n' % |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
376 (beforepush.hex(), afterpush.hex())) |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
377 else: |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
378 # strip the original changesets since the push was |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
379 # successful and changeset obsolescence is unavailable |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
380 util.strip(ui, repo, outgoing, "all") |
926
c4001eecfdb1
wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents:
925
diff
changeset
|
381 finally: |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
382 try: |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
383 # It's always safe to delete the temporary commits. |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
384 # The originals are not deleted unless the push |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
385 # completely succeeded. |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
386 if temporary_commits: |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
387 # If the repo is on a temporary commit, get off before |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
388 # the strip. |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
389 parent = repo[None].p1() |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
390 if parent.node() in temporary_commits: |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
391 hg.update(repo, parent.p1().node()) |
1533
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
392 with repo.wlock(): |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
393 with repo.lock(): |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
394 if hasobsolete: |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
395 relations = ( |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
396 (repo[n], ()) for n in temporary_commits) |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
397 obsolete.createmarkers(repo, relations) |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
398 else: |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
399 util.strip( |
0212c3a84ccd
wrappers: add some missing lock/wlock grabbing
Augie Fackler <raf@durin42.com>
parents:
1519
diff
changeset
|
400 ui, repo, temporary_commits, backup=None) |
1055
2d7398fffd0d
push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1050
diff
changeset
|
401 |
990
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
402 finally: |
def2144c0a8c
push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents:
986
diff
changeset
|
403 util.swap_out_encoding(old_encoding) |
626
8e621dbb82d4
push: return reasonable status codes to the end user
Augie Fackler <durin42@gmail.com>
parents:
620
diff
changeset
|
404 return 1 # so we get a sane exit status, see hg's commands.push |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
405 |
1246
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
406 def exchangepush(orig, repo, remote, force=False, revs=None, newbranch=False, |
1361
d227cf8d0860
exchangepush: accept kwargs and just forward them
Sean Farley <sean@farley.io>
parents:
1360
diff
changeset
|
407 bookmarks=(), **kwargs): |
1246
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
408 capable = getattr(remote, 'capable', lambda x: False) |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
409 if capable('subversion'): |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
410 pushop = exchange.pushoperation(repo, remote, force, revs, newbranch, |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
411 bookmarks=bookmarks) |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
412 pushop.cgresult = push(repo, remote, force, revs) |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
413 return pushop |
2179747e7fea
push: wrap exchange.push when localrepository.push isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1236
diff
changeset
|
414 else: |
1361
d227cf8d0860
exchangepush: accept kwargs and just forward them
Sean Farley <sean@farley.io>
parents:
1360
diff
changeset
|
415 return orig(repo, remote, force, revs, newbranch, bookmarks=bookmarks, |
d227cf8d0860
exchangepush: accept kwargs and just forward them
Sean Farley <sean@farley.io>
parents:
1360
diff
changeset
|
416 **kwargs) |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
417 |
1293
9e85feb93984
wrappers: improve push performance by reusing the existing metadata
Mateusz Kwapich <mitrandir@fb.com>
parents:
1286
diff
changeset
|
418 def pull(repo, source, heads=[], force=False, meta=None): |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
346
diff
changeset
|
419 """pull new revisions from Subversion""" |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
346
diff
changeset
|
420 assert source.capable('subversion') |
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
346
diff
changeset
|
421 svn_url = source.svnurl |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
329
diff
changeset
|
422 |
342
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
341
diff
changeset
|
423 # Split off #rev |
555
cbd7065e6ab4
util: add parseurl method to abstract away differences between 1.4 and 1.5
Augie Fackler <durin42@gmail.com>
parents:
523
diff
changeset
|
424 svn_url, heads, checkout = util.parseurl(svn_url, heads) |
257
ffccf0080e54
Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
425 old_encoding = util.swap_out_encoding() |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
426 total = None |
342
76c833526fbc
Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
341
diff
changeset
|
427 try: |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
428 have_replay = not repo.ui.configbool('hgsubversion', 'stupid') |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
429 if not have_replay: |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
430 repo.ui.note('fetching stupidly...\n') |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
329
diff
changeset
|
431 |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
432 svn = source.svn |
1293
9e85feb93984
wrappers: improve push performance by reusing the existing metadata
Mateusz Kwapich <mitrandir@fb.com>
parents:
1286
diff
changeset
|
433 if meta is None: |
9e85feb93984
wrappers: improve push performance by reusing the existing metadata
Mateusz Kwapich <mitrandir@fb.com>
parents:
1286
diff
changeset
|
434 meta = repo.svnmeta(svn.uuid, svn.subdir) |
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
329
diff
changeset
|
435 |
974
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
946
diff
changeset
|
436 stopat_rev = util.parse_revnum(svn, checkout) |
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
946
diff
changeset
|
437 |
1302
0326686199f5
wrappers: use meta.layout instead of accessing config directly
Sean Farley <sean.michael.farley@gmail.com>
parents:
1300
diff
changeset
|
438 if meta.layout == 'auto': |
0326686199f5
wrappers: use meta.layout instead of accessing config directly
Sean Farley <sean.michael.farley@gmail.com>
parents:
1300
diff
changeset
|
439 meta.layout = meta.layout_from_subversion(svn, (stopat_rev or None)) |
0326686199f5
wrappers: use meta.layout instead of accessing config directly
Sean Farley <sean.michael.farley@gmail.com>
parents:
1300
diff
changeset
|
440 repo.ui.note('using %s layout\n' % meta.layout) |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
441 |
1297
fc48e1065926
wrappers: use meta.branch instead of ui.config directly
Sean Farley <sean.michael.farley@gmail.com>
parents:
1293
diff
changeset
|
442 if meta.branch: |
1302
0326686199f5
wrappers: use meta.layout instead of accessing config directly
Sean Farley <sean.michael.farley@gmail.com>
parents:
1300
diff
changeset
|
443 if meta.layout != 'single': |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
444 msg = ('branch cannot be specified for Subversion clones using ' |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
445 'standard directory layout') |
1555
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1551
diff
changeset
|
446 raise hgerror.Abort(msg) |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
447 |
1297
fc48e1065926
wrappers: use meta.branch instead of ui.config directly
Sean Farley <sean.michael.farley@gmail.com>
parents:
1293
diff
changeset
|
448 meta.branchmap['default'] = meta.branch |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
449 |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
450 ui = repo.ui |
1434
0a6b3da6d34c
RevMap: move lastpulled from SVNMeta down into RevMap
Augie Fackler <raf@durin42.com>
parents:
1426
diff
changeset
|
451 start = meta.revmap.lastpulled |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
452 |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
453 if start <= 0: |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
454 # we are initializing a new repository |
974
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
946
diff
changeset
|
455 start = util.parse_revnum(svn, repo.ui.config('hgsubversion', |
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
946
diff
changeset
|
456 'startrev', 0)) |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
457 |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
458 if start > 0: |
1302
0326686199f5
wrappers: use meta.layout instead of accessing config directly
Sean Farley <sean.michael.farley@gmail.com>
parents:
1300
diff
changeset
|
459 if meta.layout == 'standard': |
1555
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1551
diff
changeset
|
460 raise hgerror.Abort('non-zero start revisions are only ' |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
461 'supported for single-directory clones.') |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
462 ui.note('starting at revision %d; any prior will be ignored\n' |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
463 % start) |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
464 # fetch all revisions *including* the one specified... |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
465 start -= 1 |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
466 |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
467 # anything less than zero makes no sense |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
468 if start < 0: |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
469 start = 0 |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
470 |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
471 skiprevs = repo.ui.configlist('hgsubversion', 'unsafeskip', '') |
974
336f4bce479a
consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
946
diff
changeset
|
472 skiprevs = set(util.parse_revnum(svn, r) for r in skiprevs) |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
473 |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
474 oldrevisions = len(meta.revmap) |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
475 if stopat_rev: |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
476 total = stopat_rev - start |
651
827547493112
clone: allow specifying a start revision.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
647
diff
changeset
|
477 else: |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
478 total = svn.HEAD - start |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
479 lastpulled = None |
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
480 |
1582
e15dc9e9cd56
wrappers: lock the repo for the whole pull operation
Ivan Lezhankin <ilezhankin@yandex-team.ru>
parents:
1573
diff
changeset
|
481 lock = meta.repo.lock() |
390
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
482 try: |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
483 # start converting revisions |
787
4bbc6bf947f5
replay: fetch full revision at most once per run (issue252)
Patrick Mezard <pmezard@gmail.com>
parents:
783
diff
changeset
|
484 firstrun = True |
390
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
485 for r in svn.revisions(start=start, stop=stopat_rev): |
980
641d0c41d1ea
pull: use a single if-statement for the two ways to skip revisions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
946
diff
changeset
|
486 if (r.revnum in skiprevs or |
641d0c41d1ea
pull: use a single if-statement for the two ways to skip revisions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
946
diff
changeset
|
487 (r.author is None and |
641d0c41d1ea
pull: use a single if-statement for the two ways to skip revisions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
946
diff
changeset
|
488 r.message == 'This is an empty revision for padding.')): |
981
82bbb3428684
pull: save the last pulled revision *after* converting revisions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
980
diff
changeset
|
489 lastpulled = r.revnum |
390
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
490 continue |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
491 tbdelta = meta.update_branch_tag_map_for_rev(r) |
390
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
492 # got a 502? Try more than once! |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
493 tries = 0 |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
494 converted = False |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
495 while not converted: |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
496 try: |
1286
8cec74df235a
wrappers: call meta.getmessage instead of util
Sean Farley <sean.michael.farley@gmail.com>
parents:
1280
diff
changeset
|
497 msg = meta.getmessage(r).strip() |
1045
67e11b650e94
handle invalid UTF-8 in commit messages consistently
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
1040
diff
changeset
|
498 if msg: |
431
612b8d753549
inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
419
diff
changeset
|
499 msg = [s.strip() for s in msg.splitlines() if s][0] |
749
ec52205e5ed1
pull: handle change in termwidth() api from hg change c52c629ce19e
Augie Fackler <durin42@gmail.com>
parents:
748
diff
changeset
|
500 if getattr(ui, 'termwidth', False): |
ec52205e5ed1
pull: handle change in termwidth() api from hg change c52c629ce19e
Augie Fackler <durin42@gmail.com>
parents:
748
diff
changeset
|
501 w = ui.termwidth() |
ec52205e5ed1
pull: handle change in termwidth() api from hg change c52c629ce19e
Augie Fackler <durin42@gmail.com>
parents:
748
diff
changeset
|
502 else: |
ec52205e5ed1
pull: handle change in termwidth() api from hg change c52c629ce19e
Augie Fackler <durin42@gmail.com>
parents:
748
diff
changeset
|
503 w = hgutil.termwidth() |
431
612b8d753549
inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
419
diff
changeset
|
504 bits = (r.revnum, r.author, msg) |
606
789eec0a339c
wrappers: fix pull output if termwidth() is inexact
Patrick Mezard <pmezard@gmail.com>
parents:
604
diff
changeset
|
505 ui.status(('[r%d] %s: %s' % bits)[:w] + '\n') |
1601
5d8603f080c5
compathacks: add compat code for ui.makeprogress() deprecation
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1582
diff
changeset
|
506 compathacks.progress(ui, 'pull', r.revnum - start, |
5d8603f080c5
compathacks: add compat code for ui.makeprogress() deprecation
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1582
diff
changeset
|
507 total=total) |
431
612b8d753549
inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
419
diff
changeset
|
508 |
444
8c545dcad7b1
wrappers: save tbdelta in one place for both stupid and replay
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
440
diff
changeset
|
509 meta.save_tbdelta(tbdelta) |
787
4bbc6bf947f5
replay: fetch full revision at most once per run (issue252)
Patrick Mezard <pmezard@gmail.com>
parents:
783
diff
changeset
|
510 close = pullfuns[have_replay](ui, meta, svn, r, tbdelta, |
4bbc6bf947f5
replay: fetch full revision at most once per run (issue252)
Patrick Mezard <pmezard@gmail.com>
parents:
783
diff
changeset
|
511 firstrun) |
520
5a5b90a6d522
svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents:
507
diff
changeset
|
512 meta.committags(r, close) |
432
4bf90f8c9b7b
consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
513 for branch, parent in close.iteritems(): |
4bf90f8c9b7b
consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
514 if parent in (None, node.nullid): |
4bf90f8c9b7b
consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
515 continue |
4bf90f8c9b7b
consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
516 meta.delbranch(branch, parent, r) |
4bf90f8c9b7b
consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
431
diff
changeset
|
517 |
418
92beeefeaf93
save metadata from one place
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
416
diff
changeset
|
518 meta.save() |
390
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
519 converted = True |
787
4bbc6bf947f5
replay: fetch full revision at most once per run (issue252)
Patrick Mezard <pmezard@gmail.com>
parents:
783
diff
changeset
|
520 firstrun = False |
431
612b8d753549
inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
419
diff
changeset
|
521 |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
821
diff
changeset
|
522 except svnwrap.SubversionRepoCanNotReplay, e: # pragma: no cover |
390
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
523 ui.status('%s\n' % e.message) |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
524 stupidmod.print_your_svn_is_old_message(ui) |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
525 have_replay = False |
837
805ef27fbcbe
hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents:
821
diff
changeset
|
526 except svnwrap.SubversionException, e: # pragma: no cover |
601
0fe490ce2fbb
isolate all imports of Subversion modules in svnwrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
600
diff
changeset
|
527 if (e.args[1] == svnwrap.ERR_RA_DAV_REQUEST_FAILED |
390
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
528 and '502' in str(e) |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
529 and tries < 3): |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
530 tries += 1 |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
531 ui.status('Got a 502, retrying (%s)\n' % tries) |
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
532 else: |
705
385213d2e2da
pull: reveal the handled SubversionException to --traceback.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
701
diff
changeset
|
533 ui.traceback() |
1555
cff81f35b31e
cleanup: reference Abort from mercurial.error instead of mercurial.util
Augie Fackler <raf@durin42.com>
parents:
1551
diff
changeset
|
534 raise hgerror.Abort(*e.args) |
981
82bbb3428684
pull: save the last pulled revision *after* converting revisions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
980
diff
changeset
|
535 |
82bbb3428684
pull: save the last pulled revision *after* converting revisions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
980
diff
changeset
|
536 lastpulled = r.revnum |
82bbb3428684
pull: save the last pulled revision *after* converting revisions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
980
diff
changeset
|
537 |
390
afe93f14a361
wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents:
367
diff
changeset
|
538 except KeyboardInterrupt: |
895
5b9f17e34126
don't suppress KeyboardInterrupt exception tracebacks
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
876
diff
changeset
|
539 ui.traceback() |
1582
e15dc9e9cd56
wrappers: lock the repo for the whole pull operation
Ivan Lezhankin <ilezhankin@yandex-team.ru>
parents:
1573
diff
changeset
|
540 finally: |
e15dc9e9cd56
wrappers: lock the repo for the whole pull operation
Ivan Lezhankin <ilezhankin@yandex-team.ru>
parents:
1573
diff
changeset
|
541 lock.release() |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
346
diff
changeset
|
542 finally: |
927
3271fa883f34
wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents:
926
diff
changeset
|
543 if total is not None: |
1601
5d8603f080c5
compathacks: add compat code for ui.makeprogress() deprecation
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
1582
diff
changeset
|
544 compathacks.progress(ui, 'pull', None, total=total) |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
346
diff
changeset
|
545 util.swap_out_encoding(old_encoding) |
264
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
546 |
821
f28e0f54a6ef
svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents:
819
diff
changeset
|
547 if lastpulled is not None: |
1434
0a6b3da6d34c
RevMap: move lastpulled from SVNMeta down into RevMap
Augie Fackler <raf@durin42.com>
parents:
1426
diff
changeset
|
548 meta.revmap.lastpulled = lastpulled |
523
fa7aab230f1d
wrappers: calculate and return exact count of changesets added.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
520
diff
changeset
|
549 revisions = len(meta.revmap) - oldrevisions |
fa7aab230f1d
wrappers: calculate and return exact count of changesets added.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
520
diff
changeset
|
550 |
283
521d9c1bb11d
Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents:
278
diff
changeset
|
551 if revisions == 0: |
521d9c1bb11d
Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents:
278
diff
changeset
|
552 ui.status(i18n._("no changes found\n")) |
347
537de0300510
Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
346
diff
changeset
|
553 return 0 |
283
521d9c1bb11d
Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents:
278
diff
changeset
|
554 else: |
341
cfbd0e563af9
wrappers: remove unused clone() function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
337
diff
changeset
|
555 ui.status("pulled %d revisions\n" % revisions) |
264
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
556 |
1336
f97b8c333c9e
wrappers: accept-and-forward oparg pull argument
Augie Fackler <raf@durin42.com>
parents:
1319
diff
changeset
|
557 def exchangepull(orig, repo, remote, heads=None, force=False, bookmarks=(), |
1360
129f4ad088c2
wrappers: accept-and-forward kwargs including opargs
Sean Farley <sean@farley.io>
parents:
1336
diff
changeset
|
558 **kwargs): |
1247
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
559 capable = getattr(remote, 'capable', lambda x: False) |
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
560 if capable('subversion'): |
1279
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
561 # transaction manager is present in Mercurial >= 3.3 |
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
562 try: |
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
563 trmanager = getattr(exchange, 'transactionmanager') |
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
564 except AttributeError: |
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
565 trmanager = None |
1247
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
566 pullop = exchange.pulloperation(repo, remote, heads, force, |
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
567 bookmarks=bookmarks) |
1279
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
568 if trmanager: |
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
569 pullop.trmanager = trmanager(repo, 'pull', remote.url()) |
1247
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
570 try: |
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
571 pullop.cgresult = pull(repo, remote, heads, force) |
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
572 return pullop |
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
573 finally: |
1279
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
574 if trmanager: |
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
575 pullop.trmanager.release() |
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
576 else: |
b5520673f6f2
pull: adapt from upstream changes to transactions
Sean Farley <sean.michael.farley@gmail.com>
parents:
1248
diff
changeset
|
577 pullop.releasetransaction() |
1247
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
578 else: |
1360
129f4ad088c2
wrappers: accept-and-forward kwargs including opargs
Sean Farley <sean@farley.io>
parents:
1336
diff
changeset
|
579 return orig(repo, remote, heads, force, bookmarks=bookmarks, **kwargs) |
1247
3a4d74823187
pull: wrap exchange.pull if localrepository.pull isn't available
Siddharth Agarwal <sid0@fb.com>
parents:
1246
diff
changeset
|
580 |
264
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
581 def rebase(orig, ui, repo, **opts): |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
582 """rebase current unpushed revisions onto the Subversion head |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
583 |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
584 This moves a line of development from making its own head to the top of |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
585 Subversion development, linearizing the changes. In order to make sure you |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
586 rebase on top of the current top of Subversion work, you should probably run |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
587 'hg svn pull' before running this. |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
588 |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
589 Also looks for svnextrafn and svnsourcerev in **opts. |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
590 """ |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
591 if not opts.get('svn', False): |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
592 return orig(ui, repo, **opts) |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
593 def extrafn2(ctx, extra): |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
594 """defined here so we can add things easily. |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
595 """ |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
596 extra['branch'] = ctx.branch() |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
597 extrafn = opts.get('svnextrafn', extrafn2) |
1376
717bf096197e
compat: fix some more use of repo.parents()
Shun-ichi GOTO <shunichi.goto@gmail.com>
parents:
1368
diff
changeset
|
598 sourcerev = opts.get('svnsourcerev', repo[None].parents()[0].node()) |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
599 meta = repo.svnmeta() |
416
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
600 hashes = meta.revmap.hashes() |
cd6317fe70be
invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
415
diff
changeset
|
601 o_r = util.outgoing_revisions(repo, hashes, sourcerev=sourcerev) |
264
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
602 if not o_r: |
1050
fb0715c9347d
decrease verbosity somewhat
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1045
diff
changeset
|
603 ui.note('nothing to rebase\n') |
264
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
604 return 0 |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
605 if len(repo[sourcerev].children()): |
1050
fb0715c9347d
decrease verbosity somewhat
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1045
diff
changeset
|
606 ui.status('refusing to rebase non-head commit like a coward\n') |
264
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
607 return 0 |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
608 parent_rev = repo[o_r[-1]].parents()[0] |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
609 target_rev = parent_rev |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
610 p_n = parent_rev.node() |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
611 exhausted_choices = False |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
612 while target_rev.children() and not exhausted_choices: |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
613 for c in target_rev.children(): |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
614 exhausted_choices = True |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
615 n = c.node() |
406
e360558ba65f
add a function to generate svn_commit_hashes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
405
diff
changeset
|
616 if (n in hashes and hashes[n][1] == hashes[p_n][1]): |
264
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
617 target_rev = c |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
618 exhausted_choices = False |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
619 break |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
620 if parent_rev == target_rev: |
1050
fb0715c9347d
decrease verbosity somewhat
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
1045
diff
changeset
|
621 ui.status('already up to date!\n') |
264
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
622 return 0 |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
623 return orig(ui, repo, dest=node.hex(target_rev.node()), |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
624 base=node.hex(sourcerev), |
112d57bb736e
rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents:
263
diff
changeset
|
625 extrafn=extrafn) |
402
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
626 |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
627 |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
628 optionmap = { |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
629 'tagpaths': ('hgsubversion', 'tagpaths'), |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
630 'authors': ('hgsubversion', 'authormap'), |
1374
a17d8874a099
Added dynamic author mapping.
Jerome M. BERGER <jeberger@free.fr>
parents:
1372
diff
changeset
|
631 'mapauthorscmd': ('hgsubversion', 'mapauthorscmd'), |
1093
791382a21cc4
layouts: add support for configuring branches directory
David Schleimer <dschleimer@fb.com>
parents:
1092
diff
changeset
|
632 'branchdir': ('hgsubversion', 'branchdir'), |
1319
43a365f5d13c
Allow changing the path to the trunk
Francois Dinel <fdinel@gmail.com>
parents:
1302
diff
changeset
|
633 'trunkdir': ('hgsubversion', 'trunkdir'), |
1094
9a7e3dbd0f6e
layouts: add support for an infix between tbt and the hg root
David Schleimer <dschleimer@fb.com>
parents:
1093
diff
changeset
|
634 'infix': ('hgsubversion', 'infix'), |
402
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
635 'filemap': ('hgsubversion', 'filemap'), |
574
8e025a6f0db4
add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
561
diff
changeset
|
636 'branchmap': ('hgsubversion', 'branchmap'), |
729 | 637 'tagmap': ('hgsubversion', 'tagmap'), |
402
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
638 'stupid': ('hgsubversion', 'stupid'), |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
639 'defaulthost': ('hgsubversion', 'defaulthost'), |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
640 'defaultauthors': ('hgsubversion', 'defaultauthors'), |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
641 'usebranchnames': ('hgsubversion', 'usebranchnames'), |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
466
diff
changeset
|
642 'layout': ('hgsubversion', 'layout'), |
651
827547493112
clone: allow specifying a start revision.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
647
diff
changeset
|
643 'startrev': ('hgsubversion', 'startrev'), |
402
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
644 } |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
645 |
1092
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
646 extrasections = set(['hgsubversionbranch']) |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
647 |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
648 |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
649 dontretain = { |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
650 'hgsubversion': set(['authormap', 'filemap', 'layout', ]), |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
651 'hgsubversionbranch': set(), |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
652 } |
402
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
653 |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
654 def clone(orig, ui, source, dest=None, **opts): |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
655 """ |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
656 Some of the options listed below only apply to Subversion |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
657 %(target)s. See 'hg help %(extension)s' for more information on |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
658 them as well as other ways of customising the conversion process. |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
659 """ |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
660 |
713
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
661 data = {} |
816
86d124a8768e
Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents:
807
diff
changeset
|
662 def hgclonewrapper(orig, ui, *args, **opts): |
1121
7a4d8525737a
wrappers: remove pre-1.9 code from hgclonewrapper
Sean Farley <sean.michael.farley@gmail.com>
parents:
1120
diff
changeset
|
663 origsource = args[1] |
816
86d124a8768e
Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents:
807
diff
changeset
|
664 |
713
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
665 if isinstance(origsource, str): |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
666 source, branch, checkout = util.parseurl(ui.expandpath(origsource), |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
667 opts.get('branch')) |
915
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
668 srcrepo = getpeer(ui, opts, source) |
713
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
669 else: |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
670 srcrepo = origsource |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
671 |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
672 if srcrepo.capable('subversion'): |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
673 branches = opts.pop('branch', None) |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
674 if branches: |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
675 data['branches'] = branches |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
676 ui.setconfig('hgsubversion', 'branch', branches[-1]) |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
677 |
816
86d124a8768e
Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents:
807
diff
changeset
|
678 data['srcrepo'], data['dstrepo'] = orig(ui, *args, **opts) |
701
3b8088de027d
clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
693
diff
changeset
|
679 |
840
88f3cda47def
wrappers: clone must return hg.clone() result (issue300, issue306)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
821
diff
changeset
|
680 return data['srcrepo'], data['dstrepo'] |
88f3cda47def
wrappers: clone must return hg.clone() result (issue300, issue306)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
821
diff
changeset
|
681 |
402
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
682 for opt, (section, name) in optionmap.iteritems(): |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
683 if opt in opts and opts[opt]: |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
684 ui.setconfig(section, name, str(opts.pop(opt))) |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
685 |
713
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
686 # calling hg.clone directoly to get the repository instances it returns, |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
687 # breaks in subtle ways, so we double-wrap |
1504
e65d6f6897f4
clone: add try/finally to unwrap
Durham Goode <durham@fb.com>
parents:
1503
diff
changeset
|
688 orighgclone = None |
e65d6f6897f4
clone: add try/finally to unwrap
Durham Goode <durham@fb.com>
parents:
1503
diff
changeset
|
689 try: |
e65d6f6897f4
clone: add try/finally to unwrap
Durham Goode <durham@fb.com>
parents:
1503
diff
changeset
|
690 orighgclone = extensions.wrapfunction(hg, 'clone', hgclonewrapper) |
e65d6f6897f4
clone: add try/finally to unwrap
Durham Goode <durham@fb.com>
parents:
1503
diff
changeset
|
691 orig(ui, source, dest, **opts) |
e65d6f6897f4
clone: add try/finally to unwrap
Durham Goode <durham@fb.com>
parents:
1503
diff
changeset
|
692 finally: |
e65d6f6897f4
clone: add try/finally to unwrap
Durham Goode <durham@fb.com>
parents:
1503
diff
changeset
|
693 if orighgclone: |
e65d6f6897f4
clone: add try/finally to unwrap
Durham Goode <durham@fb.com>
parents:
1503
diff
changeset
|
694 hg.clone = orighgclone |
713
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
695 |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
696 # do this again; the ui instance isn't shared between the wrappers |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
697 if data.get('branches'): |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
698 ui.setconfig('hgsubversion', 'branch', data['branches'][-1]) |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
699 |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
700 dstrepo = data.get('dstrepo') |
69c0e7c4faf9
clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
705
diff
changeset
|
701 srcrepo = data.get('srcrepo') |
1120
8a734c3e9b8d
wrappers: remove pre-1.9 code from clone
Sean Farley <sean.michael.farley@gmail.com>
parents:
1094
diff
changeset
|
702 dst = dstrepo.local() |
402
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
703 |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
704 if dstrepo.local() and srcrepo.capable('subversion'): |
915
d6c47c33f6a2
fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents:
908
diff
changeset
|
705 dst = dstrepo.local() |
1551
22137e94411f
wrappers: cope with removal of text= kwarg on vfs
Augie Fackler <raf@durin42.com>
parents:
1533
diff
changeset
|
706 try: |
22137e94411f
wrappers: cope with removal of text= kwarg on vfs
Augie Fackler <raf@durin42.com>
parents:
1533
diff
changeset
|
707 # hg before 4.5 requires text=True here |
22137e94411f
wrappers: cope with removal of text= kwarg on vfs
Augie Fackler <raf@durin42.com>
parents:
1533
diff
changeset
|
708 fd = dst.vfs("hgrc", "a", text=True) |
22137e94411f
wrappers: cope with removal of text= kwarg on vfs
Augie Fackler <raf@durin42.com>
parents:
1533
diff
changeset
|
709 except TypeError: |
22137e94411f
wrappers: cope with removal of text= kwarg on vfs
Augie Fackler <raf@durin42.com>
parents:
1533
diff
changeset
|
710 fd = dst.vfs("hgrc", "a") |
1092
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
711 preservesections = set(s for s, v in optionmap.itervalues()) |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
712 preservesections |= extrasections |
cd0d14e25757
layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents:
1055
diff
changeset
|
713 for section in preservesections: |
402
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
714 config = dict(ui.configitems(section)) |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
715 for name in dontretain[section]: |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
716 config.pop(name, None) |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
717 |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
718 if config: |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
719 fd.write('\n[%s]\n' % section) |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
720 map(fd.write, ('%s = %s\n' % p for p in config.iteritems())) |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
721 |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
722 |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
723 def generic(orig, ui, repo, *args, **opts): |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
724 """ |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
725 Subversion %(target)s can be used for %(command)s. See 'hg help |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
726 %(extension)s' for more on the conversion process. |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
727 """ |
701
3b8088de027d
clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
693
diff
changeset
|
728 |
3b8088de027d
clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
693
diff
changeset
|
729 branch = opts.get('branch', None) |
3b8088de027d
clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
693
diff
changeset
|
730 if branch: |
3b8088de027d
clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
693
diff
changeset
|
731 ui.setconfig('hgsubversion', 'branch', branch[-1]) |
3b8088de027d
clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
693
diff
changeset
|
732 |
402
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
733 for opt, (section, name) in optionmap.iteritems(): |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
734 if opt in opts and opts[opt]: |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
735 if isinstance(repo, str): |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
736 ui.setconfig(section, name, opts.pop(opt)) |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
737 else: |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
738 repo.ui.setconfig(section, name, opts.pop(opt)) |
d453cf1aafa3
uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
390
diff
changeset
|
739 return orig(ui, repo, *args, **opts) |