annotate hgsubversion/wrappers.py @ 974:336f4bce479a stable

consolidate revision parsing Accept HEAD for --rev and --skiprevs as well as --startrev, and make the error message more closely mirror the regular Mercurial error message.
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
date Sun, 04 Nov 2012 11:34:16 +0100
parents 289f2c7752a8
children ea8ef4dd967e
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
876
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
4 try:
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
5 from mercurial import discovery
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
6 discovery.nullid # force demandimport to import the module
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
7 except ImportError:
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
8 discovery = None
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
9 from mercurial import patch
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
10 from mercurial import hg
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
11 from mercurial import util as hgutil
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
12 from mercurial import node
283
521d9c1bb11d Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents: 278
diff changeset
13 from mercurial import i18n
713
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
14 from mercurial import extensions
933
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
15 from mercurial import repair
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
16
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
804
6beca5b97dc7 wrappers: fix revpair after hg.b33f3e35efb0
Patrick Mezard <pmezard@gmail.com>
parents: 802
diff changeset
24 try:
819
e30ff6d5feff Fix import based feature detection
Patrick Mezard <pmezard@gmail.com>
parents: 816
diff changeset
25 from mercurial import scmutil
e30ff6d5feff Fix import based feature detection
Patrick Mezard <pmezard@gmail.com>
parents: 816
diff changeset
26 revpair = scmutil.revpair
804
6beca5b97dc7 wrappers: fix revpair after hg.b33f3e35efb0
Patrick Mezard <pmezard@gmail.com>
parents: 802
diff changeset
27 except ImportError:
819
e30ff6d5feff Fix import based feature detection
Patrick Mezard <pmezard@gmail.com>
parents: 816
diff changeset
28 revpair = cmdutil.revpair
804
6beca5b97dc7 wrappers: fix revpair after hg.b33f3e35efb0
Patrick Mezard <pmezard@gmail.com>
parents: 802
diff changeset
29
366
25ebdc16b05b Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 356
diff changeset
30 pullfuns = {
435
7c576ae19d80 replay: start new replay module that has the relevant functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 432
diff changeset
31 True: replay.convert_rev,
366
25ebdc16b05b Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 356
diff changeset
32 False: stupidmod.convert_rev,
25ebdc16b05b Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 356
diff changeset
33 }
25ebdc16b05b Simplify pulling revs a bit, unify stupid/replay interfaces.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 356
diff changeset
34
404
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
35 revmeta = [
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
36 ('revision', 'revnum'),
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
37 ('user', 'author'),
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
38 ('date', 'date'),
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
39 ('message', 'message'),
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
40 ]
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
41
507
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
42
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
43 def version(orig, ui, *args, **opts):
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
44 svn = opts.pop('svn', None)
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
45 orig(ui, *args, **opts)
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
46 if svn:
664
5c94a86ddd73 version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 657
diff changeset
47 svnversion, bindings = svnwrap.version()
5c94a86ddd73 version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 657
diff changeset
48 ui.status('\n')
507
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
49 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
50 ui.status('Subversion: %s\n' % svnversion)
5c94a86ddd73 version: mention bindings type in version
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 657
diff changeset
51 ui.status('bindings: %s\n' % bindings)
507
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
52
4ce09bf4d382 wrappers: wrap version with a --svn flag
Augie Fackler <durin42@gmail.com>
parents: 499
diff changeset
53
403
37c96b78b8c0 uisetup: use a single loop/abstraction for wrapping all the commands
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 402
diff changeset
54 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
55 """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
56 """
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
57 if not opts.get('svn', False):
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
58 return orig(ui, repo, *args, **opts)
464
0f7095f53ca3 Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents: 463
diff changeset
59 meta = repo.svnmeta()
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
60 hashes = meta.revmap.hashes()
440
80909328aef1 move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 438
diff changeset
61 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
62 if ha.node() == node.nullid:
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
63 raise hgutil.Abort('No parent svn revision!')
440
80909328aef1 move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 438
diff changeset
64 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
65 displayer.show(ha)
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
66 return 0
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
67
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
68
915
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
69 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
70 # 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
71 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
72 if peer:
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
73 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
74 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
75
930
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
76 def getlocalpeer(ui, opts, source):
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
77 peer = getpeer(ui, opts, source)
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
78 repo = getattr(peer, 'local', lambda: peer)()
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
79 if isinstance(repo, bool):
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
80 repo = peer
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
81 return repo
915
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
82
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
83 def getcaps(other):
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
84 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
85 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
86
d6c47c33f6a2 fix breakage introduced by peer classes in hg 2.3
Bryan O'Sullivan <bryano@fb.com>
parents: 908
diff changeset
87
771
768639283275 incoming: pass unexpanded source to wrapped function (fixes #178)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 769
diff changeset
88 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
89 """show incoming revisions from Subversion
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
90 """
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
91
771
768639283275 incoming: pass unexpanded source to wrapped function (fixes #178)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 769
diff changeset
92 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
93 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
94 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
95 return orig(ui, repo, origsource, **opts)
404
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
96
751
5e54e333ec3d wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 749
diff changeset
97 svn = other.svn
5e54e333ec3d wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 749
diff changeset
98 meta = repo.svnmeta(svn.uuid, svn.subdir)
404
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
99
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
100 ui.status('incoming changes from %s\n' % other.svnurl)
751
5e54e333ec3d wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 749
diff changeset
101 for r in svn.revisions(start=meta.revmap.youngest):
404
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
102 ui.status('\n')
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
103 for label, attr in revmeta:
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
104 l1 = label + ':'
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
105 val = str(getattr(r, attr)).strip()
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
106 if not ui.verbose:
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
107 val = val.split('\n')[0]
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
108 ui.status('%s%s\n' % (l1.ljust(13), val))
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
109
28e4b47b2179 add a working incoming wrapper command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 403
diff changeset
110
805
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
111 def findcommonoutgoing(repo, other, onlyheads=None, force=False, commoninc=None):
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
112 assert other.capable('subversion')
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
113 # 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
114 svn = other.svn
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
115 meta = repo.svnmeta(svn.uuid, svn.subdir)
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
116 parent = repo.parents()[0].node()
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
117 hashes = meta.revmap.hashes()
845
8cf8ff0f52fe outgoing: fix for hg change cd956049fc14
Augie Fackler <durin42@gmail.com>
parents: 841
diff changeset
118 common, heads = util.outgoing_common_and_heads(repo, hashes, parent)
876
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
119 if discovery is not None:
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
120 outobj = getattr(discovery, 'outgoing', None)
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
121 if outobj is not None:
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
122 # Mercurial 2.1 and later
b450448a9033 wrappers: don't break on old hg versions that lack discovery
Augie Fackler <raf@durin42.com>
parents: 845
diff changeset
123 return outobj(repo.changelog, common, heads)
845
8cf8ff0f52fe outgoing: fix for hg change cd956049fc14
Augie Fackler <durin42@gmail.com>
parents: 841
diff changeset
124 # Mercurial 2.0 and earlier
8cf8ff0f52fe outgoing: fix for hg change cd956049fc14
Augie Fackler <durin42@gmail.com>
parents: 841
diff changeset
125 return common, heads
805
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
126
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
127
a3f727c41c1d Fix breakage introduced by discovery refactoring
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 804
diff changeset
128 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
129 """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
130 """
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 346
diff changeset
131 assert dest.capable('subversion')
284
f8f9a2993705 Implement parseurl support (#revision in repository urls)
Martijn Pieters <mj@zopatista.com>
parents: 283
diff changeset
132 # 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
133 # 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
134 svn = dest.svn
5e54e333ec3d wrappers: pass on subdir when creating obtaining svnmeta
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 749
diff changeset
135 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
136 parent = repo.parents()[0].node()
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
137 hashes = meta.revmap.hashes()
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
138 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
139
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
140
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
141 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
142 """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
143 """
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
144 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
145 return orig(ui, repo, *args, **opts)
464
0f7095f53ca3 Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents: 463
diff changeset
146 meta = repo.svnmeta()
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
147 hashes = meta.revmap.hashes()
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
148 if not opts.get('rev', None):
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
149 parent = repo.parents()[0]
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
150 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
151 if o_r:
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
152 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
153 opts['rev'] = ['%s:.' % node.hex(parent.node()), ]
804
6beca5b97dc7 wrappers: fix revpair after hg.b33f3e35efb0
Patrick Mezard <pmezard@gmail.com>
parents: 802
diff changeset
154 node1, node2 = revpair(repo, opts['rev'])
406
e360558ba65f add a function to generate svn_commit_hashes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 405
diff changeset
155 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
156 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
157 it = patch.diff(repo, node1, node2,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
158 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
159 'show_function': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
160 'ignore_all_space': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
161 'ignore_space_change': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
162 'ignore_blank_lines': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
163 'unified': True,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
164 'text': False,
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
165 }))
440
80909328aef1 move remaining cmdutils into util
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 438
diff changeset
166 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
167
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 346
diff changeset
168 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
169 """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
170 """
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
171 assert not revs, 'designated revisions for push remains unimplemented.'
802
d50858a8a17b wrapper: fix bail_if_changed() after hg.d68ddccf276b
Patrick Mezard <pmezard@gmail.com>
parents: 787
diff changeset
172 if hasattr(cmdutil, 'bail_if_changed'):
d50858a8a17b wrapper: fix bail_if_changed() after hg.d68ddccf276b
Patrick Mezard <pmezard@gmail.com>
parents: 787
diff changeset
173 cmdutil.bail_if_changed(repo)
d50858a8a17b wrapper: fix bail_if_changed() after hg.d68ddccf276b
Patrick Mezard <pmezard@gmail.com>
parents: 787
diff changeset
174 else:
d50858a8a17b wrapper: fix bail_if_changed() after hg.d68ddccf276b
Patrick Mezard <pmezard@gmail.com>
parents: 787
diff changeset
175 # Since 1.9 (d68ddccf276b)
d50858a8a17b wrapper: fix bail_if_changed() after hg.d68ddccf276b
Patrick Mezard <pmezard@gmail.com>
parents: 787
diff changeset
176 cmdutil.bailifchanged(repo)
783
7913a82a8cdd Check mercurial/third-parties push conditions before pushing
Patrick Mezard <pmezard@gmail.com>
parents: 779
diff changeset
177 checkpush = getattr(repo, 'checkpush', None)
7913a82a8cdd Check mercurial/third-parties push conditions before pushing
Patrick Mezard <pmezard@gmail.com>
parents: 779
diff changeset
178 if checkpush:
7913a82a8cdd Check mercurial/third-parties push conditions before pushing
Patrick Mezard <pmezard@gmail.com>
parents: 779
diff changeset
179 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
180 ui = repo.ui
257
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
181 old_encoding = util.swap_out_encoding()
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
182 try:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
183 # TODO: implement --rev/#rev support
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
184 # 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
185 svn = dest.svn
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
186 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
187
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
188 # Strategy:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
189 # 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
190 if len(repo.parents()) != 1:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
191 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
192 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
193 workingrev = repo.parents()[0]
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
194 ui.status('searching for changes\n')
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
195 hashes = meta.revmap.hashes()
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
196 outgoing = util.outgoing_revisions(repo, hashes, workingrev.node())
933
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
197 to_strip=[]
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
198 if not (outgoing and len(outgoing)):
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
199 ui.status('no changes found\n')
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
200 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
201 while outgoing:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
202
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
203 # 2. Commit oldest revision that needs to be pushed
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
204 oldest = outgoing.pop(-1)
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
205 old_ctx = repo[oldest]
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
206 old_pars = old_ctx.parents()
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
207 if len(old_pars) != 1:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
208 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
209 'implementation.\n')
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
210 # 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
211 return 0
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
212 # We will commit to svn against this node's parent rev. Any
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
213 # file-level conflicts here will result in an error reported
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
214 # by svn.
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
215 base_ctx = old_pars[0]
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
216 base_revision = hashes[base_ctx.node()][0]
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
217 svnbranch = base_ctx.branch()
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
218 # Find most recent svn commit we have on this branch. This
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
219 # node will become the nearest known ancestor of the pushed
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
220 # rev.
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
221 oldtipctx = base_ctx
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
222 old_children = oldtipctx.descendants()
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
223 seen = set(c.node() for c in old_children)
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
224 samebranchchildren = [c for c in old_children
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
225 if c.branch() == svnbranch and c.node() in hashes]
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
226 if samebranchchildren:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
227 # The following relies on descendants being sorted by rev.
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
228 oldtipctx = samebranchchildren[-1]
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
229 # All set, so commit now.
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
230 try:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
231 pushmod.commit(ui, repo, old_ctx, meta, base_revision, svn)
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
232 except pushmod.NoFilesException:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
233 ui.warn("Could not push revision %s because it had no changes "
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
234 "in svn.\n" % old_ctx)
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
235 return 1
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
236
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
237 # 3. Fetch revisions from svn
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
238 # TODO: this probably should pass in the source explicitly -
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
239 # rev too?
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
240 r = repo.pull(dest, force=force)
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
241 assert not r or r == 0
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
242
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
243 # 4. Find the new head of the target branch
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
244 # We expect to get our own new commit back, but we might
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
245 # also get other commits that happened since our last pull,
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
246 # or even right after our own commit (race).
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
247 for c in oldtipctx.descendants():
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
248 if c.node() not in seen and c.branch() == svnbranch:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
249 newtipctx = c
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
250
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
251 # 5. Rebase all children of the currently-pushing rev to the
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
252 # new head
933
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
253 #
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
254 # there may be commits descended from the one we just
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
255 # pushed to svn that we aren't going to push to svn in
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
256 # this operation
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
257 oldhex = node.hex(old_ctx.node())
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
258 needs_rebase_set = "%s:: and not(%s)" % (oldhex, oldhex)
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
259 def extrafn(ctx, extra):
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
260 extra['branch'] = ctx.branch()
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
261
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
262 util.swap_out_encoding(old_encoding)
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
263 try:
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
264 hgrebase.rebase(ui, repo, dest=node.hex(newtipctx.node()),
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
265 rev=[needs_rebase_set],
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
266 extrafn=extrafn,
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
267 # We actually want to strip one more rev than
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
268 # we're rebasing
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
269 keep=True)
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
270 finally:
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
271 util.swap_out_encoding()
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
272
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
273 to_strip.append(old_ctx.node())
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
274 # don't trust the pre-rebase repo. Do not reuse
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
275 # contexts across this.
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
276 newtip = newtipctx.node()
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
277 repo = getlocalpeer(ui, {}, meta.path)
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
278 newtipctx = repo[newtip]
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
279
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
280 rebasemap = dict()
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
281 for child in newtipctx.descendants():
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
282 rebasesrc = child.extra().get('rebase_source')
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
283 if rebasesrc:
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
284 rebasemap[node.bin(rebasesrc)] = child.node()
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
285 outgoing = [rebasemap.get(n) or n for n in outgoing]
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
286
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
287 meta = repo.svnmeta(svn.uuid, svn.subdir)
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
288 hashes = meta.revmap.hashes()
946
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
289 util.swap_out_encoding(old_encoding)
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
290 try:
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
291 hg.update(repo, repo['tip'].node())
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
292 finally:
289f2c7752a8 push: reset encoding before the final update
Patrick Mezard <patrick@mezard.eu>
parents: 933
diff changeset
293 util.swap_out_encoding()
933
a9f315eae67c push: use native rebase instead of our rebase wrapper
David Schleimer <dschleimer@fb.com>
parents: 930
diff changeset
294 repair.strip(ui, repo, to_strip, "all")
926
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
295 finally:
c4001eecfdb1 wrappers: properly reset encoding when leaving push()
Patrick Mezard <patrick@mezard.eu>
parents: 925
diff changeset
296 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
297 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
298
ffccf0080e54 Move wrappers for hg commands to their own module.
Augie Fackler <durin42@gmail.com>
parents:
diff changeset
299
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 346
diff changeset
300 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
301 """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
302 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
303 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
304
342
76c833526fbc Use fallbacks in the wrappers for Subversion support, instead of prefixes.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 341
diff changeset
305 # 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
306 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
307 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
308 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
309 try:
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
310 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
311 if not have_replay:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
312 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
313
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
314 svn = source.svn
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
315 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
316
974
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
317 stopat_rev = util.parse_revnum(svn, checkout)
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
318
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
319 layout = repo.ui.config('hgsubversion', 'layout', 'auto')
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
320 if layout == 'auto':
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
321 try:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
322 rootlist = svn.list_dir('', revision=(stopat_rev or None))
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
323 except svnwrap.SubversionException, e:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
324 err = "%s (subversion error: %d)" % (e.args[0], e.args[1])
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
325 raise hgutil.Abort(err)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
326 if sum(map(lambda x: x in rootlist, ('branches', 'tags', 'trunk'))):
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
327 layout = 'standard'
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
328 else:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
329 layout = 'single'
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
330 repo.ui.setconfig('hgsubversion', 'layout', layout)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
331 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
332
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
333 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
334 if branch:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
335 if layout != 'single':
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
336 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
337 'standard directory layout')
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
338 raise hgutil.Abort(msg)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
339
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
340 meta.branchmap['default'] = branch
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
341
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
342 ui = repo.ui
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
343 start = meta.revmap.youngest
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
344 origrevcount = len(meta.revmap)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
345
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
346 if start <= 0:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
347 # we are initializing a new repository
974
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
348 start = util.parse_revnum(svn, repo.ui.config('hgsubversion',
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
349 'startrev', 0))
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
350
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
351 if start > 0:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
352 if layout == 'standard':
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
353 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
354 'supported for single-directory clones.')
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
355 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
356 % start)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
357 # 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
358 start -= 1
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
359
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
360 # 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
361 if start < 0:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
362 start = 0
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
363
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
364 skiprevs = repo.ui.configlist('hgsubversion', 'unsafeskip', '')
974
336f4bce479a consolidate revision parsing
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 946
diff changeset
365 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
366
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
367 oldrevisions = len(meta.revmap)
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
368 if stopat_rev:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
369 total = stopat_rev - start
651
827547493112 clone: allow specifying a start revision.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 647
diff changeset
370 else:
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
371 total = svn.HEAD - start
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
372 lastpulled = None
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
373
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
374 try:
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
375 # start converting revisions
787
4bbc6bf947f5 replay: fetch full revision at most once per run (issue252)
Patrick Mezard <pmezard@gmail.com>
parents: 783
diff changeset
376 firstrun = True
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
377 for r in svn.revisions(start=start, stop=stopat_rev):
908
c4ee11a5d04c pull: add a hgsubversion.unsafeskip option to omit unwanted revs
Bryan O'Sullivan <bryano@fb.com>
parents: 895
diff changeset
378 if r.revnum in skiprevs:
c4ee11a5d04c pull: add a hgsubversion.unsafeskip option to omit unwanted revs
Bryan O'Sullivan <bryano@fb.com>
parents: 895
diff changeset
379 ui.status('[r%d SKIPPED]\n' % r.revnum)
c4ee11a5d04c pull: add a hgsubversion.unsafeskip option to omit unwanted revs
Bryan O'Sullivan <bryano@fb.com>
parents: 895
diff changeset
380 continue
821
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 819
diff changeset
381 lastpulled = r.revnum
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
382 if (r.author is None and
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
383 r.message == 'This is an empty revision for padding.'):
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
384 continue
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
385 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
386 # got a 502? Try more than once!
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
387 tries = 0
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
388 converted = False
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
389 while not converted:
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
390 try:
561
312c8c98eeff pull: handle commits without any commit message
Augie Fackler <durin42@gmail.com>
parents: 560
diff changeset
391 msg = ''
312c8c98eeff pull: handle commits without any commit message
Augie Fackler <durin42@gmail.com>
parents: 560
diff changeset
392 if r.message:
312c8c98eeff pull: handle commits without any commit message
Augie Fackler <durin42@gmail.com>
parents: 560
diff changeset
393 msg = r.message.strip()
431
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
394 if not msg:
769
cc1d4aa3ba41 configurable substitution for empty commit message (fixes #195)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 751
diff changeset
395 msg = util.default_commit_msg(ui)
431
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
396 else:
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
397 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
398 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
399 w = ui.termwidth()
ec52205e5ed1 pull: handle change in termwidth() api from hg change c52c629ce19e
Augie Fackler <durin42@gmail.com>
parents: 748
diff changeset
400 else:
ec52205e5ed1 pull: handle change in termwidth() api from hg change c52c629ce19e
Augie Fackler <durin42@gmail.com>
parents: 748
diff changeset
401 w = hgutil.termwidth()
431
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
402 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
403 ui.status(('[r%d] %s: %s' % bits)[:w] + '\n')
602
7c44bc259505 wrappers.pull: fix calculation of progress totals.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 601
diff changeset
404 util.progress(ui, 'pull', r.revnum - start, total=total)
431
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
405
444
8c545dcad7b1 wrappers: save tbdelta in one place for both stupid and replay
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 440
diff changeset
406 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
407 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
408 firstrun)
520
5a5b90a6d522 svnmeta: internalize tags delta
Patrick Mezard <pmezard@gmail.com>
parents: 507
diff changeset
409 meta.committags(r, close)
432
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
410 for branch, parent in close.iteritems():
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
411 if parent in (None, node.nullid):
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
412 continue
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
413 meta.delbranch(branch, parent, r)
4bf90f8c9b7b consolidate metadata calls from stupid and replay code
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 431
diff changeset
414
418
92beeefeaf93 save metadata from one place
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 416
diff changeset
415 meta.save()
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
416 converted = True
787
4bbc6bf947f5 replay: fetch full revision at most once per run (issue252)
Patrick Mezard <pmezard@gmail.com>
parents: 783
diff changeset
417 firstrun = False
431
612b8d753549 inline describe_revision(), use custom termwidth
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 419
diff changeset
418
837
805ef27fbcbe hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents: 821
diff changeset
419 except svnwrap.SubversionRepoCanNotReplay, e: # pragma: no cover
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
420 ui.status('%s\n' % e.message)
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
421 stupidmod.print_your_svn_is_old_message(ui)
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
422 have_replay = False
837
805ef27fbcbe hgsubversion/*.py: add space after comment symbol #
Yonggang Luo <luoyonggang@gmail.com>
parents: 821
diff changeset
423 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
424 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
425 and '502' in str(e)
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
426 and tries < 3):
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
427 tries += 1
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
428 ui.status('Got a 502, retrying (%s)\n' % tries)
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
429 else:
705
385213d2e2da pull: reveal the handled SubversionException to --traceback.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 701
diff changeset
430 ui.traceback()
390
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
431 raise hgutil.Abort(*e.args)
afe93f14a361 wrappers: Python 2.4 compat.
Augie Fackler <durin42@gmail.com>
parents: 367
diff changeset
432 except KeyboardInterrupt:
895
5b9f17e34126 don't suppress KeyboardInterrupt exception tracebacks
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 876
diff changeset
433 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
434 finally:
927
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
435 if total is not None:
3271fa883f34 wrappers: ensure all pull() code path reset the encoding
Patrick Mezard <patrick@mezard.eu>
parents: 926
diff changeset
436 util.progress(ui, 'pull', None, total=total)
347
537de0300510 Remove the 'outgoing' wrapper, and use the Mercurial infrastructure instead.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 346
diff changeset
437 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
438
821
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 819
diff changeset
439 if lastpulled is not None:
f28e0f54a6ef svnmeta: store youngest revision pulled from subversion
Augie Fackler <durin42@gmail.com>
parents: 819
diff changeset
440 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
441 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
442
283
521d9c1bb11d Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents: 278
diff changeset
443 if revisions == 0:
521d9c1bb11d Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents: 278
diff changeset
444 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
445 return 0
283
521d9c1bb11d Implement -u/--update support when pulling.
Martijn Pieters <mj@zopatista.com>
parents: 278
diff changeset
446 else:
341
cfbd0e563af9 wrappers: remove unused clone() function.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 337
diff changeset
447 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
448
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
449 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
450 """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
451
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
452 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
453 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
454 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
455 '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
456
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
457 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
458 """
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
459 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
460 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
461 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
462 """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
463 """
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
464 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
465 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
466 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
467 meta = repo.svnmeta()
416
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
468 hashes = meta.revmap.hashes()
cd6317fe70be invert the svnmeta/editor relationship
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 415
diff changeset
469 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
470 if not o_r:
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
471 ui.status('Nothing to rebase!\n')
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
472 return 0
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
473 if len(repo[sourcerev].children()):
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
474 ui.status('Refusing to rebase non-head commit like a coward\n')
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
475 return 0
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
476 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
477 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
478 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
479 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
480 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
481 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
482 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
483 n = c.node()
406
e360558ba65f add a function to generate svn_commit_hashes
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 405
diff changeset
484 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
485 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
486 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
487 break
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
488 if parent_rev == target_rev:
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
489 ui.status('Already up to date!\n')
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
490 return 0
112d57bb736e rebase: moved to wrappers, now a wrapper around rebase triggered with --svn.
Augie Fackler <durin42@gmail.com>
parents: 263
diff changeset
491 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
492 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
493 extrafn=extrafn)
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
494
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
495
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
496 optionmap = {
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
497 'tagpaths': ('hgsubversion', 'tagpaths'),
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
498 'authors': ('hgsubversion', 'authormap'),
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
499 'filemap': ('hgsubversion', 'filemap'),
574
8e025a6f0db4 add basic branchmap functionality, to rename branches
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 561
diff changeset
500 'branchmap': ('hgsubversion', 'branchmap'),
729
467b95348e6a implement tag renames
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 713
diff changeset
501 'tagmap': ('hgsubversion', 'tagmap'),
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
502 'stupid': ('hgsubversion', 'stupid'),
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
503 'defaulthost': ('hgsubversion', 'defaulthost'),
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
504 'defaultauthors': ('hgsubversion', 'defaultauthors'),
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
505 'usebranchnames': ('hgsubversion', 'usebranchnames'),
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 466
diff changeset
506 'layout': ('hgsubversion', 'layout'),
651
827547493112 clone: allow specifying a start revision.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 647
diff changeset
507 'startrev': ('hgsubversion', 'startrev'),
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
508 }
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
509
499
1fd3cfa47c5e Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents: 466
diff changeset
510 dontretain = { 'hgsubversion': set(['authormap', 'filemap', 'layout', ]) }
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
511
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
512 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
513 """
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
514 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
515 %(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
516 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
517 """
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
518
713
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
519 data = {}
816
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
520 def hgclonewrapper(orig, ui, *args, **opts):
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
521 if getattr(hg, 'peer', None):
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
522 # Since 1.9 (d976542986d2)
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
523 origsource = args[1]
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
524 else:
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
525 origsource = args[0]
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
526
713
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
527 if isinstance(origsource, str):
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
528 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
529 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
530 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
531 else:
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
532 srcrepo = origsource
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
533
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
534 if srcrepo.capable('subversion'):
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
535 branches = opts.pop('branch', None)
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
536 if branches:
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
537 data['branches'] = branches
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
538 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
539
816
86d124a8768e Fix hg.clone() calls changed by d976542986d2
Patrick Mezard <pmezard@gmail.com>
parents: 807
diff changeset
540 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
541
840
88f3cda47def wrappers: clone must return hg.clone() result (issue300, issue306)
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 821
diff changeset
542 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
543
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
544 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
545 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
546 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
547
713
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
548 # 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
549 # 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
550 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
551 orig(ui, source, dest, **opts)
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
552 hg.clone = orighgclone
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
553
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
554 # 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
555 if data.get('branches'):
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
556 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
557
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
558 dstrepo = data.get('dstrepo')
69c0e7c4faf9 clone: call the wrapped function (fixes #181)
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 705
diff changeset
559 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
560
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
561 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
562 dst = dstrepo.local()
930
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
563 if isinstance(dst, bool):
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
564 # Apparently <= hg@1.9
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
565 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
566 else:
5bacb9c63e3e Fix more peer breakage with old hg versions
Patrick Mezard <patrick@mezard.eu>
parents: 928
diff changeset
567 fd = dst.opener("hgrc", "a", text=True)
402
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
568 for section in set(s for s, v in optionmap.itervalues()):
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
569 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
570 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
571 config.pop(name, None)
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
572
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
573 if config:
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
574 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
575 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
576
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
577
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
578 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
579 """
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
580 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
581 %(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
582 """
701
3b8088de027d clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 693
diff changeset
583
3b8088de027d clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 693
diff changeset
584 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
585 if branch:
3b8088de027d clone: replace the --singlebranch with overloading for --branch
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 693
diff changeset
586 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
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 if isinstance(repo, str):
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
591 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
592 else:
d453cf1aafa3 uisetup: move clone and push/pull wrappers to wrappers module
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 390
diff changeset
593 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
594 return orig(ui, repo, *args, **opts)