Mercurial > evolve
annotate hgext3rd/serverminitopic.py @ 3677:60d396d3da80
obsexchange: remove unused import of wireprotoserver
This seems to be unused since 300d7d019b9.
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Wed, 18 Apr 2018 22:36:54 -0700 |
parents | fa15068a9945 |
children | b12c5d107187 |
rev | line source |
---|---|
3206
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
1 """enable a minimal verison of topic for server |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
2 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
3 Non publishing repository will see topic as "branch:topic" in the branch field. |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
4 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
5 In addition to adding the extensions, the feature must be manually enabled in the config: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
6 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
7 [experimental] |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
8 server-mini-topic = yes |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
9 """ |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
10 import hashlib |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
11 import contextlib |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
12 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
13 from mercurial import ( |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
14 branchmap, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
15 context, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
16 encoding, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
17 extensions, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
18 node, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
19 registrar, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
20 util, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
21 wireproto, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
22 ) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
23 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
24 if util.safehasattr(registrar, 'configitem'): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
25 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
26 configtable = {} |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
27 configitem = registrar.configitem(configtable) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
28 configitem('experimental', 'server-mini-topic', |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
29 default=False, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
30 ) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
31 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
32 def hasminitopic(repo): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
33 """true if minitopic is enabled on the repository |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
34 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
35 (The value is cached on the repository) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
36 """ |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
37 enabled = getattr(repo, '_hasminitopic', None) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
38 if enabled is None: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
39 enabled = (repo.ui.configbool('experimental', 'server-mini-topic') |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
40 and not repo.publishing()) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
41 repo._hasminitopic = enabled |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
42 return enabled |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
43 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
44 ### make topic visible though "ctx.branch()" |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
45 |
3651
fa15068a9945
serverminitopic: wrap context.changectx.branch instead of context.changectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3518
diff
changeset
|
46 def topicbranch(orig, self): |
fa15068a9945
serverminitopic: wrap context.changectx.branch instead of context.changectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3518
diff
changeset
|
47 branch = orig(self) |
fa15068a9945
serverminitopic: wrap context.changectx.branch instead of context.changectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3518
diff
changeset
|
48 if hasminitopic(self._repo) and self.phase(): |
fa15068a9945
serverminitopic: wrap context.changectx.branch instead of context.changectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3518
diff
changeset
|
49 topic = self._changeset.extra.get('topic') |
fa15068a9945
serverminitopic: wrap context.changectx.branch instead of context.changectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3518
diff
changeset
|
50 if topic is not None: |
fa15068a9945
serverminitopic: wrap context.changectx.branch instead of context.changectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3518
diff
changeset
|
51 topic = encoding.tolocal(topic) |
fa15068a9945
serverminitopic: wrap context.changectx.branch instead of context.changectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3518
diff
changeset
|
52 branch = '%s:%s' % (branch, topic) |
fa15068a9945
serverminitopic: wrap context.changectx.branch instead of context.changectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3518
diff
changeset
|
53 return branch |
3206
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
54 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
55 ### avoid caching topic data in rev-branch-cache |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
56 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
57 class revbranchcacheoverlay(object): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
58 """revbranch mixin that don't use the cache for non public changeset""" |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
59 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
60 def _init__(self, *args, **kwargs): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
61 super(revbranchcacheoverlay, self).__init__(*args, **kwargs) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
62 if 'branchinfo' in vars(self): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
63 del self.branchinfo |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
64 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
65 def branchinfo(self, rev): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
66 """return branch name and close flag for rev, using and updating |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
67 persistent cache.""" |
3511
768f752b5364
serverminitopic: fix wrong object being passed to phase
Sean Farley <sean@farley.io>
parents:
3207
diff
changeset
|
68 phase = self._repo._phasecache.phase(self._repo, rev) |
3206
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
69 if phase: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
70 ctx = self._repo[rev] |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
71 return ctx.branch(), ctx.closesbranch() |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
72 return super(revbranchcacheoverlay, self).branchinfo(rev) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
73 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
74 def reposetup(ui, repo): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
75 """install a repo class with a special revbranchcache""" |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
76 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
77 if hasminitopic(repo): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
78 repo = repo.unfiltered() |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
79 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
80 class minitopicrepo(repo.__class__): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
81 """repository subclass that install the modified cache""" |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
82 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
83 def revbranchcache(self): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
84 if self._revbranchcache is None: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
85 cache = super(minitopicrepo, self).revbranchcache() |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
86 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
87 class topicawarerbc(revbranchcacheoverlay, cache.__class__): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
88 pass |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
89 cache.__class__ = topicawarerbc |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
90 if 'branchinfo' in vars(cache): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
91 del cache.branchinfo |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
92 self._revbranchcache = cache |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
93 return self._revbranchcache |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
94 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
95 repo.__class__ = minitopicrepo |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
96 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
97 ### topic aware branch head cache |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
98 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
99 def _phaseshash(repo, maxrev): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
100 """uniq ID for a phase matching a set of rev""" |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
101 revs = set() |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
102 cl = repo.changelog |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
103 fr = cl.filteredrevs |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
104 nm = cl.nodemap |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
105 for roots in repo._phasecache.phaseroots[1:]: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
106 for n in roots: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
107 r = nm.get(n) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
108 if r not in fr and r < maxrev: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
109 revs.add(r) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
110 key = node.nullid |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
111 revs = sorted(revs) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
112 if revs: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
113 s = hashlib.sha1() |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
114 for rev in revs: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
115 s.update('%s;' % rev) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
116 key = s.digest() |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
117 return key |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
118 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
119 # needed to prevent reference used for 'super()' call using in branchmap.py to |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
120 # no go into cycle. (yes, URG) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
121 _oldbranchmap = branchmap.branchcache |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
122 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
123 @contextlib.contextmanager |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
124 def oldbranchmap(): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
125 previous = branchmap.branchcache |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
126 try: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
127 branchmap.branchcache = _oldbranchmap |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
128 yield |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
129 finally: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
130 branchmap.branchcache = previous |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
131 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
132 _publiconly = set([ |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
133 'base', |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
134 'immutable', |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
135 ]) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
136 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
137 def mighttopic(repo): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
138 return hasminitopic(repo) and repo.filtername not in _publiconly |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
139 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
140 class _topiccache(branchmap.branchcache): # combine me with branchmap.branchcache |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
141 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
142 def __init__(self, *args, **kwargs): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
143 # super() call may fail otherwise |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
144 with oldbranchmap(): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
145 super(_topiccache, self).__init__(*args, **kwargs) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
146 self.phaseshash = None |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
147 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
148 def copy(self): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
149 """return an deep copy of the branchcache object""" |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
150 new = self.__class__(self, self.tipnode, self.tiprev, self.filteredhash, |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
151 self._closednodes) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
152 new.phaseshash = self.phaseshash |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
153 return new |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
154 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
155 def validfor(self, repo): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
156 """Is the cache content valid regarding a repo |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
157 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
158 - False when cached tipnode is unknown or if we detect a strip. |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
159 - True when cache is up to date or a subset of current repo.""" |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
160 valid = super(_topiccache, self).validfor(repo) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
161 if not valid: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
162 return False |
3518
d938808e31bc
serverminitopic: attempt to fix assertion for repoview in branchmap
Sean Farley <sean@farley.io>
parents:
3511
diff
changeset
|
163 elif self.phaseshash is None: |
3206
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
164 # phasehash at None means this is a branchmap |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
165 # coming from a public only set |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
166 return True |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
167 else: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
168 try: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
169 valid = self.phaseshash == _phaseshash(repo, self.tiprev) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
170 return valid |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
171 except IndexError: |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
172 return False |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
173 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
174 def write(self, repo): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
175 # we expect (hope) mutable set to be small enough to be that computing |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
176 # it all the time will be fast enough |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
177 if not mighttopic(repo): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
178 super(_topiccache, self).write(repo) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
179 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
180 def update(self, repo, revgen): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
181 """Given a branchhead cache, self, that may have extra nodes or be |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
182 missing heads, and a generator of nodes that are strictly a superset of |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
183 heads missing, this function updates self to be correct. |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
184 """ |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
185 super(_topiccache, self).update(repo, revgen) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
186 if mighttopic(repo): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
187 self.phaseshash = _phaseshash(repo, self.tiprev) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
188 |
3207
35c79686a635
serverminitopic: also avoid reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3206
diff
changeset
|
189 def wrapread(orig, repo): |
35c79686a635
serverminitopic: also avoid reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3206
diff
changeset
|
190 # Avoiding to write cache for filter where topic applies is a good step, |
35c79686a635
serverminitopic: also avoid reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3206
diff
changeset
|
191 # but we need to also avoid reading it. Existing branchmap cache might |
35c79686a635
serverminitopic: also avoid reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3206
diff
changeset
|
192 # exists before the turned the feature on. |
35c79686a635
serverminitopic: also avoid reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3206
diff
changeset
|
193 if mighttopic(repo): |
35c79686a635
serverminitopic: also avoid reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3206
diff
changeset
|
194 return None |
35c79686a635
serverminitopic: also avoid reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3206
diff
changeset
|
195 return orig(repo) |
35c79686a635
serverminitopic: also avoid reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3206
diff
changeset
|
196 |
3206
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
197 # advertise topic capabilities |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
198 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
199 def wireprotocaps(orig, repo, proto): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
200 caps = orig(repo, proto) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
201 if hasminitopic(repo): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
202 caps.append('topics') |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
203 return caps |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
204 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
205 # wrap the necessary bit |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
206 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
207 def wrapclass(container, oldname, new): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
208 old = getattr(container, oldname) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
209 if not issubclass(old, new): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
210 targetclass = new |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
211 # check if someone else already wrapped the class and handle that |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
212 if not issubclass(new, old): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
213 class targetclass(new, old): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
214 pass |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
215 setattr(container, oldname, targetclass) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
216 current = getattr(container, oldname) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
217 assert issubclass(current, new), (current, new, targetclass) |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
218 |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
219 def uisetup(ui): |
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
220 wrapclass(branchmap, 'branchcache', _topiccache) |
3207
35c79686a635
serverminitopic: also avoid reading
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3206
diff
changeset
|
221 extensions.wrapfunction(branchmap, 'read', wrapread) |
3206
3ccde4699cf0
topic: introduce a minimal extensions to enable topic on the server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
222 extensions.wrapfunction(wireproto, '_capabilities', wireprotocaps) |
3651
fa15068a9945
serverminitopic: wrap context.changectx.branch instead of context.changectx
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3518
diff
changeset
|
223 extensions.wrapfunction(context.changectx, 'branch', topicbranch) |