annotate hgext3rd/topic/server.py @ 6875:6209891ff220

topic: add `short` keyword argument to callers of common.formatfqbn() The default value (True) is the same as in common.formatfqbn().
author Anton Shestakov <av6@dwimlabs.net>
date Thu, 19 Sep 2024 16:48:48 +0400
parents 71c4b6c2bcdc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
1 # topic/server.py - server specific behavior with topic
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
2 #
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
3 # This software may be used and distributed according to the terms of the
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
4 # GNU General Public License version 2 or any later version.
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
5 from mercurial.i18n import _
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
6
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
7 from mercurial import (
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
8 error,
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
9 extensions,
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
10 localrepo,
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
11 repoview,
6572
ef04d887c9a0 topic: compatibility for tns_heads peer command with Mercurial 5.9 and older
Anton Shestakov <av6@dwimlabs.net>
parents: 6564
diff changeset
12 util,
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
13 wireprototypes,
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
14 wireprotov1peer,
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
15 wireprotov1server,
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
16 )
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
17
6606
c7083ba82d5f topic: drop compatibility {branchmap,repoviewutil}.subsettable for hg 4.9
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
18 from mercurial.utils import repoviewutil
c7083ba82d5f topic: drop compatibility {branchmap,repoviewutil}.subsettable for hg 4.9
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
19
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
20 from . import (
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
21 common,
6573
d511eba4cdb0 topic: compatibility for branchmaptns with branchmap from hg 5.0
Anton Shestakov <av6@dwimlabs.net>
parents: 6572
diff changeset
22 compat,
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
23 constants,
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
24 )
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
25
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
26 ### Visibility restriction
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
27 #
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
28 # Serving draft changesets with topics to clients without topic extension can
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
29 # confuse them, because they won't see the topic label and will consider them
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
30 # normal anonymous heads. Instead we have the option to not serve changesets
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
31 # with topics to clients without topic support.
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
32 #
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
33 # To achieve this, we alter the behavior of the standard `heads` commands and
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
34 # introduce a new `heads` command that only clients with topic will know about.
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
35
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
36 # compat version of the wireprotocommand decorator, taken from evolve compat
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
37
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
38 FILTERNAME = b'served-no-topic'
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
39
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
40 def computeunservedtopic(repo, visibilityexceptions=None):
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
41 assert not repo.changelog.filteredrevs
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
42 filteredrevs = repoview.filtertable[b'served'](repo, visibilityexceptions).copy()
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
43 mutable = repoview.filtertable[b'immutable'](repo, visibilityexceptions)
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
44 consider = mutable - filteredrevs
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
45 cl = repo.changelog
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
46 extrafiltered = set()
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
47 for r in consider:
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
48 if cl.changelogrevision(r).extra.get(constants.extrakey, b''):
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
49 extrafiltered.add(r)
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
50 if extrafiltered:
5150
e0c091b199bc topic: extend topic gating to descendant
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5148
diff changeset
51 extrafiltered = set(repo.revs('%ld::%ld', extrafiltered, consider))
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
52 filteredrevs = frozenset(filteredrevs | extrafiltered)
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
53 return filteredrevs
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
54
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
55 def wrapheads(orig, repo, proto):
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
56 """wrap head to hide topic^W draft changeset to old client"""
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
57 hidetopics = repo.ui.configbool(b'experimental', b'topic.server-gate-topic-changesets')
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
58 if common.hastopicext(repo) and hidetopics:
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
59 h = repo.filtered(FILTERNAME).heads()
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
60 return wireprototypes.bytesresponse(wireprototypes.encodelist(h) + b'\n')
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
61 return orig(repo, proto)
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
62
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
63 def topicheads(repo, proto):
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
64 """Same as the normal wireprotocol command, but accessing with a different end point."""
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
65 h = repo.heads()
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
66 return wireprototypes.bytesresponse(wireprototypes.encodelist(h) + b'\n')
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
67
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
68 def tns_heads(repo, proto, namespaces):
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
69 """wireprotocol command to filter heads based on topic namespaces"""
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
70 if not common.hastopicext(repo):
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
71 return topicheads(repo, proto)
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
72
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
73 namespaces = wireprototypes.decodelist(namespaces)
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
74 if b'*' in namespaces:
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
75 # pulling all topic namespaces, all changesets are visible
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
76 h = repo.heads()
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
77 else:
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
78 # only changesets in the selected topic namespaces are visible
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
79 h = []
6745
71c4b6c2bcdc topic: drop branchmap._entries compatibility for hg 4.9
Anton Shestakov <av6@dwimlabs.net>
parents: 6652
diff changeset
80 entries = repo.branchmaptns()._entries
6573
d511eba4cdb0 topic: compatibility for branchmaptns with branchmap from hg 5.0
Anton Shestakov <av6@dwimlabs.net>
parents: 6572
diff changeset
81 for branch, nodes in compat.branchmapitems(entries):
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
82 namedbranch, tns, topic = common.parsefqbn(branch)
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
83 if tns == b'none' or tns in namespaces:
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
84 h.extend(nodes)
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
85 return wireprototypes.bytesresponse(wireprototypes.encodelist(h) + b'\n')
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
86
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
87 def wireprotocaps(orig, repo, proto):
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
88 """advertise the new topic specific `head` command for client with topic"""
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
89 caps = orig(repo, proto)
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
90 if common.hastopicext(repo) and repo.peer().capable(b'topics'):
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
91 caps.append(b'_exttopics_heads')
5931
6357551cb66f topic: announce ext-topics-publish capability in case of SSH and HTTP too
Anton Shestakov <av6@dwimlabs.net>
parents: 5193
diff changeset
92 if repo.ui.configbool(b'phases', b'publish'):
6357551cb66f topic: announce ext-topics-publish capability in case of SSH and HTTP too
Anton Shestakov <av6@dwimlabs.net>
parents: 5193
diff changeset
93 mode = b'all'
6357551cb66f topic: announce ext-topics-publish capability in case of SSH and HTTP too
Anton Shestakov <av6@dwimlabs.net>
parents: 5193
diff changeset
94 elif repo.ui.configbool(b'experimental', b'topic.publish-bare-branch'):
6357551cb66f topic: announce ext-topics-publish capability in case of SSH and HTTP too
Anton Shestakov <av6@dwimlabs.net>
parents: 5193
diff changeset
95 mode = b'auto'
6357551cb66f topic: announce ext-topics-publish capability in case of SSH and HTTP too
Anton Shestakov <av6@dwimlabs.net>
parents: 5193
diff changeset
96 else:
6357551cb66f topic: announce ext-topics-publish capability in case of SSH and HTTP too
Anton Shestakov <av6@dwimlabs.net>
parents: 5193
diff changeset
97 mode = b'none'
6357551cb66f topic: announce ext-topics-publish capability in case of SSH and HTTP too
Anton Shestakov <av6@dwimlabs.net>
parents: 5193
diff changeset
98 caps.append(b'ext-topics-publish=%s' % mode)
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
99 caps.append(b'ext-topics-tns-heads')
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
100 return caps
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
101
6652
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
102 class topiccommandexecutor(localrepo.localcommandexecutor):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
103 def callcommand(self, command, args):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
104 if command == b'heads':
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
105 if self._peer.capable(b'ext-topics-tns-heads'):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
106 command = b'tns_heads'
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
107 if self._peer.ui.configbool(b'_internal', b'tns-explicit-target', False):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
108 args[b'namespaces'] = [b'*']
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
109 else:
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
110 args[b'namespaces'] = self._peer.ui.configlist(b'experimental', b'tns-default-pull-namespaces', [b'*'])
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
111 s = super(topiccommandexecutor, self)
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
112 return s.callcommand(command, args)
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
113
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
114 class topicpeerexecutor(wireprotov1peer.peerexecutor):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
115 def callcommand(self, command, args):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
116 if command == b'heads':
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
117 if self._peer.capable(b'ext-topics-tns-heads'):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
118 command = b'tns_heads'
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
119 if self._peer.ui.configbool(b'_internal', b'tns-explicit-target', False):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
120 args[b'namespaces'] = [b'*']
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
121 else:
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
122 args[b'namespaces'] = self._peer.ui.configlist(b'experimental', b'tns-default-pull-namespaces', [b'*'])
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
123 elif self._peer.capable(b'_exttopics_heads'):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
124 command = b'_exttopics_heads'
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
125 if getattr(self._peer, '_exttopics_heads', None) is None:
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
126 self._peer._exttopics_heads = self._peer.heads
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
127 s = super(topicpeerexecutor, self)
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
128 return s.callcommand(command, args)
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
129
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
130 def setupserver(ui):
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
131 extensions.wrapfunction(wireprotov1server, 'heads', wrapheads)
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
132 wireprotov1server.commands.pop(b'heads')
5180
515d425c0a05 compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5150
diff changeset
133 wireprotov1server.wireprotocommand(b'heads', permission=b'pull')(wireprotov1server.heads)
515d425c0a05 compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 5150
diff changeset
134 wireprotov1server.wireprotocommand(b'_exttopics_heads', permission=b'pull')(topicheads)
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
135 wireprotov1server.wireprotocommand(b'tns_heads', b'namespaces', permission=b'pull')(tns_heads)
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
136 extensions.wrapfunction(wireprotov1server, '_capabilities', wireprotocaps)
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
137
6572
ef04d887c9a0 topic: compatibility for tns_heads peer command with Mercurial 5.9 and older
Anton Shestakov <av6@dwimlabs.net>
parents: 6564
diff changeset
138 if util.safehasattr(wireprotov1peer, 'future'):
ef04d887c9a0 topic: compatibility for tns_heads peer command with Mercurial 5.9 and older
Anton Shestakov <av6@dwimlabs.net>
parents: 6564
diff changeset
139 # hg <= 5.9 (c424ff4807e6)
6644
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
140 @wireprotov1peer.batchable
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
141 def wp_tns_heads(self, namespaces):
6651
e9650b5616ac branching: merge with stable
Anton Shestakov <av6@dwimlabs.net>
parents: 6618 6644
diff changeset
142 f = wireprotov1peer.future() # pytype: disable=module-attr
6644
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
143 yield {b'namespaces': wireprototypes.encodelist(namespaces)}, f
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
144 d = f.value
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
145 try:
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
146 yield wireprototypes.decodelist(d[:-1])
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
147 except ValueError:
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
148 self._abort(error.ResponseError(_(b"unexpected response:"), d))
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
149 else:
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
150 @wireprotov1peer.batchable
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
151 def wp_tns_heads(self, namespaces):
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
152 def decode(d):
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
153 try:
6644
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
154 return wireprototypes.decodelist(d[:-1])
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
155 except ValueError:
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
156 self._abort(error.ResponseError(_(b"unexpected response:"), d))
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
157
6644
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
158 return {b'namespaces': wireprototypes.encodelist(namespaces)}, decode
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
159
6644
23cad1a872b6 topic: add tns_heads method to wirepeer directly instead of using a subclass
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 6573
diff changeset
160 wireprotov1peer.wirepeer.tns_heads = wp_tns_heads
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
161
6652
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
162 def wp_commandexecutor(self):
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
163 return topicpeerexecutor(self)
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
164
6652
92fd4581f569 topic: return our special executor classes for each instance
Anton Shestakov <av6@dwimlabs.net>
parents: 6651
diff changeset
165 wireprotov1peer.wirepeer.commandexecutor = wp_commandexecutor
6548
445240ccb701 topic: add experimental.tns-default-pull-namespaces config option
Anton Shestakov <av6@dwimlabs.net>
parents: 6387
diff changeset
166
5139
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
167 if FILTERNAME not in repoview.filtertable:
19b8ffd23795 topic: option to hide topic changesets to plain client
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff changeset
168 repoview.filtertable[FILTERNAME] = computeunservedtopic
6606
c7083ba82d5f topic: drop compatibility {branchmap,repoviewutil}.subsettable for hg 4.9
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
169 repoviewutil.subsettable[FILTERNAME] = b'immutable'
c7083ba82d5f topic: drop compatibility {branchmap,repoviewutil}.subsettable for hg 4.9
Anton Shestakov <av6@dwimlabs.net>
parents: 6573
diff changeset
170 repoviewutil.subsettable[b'served'] = FILTERNAME