annotate hgsubversion/wrappers.py @ 1093:791382a21cc4

layouts: add support for configuring branches directory This should work for both alternately named directories (e.g. releases instead of branches), as well as subdirs (branches/releases), and combinations thereof (releases/public).
author David Schleimer <dschleimer@fb.com>
date Tue, 11 Jun 2013 17:53:31 -0700
parents cd0d14e25757
children 9a7e3dbd0f6e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
264
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
1 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
2
440
80909328aef1 move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 438
diff changeset
3 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
4 from mercurial import discovery
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
5 from mercurial import patch
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
6 from mercurial import hg
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
7 from mercurial import util as hgutil
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
8 from mercurial import node
283
521d9c1bb11d Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents: 278
diff changeset
9 from mercurial import i18n
713
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
10 from mercurial import extensions
933
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
11 from mercurial import repair
1039
3df6ed4e7561 drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1005
diff changeset
12 from mercurial import revset
3df6ed4e7561 drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1005
diff changeset
13 from mercurial import scmutil
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
14
1004
b2d89ba6b871 layouts: pull out code for detecting layout from subversion
David Schleimer <dschleimer@fb.com>
parents: 999
diff changeset
15 import layouts
992
110794582448 push: avoid failure when push is being called from a newly created subdirectory
Kapil Bajaj <kapilbajaj@fb.com>
parents: 991
diff changeset
16 import os
435
7c576ae19d80 replay: start new replay module that has the relevant functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 432
diff changeset
17 import replay
438
e8f13bd20467 pushmod: split push functions out into separate module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 435
diff changeset
18 import pushmod
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
19 import stupid as stupidmod
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
20 import svnwrap
464
0f7095f53ca3 Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents: 463
diff changeset
21 import svnrepo
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
22 import util
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
23
1055
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
24 try:
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
25 from mercurial import obsolete
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
26 except ImportError:
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
27 obsolete = None
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
28
366
25ebdc16b05b Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 356
diff changeset
29 pullfuns = {
435
7c576ae19d80 replay: start new replay module that has the relevant functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 432
diff changeset
30 True: replay.convert_rev,
366
25ebdc16b05b Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 356
diff changeset
31 False: stupidmod.convert_rev,
25ebdc16b05b Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 356
diff changeset
32 }
25ebdc16b05b Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 356
diff changeset
33
404
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
34 revmeta = [
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
35 ('revision', 'revnum'),
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
36 ('user', 'author'),
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
37 ('date', 'date'),
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
38 ('message', 'message'),
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
39 ]
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
40
507
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
41
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
42 def version(orig, ui, *args, **opts):
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
43 svn = opts.pop('svn', None)
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
44 orig(ui, *args, **opts)
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
45 if svn:
664
5c94a86ddd73 version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 657
diff changeset
46 svnversion, bindings = svnwrap.version()
5c94a86ddd73 version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 657
diff changeset
47 ui.status('\n')
507
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
48 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
49 ui.status('Subversion: %s\n' % svnversion)
5c94a86ddd73 version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 657
diff changeset
50 ui.status('bindings: %s\n' % bindings)
507
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
51
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
52
403
37c96b78b8c0 uisetup: use a single loop/abstraction for wrapping all the commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 402
diff changeset
53 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
54 """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
55 """
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
56 if not opts.get('svn', False):
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
57 return orig(ui, repo, *args, **opts)
464
0f7095f53ca3 Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents: 463
diff changeset
58 meta = repo.svnmeta()
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
59 hashes = meta.revmap.hashes()
440
80909328aef1 move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 438
diff changeset
60 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
61 if ha.node() == node.nullid:
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
62 raise hgutil.Abort('No parent svn revision!')
440
80909328aef1 move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 438
diff changeset
63 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
64 displayer.show(ha)
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
65 return 0
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
66
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
67
915
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
68 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
69 # 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
70 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
71 if peer:
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
72 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
73 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
74
930
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
75 def getlocalpeer(ui, opts, source):
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
76 peer = getpeer(ui, opts, source)
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
77 repo = getattr(peer, 'local', lambda: peer)()
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
78 if isinstance(repo, bool):
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
79 repo = peer
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
80 return repo
915
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
81
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
82 def getcaps(other):
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
83 return (getattr(other, 'caps', None) or
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
84 getattr(other, 'capabilities', None) or set())
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
85
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
86
771
768639283275 incoming: pass unexpanded source to wrapped function (fixes #178)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 769
diff changeset
87 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
88 """show incoming revisions from Subversion
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
89 """
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
90
771
768639283275 incoming: pass unexpanded source to wrapped function (fixes #178)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 769
diff changeset
91 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
92 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
93 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
94 return orig(ui, repo, origsource, **opts)
404
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
95
751
5e54e333ec3d wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 749
diff changeset
96 svn = other.svn
5e54e333ec3d wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 749
diff changeset
97 meta = repo.svnmeta(svn.uuid, svn.subdir)
404
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
98
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
99 ui.status('incoming changes from %s\n' % other.svnurl)
984
6315bdd1546e wrappers: Implement --newest-first option in incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents: 983
diff changeset
100 svnrevisions = list(svn.revisions(start=meta.revmap.youngest))
6315bdd1546e wrappers: Implement --newest-first option in incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents: 983
diff changeset
101 if opts.get('newest_first'):
6315bdd1546e wrappers: Implement --newest-first option in incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents: 983
diff changeset
102 svnrevisions.reverse()
985
b303b60be11e wrappers: Return the same value as the original incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents: 984
diff changeset
103 # 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
104 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
105 ret = 0
b303b60be11e wrappers: Return the same value as the original incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents: 984
diff changeset
106 else:
b303b60be11e wrappers: Return the same value as the original incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents: 984
diff changeset
107 ret = 1
984
6315bdd1546e wrappers: Implement --newest-first option in incoming command
Mitsuhiro Koga <shiena.jp@gmail.com>
parents: 983
diff changeset
108 for r in svnrevisions:
404
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
109 ui.status('\n')
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
110 for label, attr in revmeta:
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
111 l1 = label + ':'
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
112 val = str(getattr(r, attr)).strip()
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
113 if not ui.verbose:
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
114 val = val.split('\n')[0]
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
115 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
116 return ret
404
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
117
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
118
999
3f45bd7b60cf bundle: add 'portable' parameter to prevent error (issue383)
Michael Connor <mconnor@fb.com>
parents: 992
diff changeset
119 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
120 commoninc=None, portable=False):
805
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
121 assert other.capable('subversion')
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
122 # 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
123 svn = other.svn
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
124 meta = repo.svnmeta(svn.uuid, svn.subdir)
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
125 parent = repo.parents()[0].node()
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
126 hashes = meta.revmap.hashes()
845
8cf8ff0f52fe outgoing: fix for hg change cd956049fc14
Augie Fackler <durin42@gmail.com>
parents: 841
diff changeset
127 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
128 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
129 if outobj is not None:
3df6ed4e7561 drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1005
diff changeset
130 # Mercurial 2.1 and later
3df6ed4e7561 drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1005
diff changeset
131 return outobj(repo.changelog, common, heads)
845
8cf8ff0f52fe outgoing: fix for hg change cd956049fc14
Augie Fackler <durin42@gmail.com>
parents: 841
diff changeset
132 # Mercurial 2.0 and earlier
8cf8ff0f52fe outgoing: fix for hg change cd956049fc14
Augie Fackler <durin42@gmail.com>
parents: 841
diff changeset
133 return common, heads
805
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
134
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
135
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
136 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
137 """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
138 """
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 346
diff changeset
139 assert dest.capable('subversion')
284
f8f9a2993705 Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents: 283
diff changeset
140 # 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
141 # 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
142 svn = dest.svn
5e54e333ec3d wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 749
diff changeset
143 meta = repo.svnmeta(svn.uuid, svn.subdir)
406
e360558ba65f add a function to generate svn_commit_hashes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 405
diff changeset
144 parent = repo.parents()[0].node()
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
145 hashes = meta.revmap.hashes()
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
146 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
147
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
148
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
149 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
150 """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
151 """
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
152 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
153 return orig(ui, repo, *args, **opts)
464
0f7095f53ca3 Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents: 463
diff changeset
154 meta = repo.svnmeta()
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
155 hashes = meta.revmap.hashes()
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
156 if not opts.get('rev', None):
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
157 parent = repo.parents()[0]
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
158 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
159 if o_r:
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
160 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
161 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
162 node1, node2 = scmutil.revpair(repo, opts['rev'])
406
e360558ba65f add a function to generate svn_commit_hashes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 405
diff changeset
163 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
164 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
165 it = patch.diff(repo, node1, node2,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
166 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
167 'show_function': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
168 'ignore_all_space': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
169 'ignore_space_change': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
170 'ignore_blank_lines': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
171 'unified': True,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
172 'text': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
173 }))
440
80909328aef1 move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 438
diff changeset
174 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
175
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 346
diff changeset
176 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
177 """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
178 """
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
179 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
180 cmdutil.bailifchanged(repo)
783
7913a82a8cdd Check mercurial/third-parties push conditions before pushing
Patrick Mezard <pmezard@gmail.com>
parents: 779
diff changeset
181 checkpush = getattr(repo, 'checkpush', None)
7913a82a8cdd Check mercurial/third-parties push conditions before pushing
Patrick Mezard <pmezard@gmail.com>
parents: 779
diff changeset
182 if checkpush:
7913a82a8cdd Check mercurial/third-parties push conditions before pushing
Patrick Mezard <pmezard@gmail.com>
parents: 779
diff changeset
183 checkpush(force, revs)
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
184 ui = repo.ui
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
185 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
186
1055
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
187 hasobsolete = obsolete and obsolete._enabled
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
188
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
189 temporary_commits = []
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
190 try:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
191 # TODO: implement --rev/#rev support
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
192 # 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
193 svn = dest.svn
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
194 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
195
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
196 # Strategy:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
197 # 1. Find all outgoing commits from this head
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
198 if len(repo.parents()) != 1:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
199 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
200 return 0 # results in nonzero exit status, see hg's commands.py
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
201 workingrev = repo.parents()[0]
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
202 ui.status('searching for changes\n')
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
203 hashes = meta.revmap.hashes()
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
204 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
205 if not (outgoing and len(outgoing)):
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
206 ui.status('no changes found\n')
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
207 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
208
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
209 tip_ctx = repo[outgoing[-1]].p1()
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
210 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
211 modified_files = {}
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
212 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
213 # 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
214 current_ctx = repo[outgoing[i]]
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
215 original_ctx = current_ctx
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
216
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
217 if len(current_ctx.parents()) != 1:
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
218 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
219 'implementation.\n')
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
220 # 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
221 return 0
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
222
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
223 # 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
224 conflicts = False
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
225 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
226 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
227 conflicts = True
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
228 break
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
229
991
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
230 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
231 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
232 try:
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
233 def extrafn(ctx, extra):
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
234 extra['branch'] = ctx.branch()
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
235
1050
fb0715c9347d decrease verbosity somewhat
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1045
diff changeset
236 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
237 hgrebase.rebase(ui, repo,
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
238 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
239 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
240 extrafn=extrafn, keep=True)
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
241 finally:
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
242 util.swap_out_encoding()
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
243
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
244 # 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
245 repo = getlocalpeer(ui, {}, meta.path)
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
246 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
247 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
248 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
249 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
250 current_ctx = c
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
251 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
252 break
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
253
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
254 # 4. Push the changeset to subversion
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
255 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
256 try:
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
257 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
258 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
259 tip_hash, svn)
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
260 except pushmod.NoFilesException:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
261 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
262 "in svn.\n" % current_ctx)
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
263 return
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
264
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
265 # 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
266 # include the one we just committed (and possibly others).
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
267 r = repo.pull(dest, force=force)
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
268 assert not r or r == 0
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
269 meta = repo.svnmeta(svn.uuid, svn.subdir)
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
270 hashes = meta.revmap.hashes()
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
271
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
272 # 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
273 for c in tip_ctx.descendants():
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
274 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
275 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
276 # 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
277 if hasobsolete:
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
278 ui.note('marking %s as obsoleted by %s\n' %
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
279 (original_ctx.hex(), c.hex()))
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
280 obsolete.createmarkers(repo, [(original_ctx, [c])])
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
281
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
282 tip_ctx = c
933
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
283
991
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
284 # 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
285 # whole push started.
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
286 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
287 modified_files[file] = True
26e9fd21f3bf push: avoid rebasing when we know there are no conflicts
Durham Goode <durham@fb.com>
parents: 990
diff changeset
288
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
289 # 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
290 # 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
291 for c in original_ctx.children():
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
292 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
293 util.swap_out_encoding(old_encoding)
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
294 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
295 # 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
296 # 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
297 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
298 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
299
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
300 def extrafn(ctx, extra):
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
301 extra['branch'] = ctx.branch()
933
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
302
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
303 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
304 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
305 hgrebase.rebase(ui, repo,
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
306 dest=node.hex(tip_ctx.node()),
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
307 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
308 extrafn=extrafn,
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
309 keep=not hasobsolete)
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
310 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
311 os.chdir(saved_path)
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
312 util.swap_out_encoding()
933
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
313
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
314
946
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
315 util.swap_out_encoding(old_encoding)
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
316 try:
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
317 hg.update(repo, repo['tip'].node())
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
318 finally:
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
319 util.swap_out_encoding()
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
320
1055
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
321 if not hasobsolete:
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
322 # strip the original changesets since the push was
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
323 # successful and changeset obsolescence is unavailable
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
324 util.strip(ui, repo, outgoing, "all")
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
325 finally:
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
326 try:
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
327 # 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
328 # 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
329 # completely succeeded.
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
330 if temporary_commits:
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
331 # 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
332 # the strip.
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
333 parent = repo[None].p1()
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
334 if parent.node() in temporary_commits:
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
335 hg.update(repo, parent.p1().node())
1055
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
336 if hasobsolete:
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
337 relations = ((repo[n], ()) for n in temporary_commits)
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
338 obsolete.createmarkers(repo, relations)
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
339 else:
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
340 util.strip(ui, repo, temporary_commits, backup=None)
2d7398fffd0d push: obsolete rather than rebase & strip when enabled
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1050
diff changeset
341
990
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
342 finally:
def2144c0a8c push: rebase one at a time before push
Durham Goode <durham@fb.com>
parents: 986
diff changeset
343 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
344 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
345
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
346
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 346
diff changeset
347 def pull(repo, source, heads=[], force=False):
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 346
diff changeset
348 """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
349 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
350 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
351
342
76c833526fbc Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 341
diff changeset
352 # 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
353 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
354 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
355 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
356 try:
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
357 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
358 if not have_replay:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
359 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
360
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
361 svn = source.svn
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
362 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
363
974
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
364 stopat_rev = util.parse_revnum(svn, checkout)
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
365
1005
5bba4d1becde layouts: refactor layout loading based on config into function
David Schleimer <dschleimer@fb.com>
parents: 1004
diff changeset
366 layout = layouts.detect.layout_from_config(repo.ui, allow_auto=True)
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
367 if layout == 'auto':
1004
b2d89ba6b871 layouts: pull out code for detecting layout from subversion
David Schleimer <dschleimer@fb.com>
parents: 999
diff changeset
368 layout = layouts.detect.layout_from_subversion(svn,
b2d89ba6b871 layouts: pull out code for detecting layout from subversion
David Schleimer <dschleimer@fb.com>
parents: 999
diff changeset
369 (stopat_rev or None),
b2d89ba6b871 layouts: pull out code for detecting layout from subversion
David Schleimer <dschleimer@fb.com>
parents: 999
diff changeset
370 repo.ui)
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
371 repo.ui.note('using %s layout\n' % layout)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
372
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
373 branch = repo.ui.config('hgsubversion', 'branch')
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
374 if branch:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
375 if layout != 'single':
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
376 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
377 'standard directory layout')
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
378 raise hgutil.Abort(msg)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
379
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
380 meta.branchmap['default'] = branch
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
381
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
382 ui = repo.ui
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
383 start = meta.revmap.youngest
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
384 origrevcount = len(meta.revmap)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
385
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
386 if start <= 0:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
387 # we are initializing a new repository
974
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
388 start = util.parse_revnum(svn, repo.ui.config('hgsubversion',
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
389 'startrev', 0))
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
390
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
391 if start > 0:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
392 if layout == 'standard':
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
393 raise hgutil.Abort('non-zero start revisions are only '
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
394 'supported for single-directory clones.')
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
395 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
396 % start)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
397 # 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
398 start -= 1
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
399
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
400 # 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
401 if start < 0:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
402 start = 0
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
403
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
404 skiprevs = repo.ui.configlist('hgsubversion', 'unsafeskip', '')
974
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
405 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
406
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
407 oldrevisions = len(meta.revmap)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
408 if stopat_rev:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
409 total = stopat_rev - start
651
827547493112 clone: allow specifying a start revision.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 647
diff changeset
410 else:
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
411 total = svn.HEAD - start
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
412 lastpulled = None
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
413
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
414 try:
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
415 # start converting revisions
787
4bbc6bf947f5 replay: fetch full revision at most once per run (issue252)
Patrick Mezard <pmezard@gmail.com>
parents: 783
diff changeset
416 firstrun = True
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
417 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
418 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
419 (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
420 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
421 lastpulled = r.revnum
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
422 continue
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
423 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
424 # got a 502? Try more than once!
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
425 tries = 0
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
426 converted = False
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
427 while not converted:
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
428 try:
1045
67e11b650e94 handle invalid UTF-8 in commit messages consistently
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1040
diff changeset
429 msg = util.getmessage(ui, r).strip()
67e11b650e94 handle invalid UTF-8 in commit messages consistently
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents: 1040
diff changeset
430 if msg:
431
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
431 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
432 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
433 w = ui.termwidth()
ec52205e5ed1 pull: handle change in termwidth() api from hg change c52c629ce19e
Augie Fackler <durin42@gmail.com>
parents: 748
diff changeset
434 else:
ec52205e5ed1 pull: handle change in termwidth() api from hg change c52c629ce19e
Augie Fackler <durin42@gmail.com>
parents: 748
diff changeset
435 w = hgutil.termwidth()
431
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
436 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
437 ui.status(('[r%d] %s: %s' % bits)[:w] + '\n')
1039
3df6ed4e7561 drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1005
diff changeset
438 ui.progress('pull', r.revnum - start, total=total)
431
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
439
444
8c545dcad7b1 wrappers: save tbdelta in one place for both stupid and replay
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 440
diff changeset
440 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
441 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
442 firstrun)
520
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 507
diff changeset
443 meta.committags(r, close)
432
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
444 for branch, parent in close.iteritems():
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
445 if parent in (None, node.nullid):
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
446 continue
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
447 meta.delbranch(branch, parent, r)
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
448
418
92beeefeaf93 save metadata from one place
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 416
diff changeset
449 meta.save()
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
450 converted = True
787
4bbc6bf947f5 replay: fetch full revision at most once per run (issue252)
Patrick Mezard <pmezard@gmail.com>
parents: 783
diff changeset
451 firstrun = False
431
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
452
837
805ef27fbcbe hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents: 821
diff changeset
453 except svnwrap.SubversionRepoCanNotReplay, e: # pragma: no cover
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
454 ui.status('%s\n' % e.message)
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
455 stupidmod.print_your_svn_is_old_message(ui)
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
456 have_replay = False
837
805ef27fbcbe hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents: 821
diff changeset
457 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
458 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
459 and '502' in str(e)
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
460 and tries < 3):
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
461 tries += 1
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
462 ui.status('Got a 502, retrying (%s)\n' % tries)
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
463 else:
705
385213d2e2da pull: reveal the handled SubversionException to --traceback.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 701
diff changeset
464 ui.traceback()
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
465 raise hgutil.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
466
82bbb3428684 pull: save the last pulled revision *after* converting revisions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 980
diff changeset
467 lastpulled = r.revnum
82bbb3428684 pull: save the last pulled revision *after* converting revisions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 980
diff changeset
468
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
469 except KeyboardInterrupt:
895
5b9f17e34126 don't suppress KeyboardInterrupt exception tracebacks
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 876
diff changeset
470 ui.traceback()
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 346
diff changeset
471 finally:
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
472 if total is not None:
1039
3df6ed4e7561 drop support for pre-2.0 versions of Mercurial
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1005
diff changeset
473 ui.progress('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
474 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
475
821
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 819
diff changeset
476 if lastpulled is not None:
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 819
diff changeset
477 meta.revmap.youngest = lastpulled
523
fa7aab230f1d wrappers: calculate and return exact count of changesets added.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 520
diff changeset
478 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
479
283
521d9c1bb11d Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents: 278
diff changeset
480 if revisions == 0:
521d9c1bb11d Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents: 278
diff changeset
481 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
482 return 0
283
521d9c1bb11d Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents: 278
diff changeset
483 else:
341
cfbd0e563af9 wrappers: remove unused clone() function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 337
diff changeset
484 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
485
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
486 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
487 """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
488
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
489 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
490 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
491 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
492 '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
493
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
494 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
495 """
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
496 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
497 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
498 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
499 """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
500 """
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
501 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
502 extrafn = opts.get('svnextrafn', extrafn2)
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
503 sourcerev = opts.get('svnsourcerev', repo.parents()[0].node())
464
0f7095f53ca3 Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents: 463
diff changeset
504 meta = repo.svnmeta()
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
505 hashes = meta.revmap.hashes()
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
506 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
507 if not o_r:
1050
fb0715c9347d decrease verbosity somewhat
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1045
diff changeset
508 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
509 return 0
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
510 if len(repo[sourcerev].children()):
1050
fb0715c9347d decrease verbosity somewhat
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1045
diff changeset
511 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
512 return 0
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
513 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
514 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
515 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
516 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
517 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
518 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
519 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
520 n = c.node()
406
e360558ba65f add a function to generate svn_commit_hashes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 405
diff changeset
521 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
522 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
523 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
524 break
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
525 if parent_rev == target_rev:
1050
fb0715c9347d decrease verbosity somewhat
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 1045
diff changeset
526 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
527 return 0
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
528 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
529 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
530 extrafn=extrafn)
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
531
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
532
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
533 optionmap = {
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
534 'tagpaths': ('hgsubversion', 'tagpaths'),
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
535 'authors': ('hgsubversion', 'authormap'),
1093
791382a21cc4 layouts: add support for configuring branches directory
David Schleimer <dschleimer@fb.com>
parents: 1092
diff changeset
536 'branchdir': ('hgsubversion', 'branchdir'),
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
537 'filemap': ('hgsubversion', 'filemap'),
574
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 561
diff changeset
538 'branchmap': ('hgsubversion', 'branchmap'),
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 713
diff changeset
539 'tagmap': ('hgsubversion', 'tagmap'),
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
540 'stupid': ('hgsubversion', 'stupid'),
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
541 'defaulthost': ('hgsubversion', 'defaulthost'),
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
542 'defaultauthors': ('hgsubversion', 'defaultauthors'),
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
543 'usebranchnames': ('hgsubversion', 'usebranchnames'),
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 466
diff changeset
544 'layout': ('hgsubversion', 'layout'),
651
827547493112 clone: allow specifying a start revision.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 647
diff changeset
545 'startrev': ('hgsubversion', 'startrev'),
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
546 }
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
547
1092
cd0d14e25757 layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents: 1055
diff changeset
548 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
549
cd0d14e25757 layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents: 1055
diff changeset
550
cd0d14e25757 layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents: 1055
diff changeset
551 dontretain = {
cd0d14e25757 layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents: 1055
diff changeset
552 '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
553 'hgsubversionbranch': set(),
cd0d14e25757 layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents: 1055
diff changeset
554 }
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
555
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
556 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
557 """
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
558 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
559 %(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
560 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
561 """
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
562
713
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
563 data = {}
816
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
564 def hgclonewrapper(orig, ui, *args, **opts):
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
565 if getattr(hg, 'peer', None):
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
566 # Since 1.9 (d976542986d2)
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
567 origsource = args[1]
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
568 else:
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
569 origsource = args[0]
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
570
713
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
571 if isinstance(origsource, str):
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
572 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
573 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
574 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
575 else:
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
576 srcrepo = origsource
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
577
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
578 if srcrepo.capable('subversion'):
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
579 branches = opts.pop('branch', None)
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
580 if branches:
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
581 data['branches'] = branches
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
582 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
583
816
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
584 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
585
840
88f3cda47def wrappers: clone must return hg.clone() result (issue300, issue306)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 821
diff changeset
586 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
587
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
588 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
589 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
590 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
591
713
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
592 # 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
593 # breaks in subtle ways, so we double-wrap
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
594 orighgclone = extensions.wrapfunction(hg, 'clone', hgclonewrapper)
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
595 orig(ui, source, dest, **opts)
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
596 hg.clone = orighgclone
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
597
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
598 # 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
599 if data.get('branches'):
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
600 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
601
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
602 dstrepo = data.get('dstrepo')
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
603 srcrepo = data.get('srcrepo')
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
604
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
605 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
606 dst = dstrepo.local()
930
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
607 if isinstance(dst, bool):
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
608 # Apparently <= hg@1.9
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
609 fd = dstrepo.opener("hgrc", "a", text=True)
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
610 else:
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
611 fd = dst.opener("hgrc", "a", text=True)
1092
cd0d14e25757 layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents: 1055
diff changeset
612 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
613 preservesections |= extrasections
cd0d14e25757 layouts: add custom layout for those of us that need weird mappings
David Schleimer <dschleimer@fb.com>
parents: 1055
diff changeset
614 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
615 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
616 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
617 config.pop(name, None)
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
618
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
619 if config:
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
620 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
621 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
622
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
623
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
624 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
625 """
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
626 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
627 %(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
628 """
701
3b8088de027d clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 693
diff changeset
629
3b8088de027d clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 693
diff changeset
630 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
631 if branch:
3b8088de027d clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 693
diff changeset
632 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
633
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
634 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
635 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
636 if isinstance(repo, str):
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
637 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
638 else:
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
639 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
640 return orig(ui, repo, *args, **opts)