Mercurial > evolve
annotate hgext3rd/topic/discovery.py @ 6563:bdc8978232de
topic: copy experimental.tns-default-pull-namespaces to remote peer ui
This is required to be able to reach this config option when it's set in a hgrc
as opposed to be given with the --config CLI flag.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Mon, 09 Oct 2023 15:06:26 -0300 |
parents | 963471ebe26a |
children | 2d3771d61068 |
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 ( |
6336
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
9 branchmap, |
1944
daad8249d5cf
discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1934
diff
changeset
|
10 bundle2, |
daad8249d5cf
discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1934
diff
changeset
|
11 discovery, |
6296
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
12 encoding, |
1934
9d6d30e36cdd
discovery: move to new style import
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1921
diff
changeset
|
13 exchange, |
1944
daad8249d5cf
discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1934
diff
changeset
|
14 extensions, |
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 |
6296
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
26 urlreq = util.urlreq |
3678
d725fe3e3989
topic: handle wireproto module change from b4d85bc122bd
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3186
diff
changeset
|
27 |
5683
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
28 @contextlib.contextmanager |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
29 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
|
30 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
|
31 |
6364
e8d85d51c7b2
topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents:
6125
diff
changeset
|
32 def overridebranch(p, origbranch): |
e8d85d51c7b2
topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents:
6125
diff
changeset
|
33 def branch(): |
6369 | 34 branch = origbranch() |
6364
e8d85d51c7b2
topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents:
6125
diff
changeset
|
35 if p.rev() in publishedset: |
6369 | 36 return common.formatfqbn(branch=branch) |
37 return p.fqbn() | |
6364
e8d85d51c7b2
topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents:
6125
diff
changeset
|
38 return branch |
e8d85d51c7b2
topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents:
6125
diff
changeset
|
39 |
5683
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
40 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
|
41 # 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
|
42 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
|
43 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
|
44 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
|
45 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
|
46 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
|
47 |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
48 def branch(): |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
49 branch = oldbranch() |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
50 if rev in publishedset: |
6336
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
51 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
|
52 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
|
53 |
5684
4de216446c53
topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5683
diff
changeset
|
54 def parents(): |
4de216446c53
topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5683
diff
changeset
|
55 parents = oldparents() |
4de216446c53
topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5683
diff
changeset
|
56 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
|
57 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
|
58 continue |
4de216446c53
topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5683
diff
changeset
|
59 |
6364
e8d85d51c7b2
topic: monkey-patch ctx.branch() correctly in override_context_branch
Anton Shestakov <av6@dwimlabs.net>
parents:
6125
diff
changeset
|
60 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
|
61 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
|
62 return parents |
4de216446c53
topic: also wrap the `ctx.branch` of parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5683
diff
changeset
|
63 |
5683
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
64 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
|
65 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
|
66 return ctx |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
67 |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
68 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
|
69 try: |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
70 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
|
71 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
|
72 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
|
73 else: |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
74 repo = unfi |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
75 yield repo |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
76 finally: |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
77 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
|
78 |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
79 |
3689
415c872d3308
topic: remove compatibility for older version in discovery wrapping
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3678
diff
changeset
|
80 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
|
81 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
|
82 remote = pushop.remote |
2558
65cf338258d2
fix: fix _headssummary api
Boris Feld <boris.feld@octobus.net>
parents:
1965
diff
changeset
|
83 |
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
|
84 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
|
85 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
|
86 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
|
87 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
|
88 else: |
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
89 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
|
90 publishednode = [c.node() for c in pushop.outdatedphases] |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
91 publishedset = repo.revs(b'ancestors(%ln + %ln)', |
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
|
92 publishednode, |
35130e428ebd
compat: drop code dealing with incompatibility for --publish with 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4194
diff
changeset
|
93 pushop.remotephases.publicheads) |
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
|
94 |
6336
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
95 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
|
96 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
|
97 # 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
|
98 # 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
|
99 publishing = publishing or pushop.publish |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
100 |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
101 ctxoverride = util.nullcontextmanager() |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
102 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
|
103 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
|
104 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
|
105 else: |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
106 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
|
107 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
|
108 |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
109 if not common.hastopicext(pushop.repo): |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
110 with ctxoverride, configoverride: |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
111 return orig(pushop, *args, **kwargs) |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
112 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
|
113 and not getattr(pushop, 'publish', False)): |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
114 with ctxoverride, configoverride: |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
115 return orig(pushop, *args, **kwargs) |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
116 |
4929
bb2b4f6c99dc
compat: compatibility for cl.nodemap.get vs cl.index.get_rev
Anton Shestakov <av6@dwimlabs.net>
parents:
4814
diff
changeset
|
117 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
|
118 |
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
|
119 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
|
120 # 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 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
|
126 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
|
127 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
|
128 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
|
129 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
|
130 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
|
131 else: |
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
132 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
|
133 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
|
134 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
|
135 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
|
136 |
6336
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
137 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
|
138 try: |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
139 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
|
140 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
|
141 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
|
142 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
|
143 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
|
144 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
|
145 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
|
146 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
|
147 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
|
148 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
|
149 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
|
150 return summary |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
151 finally: |
1dece375d2ab
topic: extract awful `ctx.branch` hijacking used in discovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5581
diff
changeset
|
152 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
|
153 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
|
154 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
|
155 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
|
156 |
0504e76bfbd9
push: allow pushing new topic to non-publishing server by default
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
157 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
|
158 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
|
159 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
|
160 unfi = repo.unfiltered() |
00d1551bfa8c
topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
6125
diff
changeset
|
161 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
|
162 try: |
6270
00d1551bfa8c
topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
6125
diff
changeset
|
163 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
|
164 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
|
165 usetopic = not self.publishing() |
6271
caf302fb8f4d
topic: use branch//namespace/topic format everywhere except exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6270
diff
changeset
|
166 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
|
167 |
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
168 # 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
|
169 # 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
|
170 # 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
|
171 # 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
|
172 # 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
|
173 unfi.__class__ = repocls |
00d1551bfa8c
topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
6125
diff
changeset
|
174 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
|
175 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
|
176 else: |
00d1551bfa8c
topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
6125
diff
changeset
|
177 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
|
178 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
|
179 finally: |
6270
00d1551bfa8c
topic: actually wrap branchmap wire-protocol command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
6125
diff
changeset
|
180 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
|
181 |
6296
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
182 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
|
183 """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
|
184 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
|
185 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
|
186 branchmaptns = repo.branchmaptns() |
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
187 heads = [] |
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
188 for branch, nodes in branchmaptns.items(): |
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
189 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
|
190 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
|
191 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
|
192 |
a2855aff1268
topic: call a different wire protocol command to get tns-aware branchmap
Anton Shestakov <av6@dwimlabs.net>
parents:
6295
diff
changeset
|
193 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
|
194 |
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
|
195 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
|
196 # 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
|
197 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
|
198 |
ba53591d4aab
head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5041
diff
changeset
|
199 |
ba53591d4aab
head-checking: filter out obsolete heads when checking for new heads
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5041
diff
changeset
|
200 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
|
201 """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
|
202 |
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 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
|
204 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
|
205 """ |
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 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
|
207 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
|
208 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
|
209 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
|
210 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
|
211 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
|
212 # 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
|
213 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
|
214 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
|
215 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
|
216 |
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 # 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
|
218 # (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
|
219 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
|
220 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
|
221 ) |
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 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
|
223 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
|
224 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
|
225 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
|
226 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
|
227 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
|
228 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
|
229 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
|
230 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
|
231 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
|
232 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
|
233 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
|
234 |
1887
68125d026b07
push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1886
diff
changeset
|
235 # 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
|
236 # 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
|
237 # 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
|
238 # head. |
68125d026b07
push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1886
diff
changeset
|
239 # |
68125d026b07
push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1886
diff
changeset
|
240 # 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
|
241 def _nbheads(repo): |
6125
885a972d5069
topic: no need to filter obsolete heads in Mercurial 6.1
Anton Shestakov <av6@dwimlabs.net>
parents:
5684
diff
changeset
|
242 code = scmutil.filteredhash.__code__ |
885a972d5069
topic: no need to filter obsolete heads in Mercurial 6.1
Anton Shestakov <av6@dwimlabs.net>
parents:
5684
diff
changeset
|
243 if r'needobsolete' not in code.co_varnames[:code.co_argcount]: |
885a972d5069
topic: no need to filter obsolete heads in Mercurial 6.1
Anton Shestakov <av6@dwimlabs.net>
parents:
5684
diff
changeset
|
244 # hg <= 6.0 (053a5bf508da) |
885a972d5069
topic: no need to filter obsolete heads in Mercurial 6.1
Anton Shestakov <av6@dwimlabs.net>
parents:
5684
diff
changeset
|
245 filterfn = _filter_obsolete_heads |
885a972d5069
topic: no need to filter obsolete heads in Mercurial 6.1
Anton Shestakov <av6@dwimlabs.net>
parents:
5684
diff
changeset
|
246 else: |
885a972d5069
topic: no need to filter obsolete heads in Mercurial 6.1
Anton Shestakov <av6@dwimlabs.net>
parents:
5684
diff
changeset
|
247 filterfn = lambda repo, heads: 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
|
248 data = {} |
68125d026b07
push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1886
diff
changeset
|
249 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
|
250 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
|
251 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
|
252 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
|
253 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
|
254 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
|
255 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
|
256 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
|
257 |
68125d026b07
push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1886
diff
changeset
|
258 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
|
259 """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
|
260 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
|
261 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
|
262 return |
68125d026b07
push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1886
diff
changeset
|
263 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
|
264 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
|
265 return |
68125d026b07
push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1886
diff
changeset
|
266 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
|
267 reporef = weakref.ref(op.repo) |
6304
c00332abb66b
topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents:
6296
diff
changeset
|
268 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
|
269 # 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
|
270 oldvalidator = tr._validator |
1921 | 271 |
5203
034d6d0efa7d
topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
5193
diff
changeset
|
272 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
|
273 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
|
274 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
|
275 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
|
276 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
|
277 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
|
278 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
|
279 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
|
280 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
|
281 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
|
282 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
|
283 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
|
284 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
|
285 % (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
|
286 ) |
6321
58b856416d2e
topic: use compat.StateError for aborting pushes that create new heads
Anton Shestakov <av6@dwimlabs.net>
parents:
6304
diff
changeset
|
287 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
|
288 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
|
289 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
|
290 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
|
291 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
|
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 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
|
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 ) |
5377
a267a7d3e1c5
topic: copy an abort message (new branch) from upstream exactly
Anton Shestakov <av6@dwimlabs.net>
parents:
5376
diff
changeset
|
296 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
|
297 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
|
298 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
|
299 |
034d6d0efa7d
topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
5193
diff
changeset
|
300 def validator(tr): |
034d6d0efa7d
topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
5193
diff
changeset
|
301 _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
|
302 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
|
303 |
6304
c00332abb66b
topic: remove 4.7 compat for transaction validators
Anton Shestakov <av6@dwimlabs.net>
parents:
6296
diff
changeset
|
304 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
|
305 # 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
|
306 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
|
307 else: |
5203
034d6d0efa7d
topic: fix compatibility issues caused because of change in transaction API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
5193
diff
changeset
|
308 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
|
309 |
1887
68125d026b07
push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1886
diff
changeset
|
310 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
|
311 |
68125d026b07
push: hackish handeling of new branch head from phase move
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1886
diff
changeset
|
312 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
|
313 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
|
314 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
|
315 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
|
316 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
|
317 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
|
318 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
|
319 |
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
|
320 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
|
321 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
|
322 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
|
323 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
|
324 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
|
325 return caps |
1944
daad8249d5cf
discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1934
diff
changeset
|
326 |
6386
9b5660737b52
topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents:
6384
diff
changeset
|
327 # **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
|
328 # 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
|
329 def wrapbranchinfo(orig, self, rev, **kwargs): |
6384
afd252e8f6e6
topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents:
6383
diff
changeset
|
330 # 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
|
331 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
|
332 if common.hastopicext(self._repo): |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
333 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
|
334 # 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
|
335 # 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
|
336 # extension enabled |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
337 pass |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
338 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
|
339 # 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
|
340 b = common.formatfqbn(branch=b) |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
341 else: |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
342 ctx = self._repo[rev] |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
343 b = ctx.fqbn() |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
344 return b, close |
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
345 |
6386
9b5660737b52
topic: compatibility for wrapping branchinfo() and _branchinfo() in hg 4.8
Anton Shestakov <av6@dwimlabs.net>
parents:
6384
diff
changeset
|
346 # **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
|
347 # 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
|
348 def wrapslowbranchinfo(orig, self, rev, **kwargs): |
6384
afd252e8f6e6
topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents:
6383
diff
changeset
|
349 if self.branchinfo == self._branchinfo: |
afd252e8f6e6
topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents:
6383
diff
changeset
|
350 # _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
|
351 return wrapbranchinfo(orig, self, rev, **kwargs) |
6384
afd252e8f6e6
topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents:
6383
diff
changeset
|
352 else: |
afd252e8f6e6
topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents:
6383
diff
changeset
|
353 # _branchinfo() gets called through branchinfo(), the latter will need |
afd252e8f6e6
topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents:
6383
diff
changeset
|
354 # 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
|
355 return orig(self, rev, **kwargs) |
6384
afd252e8f6e6
topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents:
6383
diff
changeset
|
356 |
6563
bdc8978232de
topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents:
6487
diff
changeset
|
357 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
|
358 """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
|
359 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
|
360 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
|
361 src = src.ui |
bdc8978232de
topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents:
6487
diff
changeset
|
362 # 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
|
363 # 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
|
364 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
|
365 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
|
366 return dst |
bdc8978232de
topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents:
6487
diff
changeset
|
367 |
1944
daad8249d5cf
discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1934
diff
changeset
|
368 def modsetup(ui): |
daad8249d5cf
discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1934
diff
changeset
|
369 """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
|
370 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
|
371 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
|
372 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
|
373 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
|
374 extensions.wrapfunction(wireprotov1server, '_capabilities', wireprotocaps) |
6383
c6e3d2dbbeb0
topic: simply reuse wirepeer.branchmap() as wirepeer.branchmaptns()
Anton Shestakov <av6@dwimlabs.net>
parents:
6382
diff
changeset
|
375 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
|
376 wireprotov1server.wireprotocommand(b'branchmaptns', permission=b'pull')(wireprotobranchmaptns) |
6336
453861da6922
topic: use fully qualified branch name during exchange
Anton Shestakov <av6@dwimlabs.net>
parents:
6321
diff
changeset
|
377 extensions.wrapfunction(branchmap.revbranchcache, 'branchinfo', wrapbranchinfo) |
6384
afd252e8f6e6
topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents:
6383
diff
changeset
|
378 # 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
|
379 # on-disk revbranchcache is not available, see revbranchcache.__init__() |
afd252e8f6e6
topic: wrap revbranchcache._branchinfo() too
Anton Shestakov <av6@dwimlabs.net>
parents:
6383
diff
changeset
|
380 extensions.wrapfunction(branchmap.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
|
381 # 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
|
382 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
|
383 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
|
384 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
|
385 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
|
386 # 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
|
387 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
|
388 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
|
389 bundle2.parthandlermapping[b'check:updated-heads'] = bundle2.handlecheckupdatedheads |
1944
daad8249d5cf
discovery: move all setup into a 'modsetup' function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1934
diff
changeset
|
390 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
|
391 exchange.b2partsgenmapping[b'phase'] = exchange._pushb2phases |
6563
bdc8978232de
topic: copy experimental.tns-default-pull-namespaces to remote peer ui
Anton Shestakov <av6@dwimlabs.net>
parents:
6487
diff
changeset
|
392 extensions.wrapfunction(hg, 'remoteui', wraphgremoteui) |