annotate hgsubversion/wrappers.py @ 930:5bacb9c63e3e

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