Mercurial > evolve
annotate hgext3rd/topic/discovery.py @ 6935:954d7ea5cd67 stable tip
stack: when stack base is obsolete, pick any successor, even if at random
There are situations when s0 is obsolete and we also cannot pick just one
successor for it to use in stack. In such a case, let's pick the "latest"
successor from the first set.
We're assuming that obsutil.successorssets() returns data in the same order (it
should, since it makes sure to sort data internally). Keeping that in mind,
while the successor picked for s0 by this code is not based on any sort of
sophisticated logic, it should nonetheless be the same every time.
This patch is probably not going to completely break anything that was
previously working fine, because the previous behavior was to just abort with
an exception.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Sat, 16 Nov 2024 17:01:02 +0400 |
parents | 7ec9f4b04519 |
children | 361dcfcb3f08 |
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 | 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 | 42 return common.formatfqbn(branch=branch) |
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 | 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) |