annotate hgext3rd/topic/discovery.py @ 6910:038df334d51a mercurial-6.0

test-compat: merge mercurial-6.1 into mercurial-6.0
author Anton Shestakov <av6@dwimlabs.net>
date Fri, 25 Oct 2024 15:50:15 +0400
parents 7ec9f4b04519
children 361dcfcb3f08
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1934
9d6d30e36cdd discovery: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1921
diff changeset
1 from __future__ import absolute_import
9d6d30e36cdd discovery: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1921
diff changeset
2
3182
bc09dd507c41 topic: fix new head detection when using --publish on a topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2696
diff changeset
3 import collections
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
4 import contextlib
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
5 import weakref
1934
9d6d30e36cdd discovery: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1921
diff changeset
6
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
7 from mercurial.i18n import _
1934
9d6d30e36cdd discovery: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1921
diff changeset
8 from mercurial import (
1944
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
9 bundle2,
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
10 discovery,
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
11 encoding,
1934
9d6d30e36cdd discovery: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1921
diff changeset
12 exchange,
1944
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
13 extensions,
6564
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6563
diff changeset
14 hg,
5581
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
15 scmutil,
2676
10dedac0d82e topic: also insert the extra head check with using the new head checking
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2675
diff changeset
16 util,
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
17 wireprototypes,
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
18 wireprotov1server,
1934
9d6d30e36cdd discovery: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1921
diff changeset
19 )
6383
c6e3d2dbbeb0 topic: simply reuse wirepeer.branchmap() as wirepeer.branchmaptns()
Anton Shestakov <av6@dwimlabs.net>
parents: 6382
diff changeset
20 from mercurial.wireprotov1peer import wirepeer
4540
22cde12d9467 topic: only wrap _headssummary for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4263
diff changeset
21 from . import (
22cde12d9467 topic: only wrap _headssummary for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4263
diff changeset
22 common,
4743
92e3db149d7d py3: call branchmap.items() on py3 and continue to call iteritems() on py2
Martin von Zweigbergk <martinvonz@google.com>
parents: 4742
diff changeset
23 compat,
4540
22cde12d9467 topic: only wrap _headssummary for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4263
diff changeset
24 )
1934
9d6d30e36cdd discovery: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1921
diff changeset
25
6890
7ec9f4b04519 topic: compatibility for revbranchcache being in a separate module now
Anton Shestakov <av6@dwimlabs.net>
parents: 6786
diff changeset
26 try:
7ec9f4b04519 topic: compatibility for revbranchcache being in a separate module now
Anton Shestakov <av6@dwimlabs.net>
parents: 6786
diff changeset
27 from mercurial.branching.rev_cache import revbranchcache
7ec9f4b04519 topic: compatibility for revbranchcache being in a separate module now
Anton Shestakov <av6@dwimlabs.net>
parents: 6786
diff changeset
28 except ImportError:
7ec9f4b04519 topic: compatibility for revbranchcache being in a separate module now
Anton Shestakov <av6@dwimlabs.net>
parents: 6786
diff changeset
29 # hg <= 6.8 (f0e07efc199f)
7ec9f4b04519 topic: compatibility for revbranchcache being in a separate module now
Anton Shestakov <av6@dwimlabs.net>
parents: 6786
diff changeset
30 from mercurial.branchmap import revbranchcache
7ec9f4b04519 topic: compatibility for revbranchcache being in a separate module now
Anton Shestakov <av6@dwimlabs.net>
parents: 6786
diff changeset
31
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
32 urlreq = util.urlreq
3678
d725fe3e3989 topic: handle wireproto module change from b4d85bc122bd
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3186
diff changeset
33
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
34 @contextlib.contextmanager
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
35 def override_context_branch(repo, publishedset=()):
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
36 unfi = repo.unfiltered()
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
37
6364
e8d85d51c7b2 topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents: 6125
diff changeset
38 def overridebranch(p, origbranch):
e8d85d51c7b2 topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents: 6125
diff changeset
39 def branch():
6369
3271ec128328 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336 6364
diff changeset
40 branch = origbranch()
6364
e8d85d51c7b2 topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents: 6125
diff changeset
41 if p.rev() in publishedset:
6369
3271ec128328 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336 6364
diff changeset
42 return common.formatfqbn(branch=branch)
3271ec128328 branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6336 6364
diff changeset
43 return p.fqbn()
6364
e8d85d51c7b2 topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents: 6125
diff changeset
44 return branch
e8d85d51c7b2 topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents: 6125
diff changeset
45
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
46 class repocls(unfi.__class__):
6295
e81b3516242f topic: update a comment about branch:topic, use the modern version
Anton Shestakov <av6@dwimlabs.net>
parents: 6271
diff changeset
47 # awful hack to see branch as "branch//namespace/topic"
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
48 def __getitem__(self, key):
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
49 ctx = super(repocls, self).__getitem__(key)
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
50 oldbranch = ctx.branch
5684
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
51 oldparents = ctx.parents
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
52 rev = ctx.rev()
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
53
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
54 def branch():
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
55 branch = oldbranch()
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
56 if rev in publishedset:
6336
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
57 return common.formatfqbn(branch=branch)
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6270
diff changeset
58 return ctx.fqbn()
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
59
5684
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
60 def parents():
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
61 parents = oldparents()
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
62 for p in parents:
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
63 if getattr(p, '_topic_ext_branch_hack', False):
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
64 continue
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
65
6364
e8d85d51c7b2 topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents: 6125
diff changeset
66 p.branch = overridebranch(p, p.branch)
5684
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
67 p._topic_ext_branch_hack = True
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
68 return parents
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
69
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
70 ctx.branch = branch
5684
4de216446c53 topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5683
diff changeset
71 ctx.parents = parents
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
72 return ctx
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
73
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
74 oldrepocls = unfi.__class__
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
75 try:
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
76 unfi.__class__ = repocls
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
77 if repo.filtername is not None:
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
78 repo = unfi.filtered(repo.filtername)
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
79 else:
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
80 repo = unfi
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
81 yield repo
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
82 finally:
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
83 unfi.__class__ = oldrepocls
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
84
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
85
3689
415c872d3308 topic: remove compatibility for older version in discovery wrapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3678
diff changeset
86 def _headssummary(orig, pushop, *args, **kwargs):
415c872d3308 topic: remove compatibility for older version in discovery wrapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3678
diff changeset
87 repo = pushop.repo.unfiltered()
415c872d3308 topic: remove compatibility for older version in discovery wrapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3678
diff changeset
88 remote = pushop.remote
2558
65cf338258d2 fix: fix _headssummary api
Boris Feld <boris.feld@octobus.net>
parents: 1965
diff changeset
89
3182
bc09dd507c41 topic: fix new head detection when using --publish on a topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2696
diff changeset
90 publishedset = ()
bc09dd507c41 topic: fix new head detection when using --publish on a topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2696
diff changeset
91 remotebranchmap = None
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
92 if remote.capable(b'topics-namespaces'):
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
93 origremotebranchmap = remote.branchmaptns
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
94 else:
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
95 origremotebranchmap = remote.branchmap
4263
35130e428ebd compat: drop code dealing with incompatibility for --publish with 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4194
diff changeset
96 publishednode = [c.node() for c in pushop.outdatedphases]
6786
ae01e2b10419 topic: compatibility for RemotePhasesSummary.public_heads
Anton Shestakov <av6@dwimlabs.net>
parents: 6785
diff changeset
97 if util.safehasattr(pushop.remotephases, 'publicheads'):
ae01e2b10419 topic: compatibility for RemotePhasesSummary.public_heads
Anton Shestakov <av6@dwimlabs.net>
parents: 6785
diff changeset
98 # hg <= 6.7 (22cc679a7312)
ae01e2b10419 topic: compatibility for RemotePhasesSummary.public_heads
Anton Shestakov <av6@dwimlabs.net>
parents: 6785
diff changeset
99 publishedset = repo.revs(b'ancestors(%ln + %ln)', publishednode, pushop.remotephases.publicheads)
ae01e2b10419 topic: compatibility for RemotePhasesSummary.public_heads
Anton Shestakov <av6@dwimlabs.net>
parents: 6785
diff changeset
100 else:
ae01e2b10419 topic: compatibility for RemotePhasesSummary.public_heads
Anton Shestakov <av6@dwimlabs.net>
parents: 6785
diff changeset
101 publishedset = repo.revs(b'ancestors(%ln + %ld)', publishednode, pushop.remotephases.public_heads)
3182
bc09dd507c41 topic: fix new head detection when using --publish on a topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2696
diff changeset
102
6336
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
103 publishing = (b'phases' not in remote.listkeys(b'namespaces')
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
104 or bool(remote.listkeys(b'phases').get(b'publishing', False)))
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
105 # remote repo may be non-publishing, but if user does hg push --publish, we
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
106 # still need to consider push operation publishing
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
107 publishing = publishing or pushop.publish
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
108
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
109 ctxoverride = util.nullcontextmanager()
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
110 if common.hastopicext(pushop.repo) and remote.capable(b'topics'):
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
111 ctxoverride = override_context_branch(repo, publishedset=publishedset)
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
112 overrides = {(b'_internal', b'tns-publish'): publishing}
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
113 else:
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
114 overrides = {(b'_internal', b'tns-disable-fqbn'): True}
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
115 configoverride = repo.ui.configoverride(overrides, b'topic-namespaces')
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
116
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
117 if not common.hastopicext(pushop.repo):
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
118 with ctxoverride, configoverride:
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
119 return orig(pushop, *args, **kwargs)
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
120 elif ((publishing or not remote.capable(b'topics'))
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
121 and not getattr(pushop, 'publish', False)):
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
122 with ctxoverride, configoverride:
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
123 return orig(pushop, *args, **kwargs)
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
124
4929
bb2b4f6c99dc compat: compatibility for cl.nodemap.get vs cl.index.get_rev
Anton Shestakov <av6@dwimlabs.net>
parents: 4814
diff changeset
125 getrev = compat.getgetrev(repo.unfiltered().changelog)
3182
bc09dd507c41 topic: fix new head detection when using --publish on a topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2696
diff changeset
126
4263
35130e428ebd compat: drop code dealing with incompatibility for --publish with 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4194
diff changeset
127 def remotebranchmap():
35130e428ebd compat: drop code dealing with incompatibility for --publish with 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4194
diff changeset
128 # drop topic information from changeset about to be published
35130e428ebd compat: drop code dealing with incompatibility for --publish with 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4194
diff changeset
129 result = collections.defaultdict(list)
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
130 items = list(compat.branchmapitems(origremotebranchmap()))
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
131 if not remote.capable(b'topics-namespaces'):
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
132 items = [(common.upgradeformat(branch), heads) for branch, heads in items]
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
133 for branch, heads in items:
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
134 namedbranch, tns, topic = common.parsefqbn(branch)
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
135 for h in heads:
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
136 r = getrev(h)
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
137 if r is not None and r in publishedset:
6336
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
138 result[common.formatfqbn(branch=namedbranch)].append(h)
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
139 else:
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
140 result[branch].append(h)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4804
diff changeset
141 for heads in result.values():
4263
35130e428ebd compat: drop code dealing with incompatibility for --publish with 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4194
diff changeset
142 heads.sort()
35130e428ebd compat: drop code dealing with incompatibility for --publish with 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4194
diff changeset
143 return result
3182
bc09dd507c41 topic: fix new head detection when using --publish on a topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2696
diff changeset
144
6336
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
145 with ctxoverride, configoverride:
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
146 try:
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
147 if remotebranchmap is not None:
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
148 remote.branchmap = remotebranchmap
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
149 unxx = repo.filtered(b'unfiltered-topic')
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
150 repo.unfiltered = lambda: unxx
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
151 pushop.repo = repo
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
152 summary = orig(pushop)
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
153 for key, value in summary.items():
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6270
diff changeset
154 branch, tns, topic = common.parsefqbn(key)
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6270
diff changeset
155 if topic: # FIXME: also check namespace?
5683
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
156 if value[0] is None and value[1]:
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
157 summary[key] = ([value[1][0]], ) + value[1:]
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
158 return summary
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
159 finally:
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
160 if r'unfiltered' in vars(repo):
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
161 del repo.unfiltered
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
162 if remotebranchmap is not None:
1dece375d2ab topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5581
diff changeset
163 remote.branchmap = origremotebranchmap
1886
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
164
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
165 def wireprotobranchmap(orig, repo, proto):
4541
7e98faf278d6 topic: only wrap wireprotobranchmap for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4540
diff changeset
166 if not common.hastopicext(repo):
7e98faf278d6 topic: only wrap wireprotobranchmap for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4540
diff changeset
167 return orig(repo, proto)
6270
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
168 unfi = repo.unfiltered()
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
169 oldrepocls = unfi.__class__
1886
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
170 try:
6270
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
171 class repocls(oldrepocls):
1886
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
172 def branchmap(self):
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
173 usetopic = not self.publishing()
6271
caf302fb8f4d topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6270
diff changeset
174 return super(repocls, self).branchmap(topic=usetopic, convertbm=usetopic)
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
175
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
176 # Where is branchmaptns method, you might ask? The answer is that
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
177 # this repocls is only relevant when we're trying to use the old
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
178 # branchmap server command. If we use branchmaptns command that was
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
179 # introduced as a part of topic namespaces support, then this
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
180 # repocls shouldn't be used at all.
6270
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
181 unfi.__class__ = repocls
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
182 if repo.filtername is not None:
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
183 repo = unfi.filtered(repo.filtername)
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
184 else:
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
185 repo = unfi
1886
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
186 return orig(repo, proto)
0504e76bfbd9 push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff changeset
187 finally:
6270
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
188 unfi.__class__ = oldrepocls
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
189
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
190 def wireprotobranchmaptns(repo, proto):
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
191 """copied from wireprotov1server.branchmap()"""
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
192 if not common.hastopicext(repo):
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
193 return wireprotov1server.branchmap(repo, proto)
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
194 heads = []
6573
d511eba4cdb0 topic: compatibility for branchmaptns with branchmap from hg 5.0
Anton Shestakov <av6@dwimlabs.net>
parents: 6566
diff changeset
195 entries = compat.bcentries(repo.branchmaptns())
d511eba4cdb0 topic: compatibility for branchmaptns with branchmap from hg 5.0
Anton Shestakov <av6@dwimlabs.net>
parents: 6566
diff changeset
196 for branch, nodes in compat.branchmapitems(entries):
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
197 branchname = urlreq.quote(encoding.fromlocal(branch))
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
198 branchnodes = wireprototypes.encodelist(nodes)
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
199 heads.append(b'%s %s' % (branchname, branchnodes))
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
200
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
201 return wireprototypes.bytesresponse(b'\n'.join(heads))
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
202
5222
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
203 def _get_branch_name(ctx):
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
204 # make it easy for extension with the branch logic there
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
205 return ctx.branch()
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
206
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
207
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
208 def _filter_obsolete_heads(repo, heads):
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
209 """filter heads to return non-obsolete ones
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
210
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
211 Given a list of heads (on the same named branch) return a new list of heads
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
212 where the obsolete part have been skimmed out.
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
213 """
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
214 new_heads = []
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
215 old_heads = heads[:]
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
216 while old_heads:
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
217 rh = old_heads.pop()
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
218 ctx = repo[rh]
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
219 current_name = _get_branch_name(ctx)
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
220 # run this check early to skip the evaluation of the whole branch
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
221 if not ctx.obsolete():
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
222 new_heads.append(rh)
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
223 continue
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
224
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
225 # Get all revs/nodes on the branch exclusive to this head
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
226 # (already filtered heads are "ignored"))
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
227 sections_revs = repo.revs(
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
228 b'only(%d, (%ld+%ld))', rh, old_heads, new_heads,
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
229 )
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
230 keep_revs = []
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
231 for r in sections_revs:
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
232 ctx = repo[r]
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
233 if ctx.obsolete():
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
234 continue
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
235 if _get_branch_name(ctx) != current_name:
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
236 continue
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
237 keep_revs.append(r)
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
238 for h in repo.revs(b'heads(%ld and (::%ld))', sections_revs, keep_revs):
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
239 new_heads.append(h)
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
240 new_heads.sort()
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
241 return new_heads
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
242
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
243 # Discovery have deficiency around phases, branch can get new heads with pure
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
244 # phases change. This happened with a changeset was allowed to be pushed
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
245 # because it had a topic, but it later become public and create a new branch
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
246 # head.
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
247 #
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
248 # Handle this by doing an extra check for new head creation server side
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
249 def _nbheads(repo):
6785
cf1e854f50e9 topic: compatibility for scmutil.combined_filtered_and_obsolete_hash()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
250 filterfn = lambda repo, heads: heads
cf1e854f50e9 topic: compatibility for scmutil.combined_filtered_and_obsolete_hash()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
251 if util.safehasattr(scmutil, 'filteredhash'):
cf1e854f50e9 topic: compatibility for scmutil.combined_filtered_and_obsolete_hash()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
252 # hg <= 6.7 (a03fa40afd01)
cf1e854f50e9 topic: compatibility for scmutil.combined_filtered_and_obsolete_hash()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
253 code = scmutil.filteredhash.__code__
cf1e854f50e9 topic: compatibility for scmutil.combined_filtered_and_obsolete_hash()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
254 if 'needobsolete' not in code.co_varnames[:code.co_argcount]:
cf1e854f50e9 topic: compatibility for scmutil.combined_filtered_and_obsolete_hash()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
255 # hg <= 6.0 (053a5bf508da)
cf1e854f50e9 topic: compatibility for scmutil.combined_filtered_and_obsolete_hash()
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
256 filterfn = _filter_obsolete_heads
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
257 data = {}
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
258 for b in repo.branchmap().iterbranches():
6382
3d0b5b4b262a topic: make _nbheads() skip branchmap entries that aren't just a branch
Anton Shestakov <av6@dwimlabs.net>
parents: 6369
diff changeset
259 namedbranch, tns, topic = common.parsefqbn(b[0])
6487
963471ebe26a topic: make topic namespace use string "none" as the default/empty value
Anton Shestakov <av6@dwimlabs.net>
parents: 6386
diff changeset
260 if tns != b'none' or topic:
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
261 continue
5222
ba53591d4aab head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
262 oldheads = [repo[n].rev() for n in b[1]]
6125
885a972d5069 topic: no need to filter obsolete heads in Mercurial 6.1
Anton Shestakov <av6@dwimlabs.net>
parents: 5684
diff changeset
263 newheads = filterfn(repo, oldheads)
5581
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
264 data[b[0]] = newheads
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
265 return data
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
266
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
267 def handlecheckheads(orig, op, inpart):
2675
304232cc14b6 topic: some document for an obscure function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2674
diff changeset
268 """This is used to check for new heads when publishing changeset"""
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
269 orig(op, inpart)
4542
f5127bfc1588 topic: only wrap handlecheckheads for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4541
diff changeset
270 if not common.hastopicext(op.repo) or op.repo.publishing():
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
271 return
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
272 tr = op.gettransaction()
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4804
diff changeset
273 if tr.hookargs[b'source'] not in (b'push', b'serve'): # not a push
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
274 return
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
275 tr._prepushheads = _nbheads(op.repo)
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
276 reporef = weakref.ref(op.repo)
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
277 if util.safehasattr(tr, '_validator'):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
278 # hg <= 5.3 (36f08ae87ef6)
4123
119fced5a891 topic: add a compatibility to access transaction's validator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3917
diff changeset
279 oldvalidator = tr._validator
1921
4898296d7d25 discovery: whitespace
Sean Farley <sean@farley.io>
parents: 1920
diff changeset
280
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
281 def _validate(tr):
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
282 repo = reporef()
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
283 if repo is not None:
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
284 repo.invalidatecaches()
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
285 finalheads = _nbheads(repo)
4742
db3e7f6b5ceb py3: switch from iteritems() to items() in the topics extension
Martin von Zweigbergk <martinvonz@google.com>
parents: 4544
diff changeset
286 for branch, oldnb in tr._prepushheads.items():
5581
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
287 newheads = finalheads.pop(branch, [])
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
288 if len(oldnb) < len(newheads):
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
289 cl = repo.changelog
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
290 newheads = sorted(set(newheads).difference(oldnb))
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
291 heads = scmutil.nodesummaries(repo, [cl.node(r) for r in newheads])
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
292 msg = _(
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
293 b"push creates new heads on branch '%s': %s"
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
294 % (branch, heads)
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
295 )
6321
58b856416d2e topic: use compat.StateError for aborting pushes that create new heads
Anton Shestakov <av6@dwimlabs.net>
parents: 6304
diff changeset
296 raise compat.StateError(msg)
4742
db3e7f6b5ceb py3: switch from iteritems() to items() in the topics extension
Martin von Zweigbergk <martinvonz@google.com>
parents: 4544
diff changeset
297 for branch, newnb in finalheads.items():
5581
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
298 if 1 < len(newnb):
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
299 cl = repo.changelog
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
300 heads = scmutil.nodesummaries(repo, [cl.node(r) for r in newnb])
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
301 msg = _(
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
302 b"push creates new branch '%s' with multiple heads: %s"
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
303 % (branch, heads)
36ccafa69095 discovery: list the new heads like core does when failing a multi-head push
Matt Harbison <matt_harbison@yahoo.com>
parents: 5377
diff changeset
304 )
5377
a267a7d3e1c5 topic: copy an abort message (new branch) from upstream exactly
Anton Shestakov <av6@dwimlabs.net>
parents: 5376
diff changeset
305 hint = _(b"merge or see 'hg help push' for details about "
a267a7d3e1c5 topic: copy an abort message (new branch) from upstream exactly
Anton Shestakov <av6@dwimlabs.net>
parents: 5376
diff changeset
306 b"pushing new heads")
6321
58b856416d2e topic: use compat.StateError for aborting pushes that create new heads
Anton Shestakov <av6@dwimlabs.net>
parents: 6304
diff changeset
307 raise compat.StateError(msg, hint=hint)
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
308
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
309 def validator(tr):
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
310 _validate(tr)
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
311 return oldvalidator(tr)
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
312
6304
c00332abb66b topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents: 6296
diff changeset
313 if util.safehasattr(tr, '_validator'):
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
314 # hg <= 5.3 (36f08ae87ef6)
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
315 tr._validator = validator
4123
119fced5a891 topic: add a compatibility to access transaction's validator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 3917
diff changeset
316 else:
5203
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
317 tr.addvalidator(b'000-new-head-check', _validate)
034d6d0efa7d topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents: 5193
diff changeset
318
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
319 handlecheckheads.params = frozenset()
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
320
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
321 def _pushb2phases(orig, pushop, bundler):
4543
7f1e1ba3d16b topic: only wrap _pushb2phases for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4542
diff changeset
322 if common.hastopicext(pushop.repo):
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4804
diff changeset
323 checktypes = (b'check:heads', b'check:updated-heads')
4543
7f1e1ba3d16b topic: only wrap _pushb2phases for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4542
diff changeset
324 hascheck = any(p.type in checktypes for p in bundler._parts)
7f1e1ba3d16b topic: only wrap _pushb2phases for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4542
diff changeset
325 if not hascheck and pushop.outdatedphases:
7f1e1ba3d16b topic: only wrap _pushb2phases for repo with topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 4542
diff changeset
326 exchange._pushb2ctxcheckheads(pushop, bundler)
1887
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
327 return orig(pushop, bundler)
68125d026b07 push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1886
diff changeset
328
1903
58cdf061d49a topic: don't take topic into account when pushing to non-topic repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1901
diff changeset
329 def wireprotocaps(orig, repo, proto):
58cdf061d49a topic: don't take topic into account when pushing to non-topic repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1901
diff changeset
330 caps = orig(repo, proto)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4804
diff changeset
331 if common.hastopicext(repo) and repo.peer().capable(b'topics'):
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4804
diff changeset
332 caps.append(b'topics')
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
333 caps.append(b'topics-namespaces')
1903
58cdf061d49a topic: don't take topic into account when pushing to non-topic repo
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1901
diff changeset
334 return caps
1944
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
335
6386
9b5660737b52 topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents: 6384
diff changeset
336 # **kwargs is for accommodating an optional changelog argument
9b5660737b52 topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents: 6384
diff changeset
337 # hg <= 4.8 (5e5c8f2a1eb5)
9b5660737b52 topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents: 6384
diff changeset
338 def wrapbranchinfo(orig, self, rev, **kwargs):
6384
afd252e8f6e6 topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents: 6383
diff changeset
339 # NOTE: orig can be either branchinfo() or _branchinfo()!
6386
9b5660737b52 topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents: 6384
diff changeset
340 b, close = orig(self, rev, **kwargs)
6336
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
341 if common.hastopicext(self._repo):
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
342 if self._repo.ui.configbool(b'_internal', b'tns-disable-fqbn'):
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
343 # the config option prevents this function from doing anything,
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
344 # this happens when e.g. the remote repo doesn't have topic
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
345 # extension enabled
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
346 pass
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
347 elif self._repo.ui.configbool(b'_internal', b'tns-publish'):
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
348 # when this rev gets published, only branch will stay
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
349 b = common.formatfqbn(branch=b)
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
350 else:
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
351 ctx = self._repo[rev]
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
352 b = ctx.fqbn()
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
353 return b, close
453861da6922 topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents: 6321
diff changeset
354
6386
9b5660737b52 topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents: 6384
diff changeset
355 # **kwargs is for accommodating an optional changelog argument
9b5660737b52 topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents: 6384
diff changeset
356 # hg <= 4.8 (5e5c8f2a1eb5)
9b5660737b52 topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents: 6384
diff changeset
357 def wrapslowbranchinfo(orig, self, rev, **kwargs):
6384
afd252e8f6e6 topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents: 6383
diff changeset
358 if self.branchinfo == self._branchinfo:
afd252e8f6e6 topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents: 6383
diff changeset
359 # _branchinfo() gets called directly and needs to do the conversion
6386
9b5660737b52 topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents: 6384
diff changeset
360 return wrapbranchinfo(orig, self, rev, **kwargs)
6384
afd252e8f6e6 topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents: 6383
diff changeset
361 else:
afd252e8f6e6 topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents: 6383
diff changeset
362 # _branchinfo() gets called through branchinfo(), the latter will need
afd252e8f6e6 topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents: 6383
diff changeset
363 # to do the conversion
6386
9b5660737b52 topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents: 6384
diff changeset
364 return orig(self, rev, **kwargs)
6384
afd252e8f6e6 topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents: 6383
diff changeset
365
6546
30d0d3d92c8d topic: properly process revbranchcache before sending it to peers (issue6841)
Anton Shestakov <av6@dwimlabs.net>
parents: 6386
diff changeset
366 def wrapaddpartrevbranchcache(orig, repo, bundler, outgoing):
30d0d3d92c8d topic: properly process revbranchcache before sending it to peers (issue6841)
Anton Shestakov <av6@dwimlabs.net>
parents: 6386
diff changeset
367 """making sure we send rev-branch-cache that only has bare branches"""
30d0d3d92c8d topic: properly process revbranchcache before sending it to peers (issue6841)
Anton Shestakov <av6@dwimlabs.net>
parents: 6386
diff changeset
368 overrides = {(b'_internal', b'tns-disable-fqbn'): True}
30d0d3d92c8d topic: properly process revbranchcache before sending it to peers (issue6841)
Anton Shestakov <av6@dwimlabs.net>
parents: 6386
diff changeset
369 with repo.ui.configoverride(overrides, b'topic-namespaces'):
30d0d3d92c8d topic: properly process revbranchcache before sending it to peers (issue6841)
Anton Shestakov <av6@dwimlabs.net>
parents: 6386
diff changeset
370 orig(repo, bundler, outgoing)
30d0d3d92c8d topic: properly process revbranchcache before sending it to peers (issue6841)
Anton Shestakov <av6@dwimlabs.net>
parents: 6386
diff changeset
371
6564
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6563
diff changeset
372 def wraphgpeer(orig, uiorrepo, opts, *args, **kwargs):
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6563
diff changeset
373 """hg.peer() that checks if there are explicit arguments for e.g. pull"""
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6563
diff changeset
374 peer = orig(uiorrepo, opts, *args, **kwargs)
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6563
diff changeset
375 if any(opts.get(k) for k in (b'rev', b'bookmark', b'branch')):
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6563
diff changeset
376 peer.ui.setconfig(b'_internal', b'tns-explicit-target', True, b'topic-namespaces')
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6563
diff changeset
377 return peer
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6563
diff changeset
378
6563
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
379 def wraphgremoteui(orig, src, opts):
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
380 """hg.remoteui() that copies tns-related config options to peer ui"""
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
381 dst = orig(src, opts)
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
382 if util.safehasattr(src, 'baseui'): # looks like a repository
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
383 src = src.ui
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
384 # we need to copy topic namespaces from local config to peer ui, since it
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
385 # needs to be accessible for peer command executors
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
386 namespaces = src.configlist(b'experimental', b'tns-default-pull-namespaces', [b'*'])
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
387 dst.setconfig(b'experimental', b'tns-default-pull-namespaces', namespaces, b'copied')
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
388 return dst
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
389
1944
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
390 def modsetup(ui):
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
391 """run at uisetup time to install all destinations wrapping"""
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
392 extensions.wrapfunction(discovery, '_headssummary', _headssummary)
5180
515d425c0a05 compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
393 extensions.wrapfunction(wireprotov1server, 'branchmap', wireprotobranchmap)
6270
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
394 wireprotov1server.commands.pop(b'branchmap')
00d1551bfa8c topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6125
diff changeset
395 wireprotov1server.wireprotocommand(b'branchmap', permission=b'pull')(wireprotov1server.branchmap)
5180
515d425c0a05 compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5041
diff changeset
396 extensions.wrapfunction(wireprotov1server, '_capabilities', wireprotocaps)
6383
c6e3d2dbbeb0 topic: simply reuse wirepeer.branchmap() as wirepeer.branchmaptns()
Anton Shestakov <av6@dwimlabs.net>
parents: 6382
diff changeset
397 wirepeer.branchmaptns = wirepeer.branchmap
6296
a2855aff1268 topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents: 6295
diff changeset
398 wireprotov1server.wireprotocommand(b'branchmaptns', permission=b'pull')(wireprotobranchmaptns)
6890
7ec9f4b04519 topic: compatibility for revbranchcache being in a separate module now
Anton Shestakov <av6@dwimlabs.net>
parents: 6786
diff changeset
399 extensions.wrapfunction(revbranchcache, 'branchinfo', wrapbranchinfo)
6384
afd252e8f6e6 topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents: 6383
diff changeset
400 # branchinfo method can get replaced by _branchinfo method directly when
afd252e8f6e6 topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents: 6383
diff changeset
401 # on-disk revbranchcache is not available, see revbranchcache.__init__()
6890
7ec9f4b04519 topic: compatibility for revbranchcache being in a separate module now
Anton Shestakov <av6@dwimlabs.net>
parents: 6786
diff changeset
402 extensions.wrapfunction(revbranchcache, '_branchinfo', wrapslowbranchinfo)
2676
10dedac0d82e topic: also insert the extra head check with using the new head checking
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2675
diff changeset
403 # we need a proper wrap b2 part stuff
1944
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
404 extensions.wrapfunction(bundle2, 'handlecheckheads', handlecheckheads)
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
405 bundle2.handlecheckheads.params = frozenset()
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4804
diff changeset
406 bundle2.parthandlermapping[b'check:heads'] = bundle2.handlecheckheads
2676
10dedac0d82e topic: also insert the extra head check with using the new head checking
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2675
diff changeset
407 if util.safehasattr(bundle2, 'handlecheckupdatedheads'):
10dedac0d82e topic: also insert the extra head check with using the new head checking
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2675
diff changeset
408 # we still need a proper wrap b2 part stuff
10dedac0d82e topic: also insert the extra head check with using the new head checking
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2675
diff changeset
409 extensions.wrapfunction(bundle2, 'handlecheckupdatedheads', handlecheckheads)
10dedac0d82e topic: also insert the extra head check with using the new head checking
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 2675
diff changeset
410 bundle2.handlecheckupdatedheads.params = frozenset()
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4804
diff changeset
411 bundle2.parthandlermapping[b'check:updated-heads'] = bundle2.handlecheckupdatedheads
6546
30d0d3d92c8d topic: properly process revbranchcache before sending it to peers (issue6841)
Anton Shestakov <av6@dwimlabs.net>
parents: 6386
diff changeset
412 extensions.wrapfunction(bundle2, 'addpartrevbranchcache', wrapaddpartrevbranchcache)
1944
daad8249d5cf discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 1934
diff changeset
413 extensions.wrapfunction(exchange, '_pushb2phases', _pushb2phases)
4814
48b30ff742cb python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents: 4804
diff changeset
414 exchange.b2partsgenmapping[b'phase'] = exchange._pushb2phases
6564
2d3771d61068 topic: use a config option to signal explicit target arguments (for tns)
Anton Shestakov <av6@dwimlabs.net>
parents: 6563
diff changeset
415 extensions.wrapfunction(hg, 'peer', wraphgpeer)
6563
bdc8978232de topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents: 6487
diff changeset
416 extensions.wrapfunction(hg, 'remoteui', wraphgremoteui)