author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
Wed, 08 Mar 2017 15:35:16 -0800 | |
changeset 2060 | cbdb68189432 |
parent 2050 | 604ecce27969 |
child 2061 | 302aa8bbb3af |
permissions | -rw-r--r-- |
660
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
1 |
'''enable experimental obsolescence feature of Mercurial |
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
2 |
|
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
3 |
OBSOLESCENCE IS AN EXPERIMENTAL FEATURE MAKE SURE YOU UNDERSTOOD THE INVOLVED |
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
4 |
CONCEPT BEFORE USING IT. |
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
5 |
|
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
6 |
/!\ THIS EXTENSION IS INTENDED FOR SERVER SIDE ONLY USAGE /!\ |
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
7 |
|
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
8 |
For client side usages it is recommended to use the evolve extension for |
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
9 |
improved user interface.''' |
e6e47c432ffd
hgext: add a simpler extension to enable obsolete on server
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
10 |
|
2047
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
11 |
from __future__ import absolute_import |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
12 |
|
1713
00612a019547
evolve: use hashlib to compute sha1 hashes
Jeroen Vaelen <jeroen@fb.com>
parents:
1548
diff
changeset
|
13 |
import hashlib |
852
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
14 |
import struct |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
15 |
from cStringIO import StringIO |
2047
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
16 |
import sys |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
17 |
import os |
1837
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
18 |
|
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
19 |
from mercurial import ( |
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
20 |
error, |
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
21 |
exchange, |
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
22 |
extensions, |
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
23 |
localrepo, |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
24 |
lock as lockmod, |
1837
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
25 |
node, |
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
26 |
obsolete, |
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
27 |
util, |
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
28 |
wireproto |
c8b07459c9bb
serveronly: clean up imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1808
diff
changeset
|
29 |
) |
869
e9eeef0d07ec
exchange: enforce permission on new wireprotocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
866
diff
changeset
|
30 |
from mercurial.hgweb import hgweb_mod |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
31 |
from mercurial.i18n import _ |
852
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
32 |
_pack = struct.pack |
822
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
33 |
|
963
f80e8e3c3726
simple4server: backport the bundle2 exchange
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
888
diff
changeset
|
34 |
gboptslist = gboptsmap = None |
f80e8e3c3726
simple4server: backport the bundle2 exchange
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
888
diff
changeset
|
35 |
try: |
f80e8e3c3726
simple4server: backport the bundle2 exchange
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
888
diff
changeset
|
36 |
gboptslist = getattr(wireproto, 'gboptslist', None) |
f80e8e3c3726
simple4server: backport the bundle2 exchange
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
888
diff
changeset
|
37 |
gboptsmap = getattr(wireproto, 'gboptsmap', None) |
f80e8e3c3726
simple4server: backport the bundle2 exchange
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
888
diff
changeset
|
38 |
except (ImportError, AttributeError): |
1548
4229d1dae5ad
check-code: make simple4server.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1331
diff
changeset
|
39 |
raise error.Abort('Your Mercurial is too old for this version of Evolve\n' |
4229d1dae5ad
check-code: make simple4server.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1331
diff
changeset
|
40 |
'requires version 3.0.1 or above') |
963
f80e8e3c3726
simple4server: backport the bundle2 exchange
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
888
diff
changeset
|
41 |
|
882
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
42 |
# Start of simple4server specific content |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
43 |
|
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
44 |
from mercurial import pushkey |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
45 |
|
2047
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
46 |
try: |
2050
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
47 |
from . import ( |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
48 |
metadata, |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
49 |
utility, |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
50 |
) |
2047
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
51 |
except ValueError as exc: |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
52 |
if exc.message != 'Attempted relative import in non-package': |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
53 |
raise |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
54 |
# extension imported using direct path |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
55 |
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) |
2050
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
56 |
from evolve import ( |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
57 |
metadata, |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
58 |
utility, |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
59 |
) |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
60 |
|
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
61 |
|
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
62 |
__version__ = metadata.__version__ |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
63 |
testedwith = metadata.testedwith |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
64 |
minimumhgversion = metadata.minimumhgversion |
604ecce27969
serveronly: use the same extensions metadata than evolve
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
65 |
buglink = metadata.buglink |
2047
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
66 |
|
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
67 |
obsexcmsg = utility.obsexcmsg |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
68 |
|
882
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
69 |
# specific content also include the wrapping int extsetup |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
70 |
def _nslist(orig, repo): |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
71 |
rep = orig(repo) |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
72 |
if not repo.ui.configbool('__temporary__', 'advertiseobsolete', True): |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
73 |
rep.pop('obsolete') |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
74 |
return rep |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
75 |
|
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
76 |
# End of simple4server specific content |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
77 |
|
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
78 |
|
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
79 |
def _pushobsmarkers(repo, data): |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
80 |
tr = lock = None |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
81 |
try: |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
82 |
lock = repo.lock() |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
83 |
tr = repo.transaction('pushkey: obsolete markers') |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
84 |
new = repo.obsstore.mergemarkers(tr, data) |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
85 |
if new is not None: |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
86 |
obsexcmsg(repo.ui, "%i obsolescence markers added\n" % new, True) |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
87 |
tr.close() |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
88 |
finally: |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
89 |
lockmod.release(tr, lock) |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
90 |
repo.hook('evolve_pushobsmarkers') |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
91 |
|
822
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
92 |
def srv_pushobsmarkers(repo, proto): |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
93 |
"""wireprotocol command""" |
822
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
94 |
fp = StringIO() |
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
95 |
proto.redirect() |
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
96 |
proto.getfile(fp) |
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
97 |
data = fp.getvalue() |
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
98 |
fp.close() |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
99 |
_pushobsmarkers(repo, data) |
822
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
100 |
return wireproto.pushres(0) |
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
101 |
|
852
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
102 |
def _getobsmarkersstream(repo, heads=None, common=None): |
874
19a7ed6384a9
simple4server: add origin and documentation to most function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
873
diff
changeset
|
103 |
"""Get a binary stream for all markers relevant to `::<heads> - ::<common>` |
19a7ed6384a9
simple4server: add origin and documentation to most function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
873
diff
changeset
|
104 |
""" |
852
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
105 |
revset = '' |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
106 |
args = [] |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
107 |
repo = repo.unfiltered() |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
108 |
if heads is None: |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
109 |
revset = 'all()' |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
110 |
elif heads: |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
111 |
revset += "(::%ln)" |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
112 |
args.append(heads) |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
113 |
else: |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
114 |
assert False, 'pulling no heads?' |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
115 |
if common: |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
116 |
revset += ' - (::%ln)' |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
117 |
args.append(common) |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
118 |
nodes = [c.node() for c in repo.set(revset, *args)] |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
119 |
markers = repo.obsstore.relevantmarkers(nodes) |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
120 |
obsdata = StringIO() |
1091
236a8e81551e
compat: use in-core encodemarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1090
diff
changeset
|
121 |
for chunk in obsolete.encodemarkers(markers, True): |
236a8e81551e
compat: use in-core encodemarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1090
diff
changeset
|
122 |
obsdata.write(chunk) |
852
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
123 |
obsdata.seek(0) |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
124 |
return obsdata |
aa722de36179
exchange: fix pulling from simple for server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
826
diff
changeset
|
125 |
|
1778
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
126 |
# The wireproto.streamres API changed, handling chunking and compression |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
127 |
# directly. Handle either case. |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
128 |
if util.safehasattr(wireproto.abstractserverproto, 'groupchunks'): |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
129 |
# We need to handle chunking and compression directly |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
130 |
def streamres(d, proto): |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
131 |
return wireproto.streamres(proto.groupchunks(d)) |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
132 |
else: |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
133 |
# Leave chunking and compression to streamres |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
134 |
def streamres(d, proto): |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
135 |
return wireproto.streamres(reader=d, v1compressible=True) |
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
136 |
|
826
bee5e1105e6c
exchange: add the pullmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
822
diff
changeset
|
137 |
def srv_pullobsmarkers(repo, proto, others): |
874
19a7ed6384a9
simple4server: add origin and documentation to most function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
873
diff
changeset
|
138 |
"""serves a binary stream of markers. |
19a7ed6384a9
simple4server: add origin and documentation to most function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
873
diff
changeset
|
139 |
|
19a7ed6384a9
simple4server: add origin and documentation to most function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
873
diff
changeset
|
140 |
Serves relevant to changeset between heads and common. The stream is prefix |
19a7ed6384a9
simple4server: add origin and documentation to most function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
873
diff
changeset
|
141 |
by a -string- representation of an integer. This integer is the size of the |
19a7ed6384a9
simple4server: add origin and documentation to most function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
873
diff
changeset
|
142 |
stream.""" |
826
bee5e1105e6c
exchange: add the pullmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
822
diff
changeset
|
143 |
opts = wireproto.options('', ['heads', 'common'], others) |
bee5e1105e6c
exchange: add the pullmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
822
diff
changeset
|
144 |
for k, v in opts.iteritems(): |
bee5e1105e6c
exchange: add the pullmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
822
diff
changeset
|
145 |
if k in ('heads', 'common'): |
bee5e1105e6c
exchange: add the pullmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
822
diff
changeset
|
146 |
opts[k] = wireproto.decodelist(v) |
bee5e1105e6c
exchange: add the pullmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
822
diff
changeset
|
147 |
obsdata = _getobsmarkersstream(repo, **opts) |
877
cf35f38d6a10
exchange: fix changeset pulling over http
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
876
diff
changeset
|
148 |
finaldata = StringIO() |
cf35f38d6a10
exchange: fix changeset pulling over http
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
876
diff
changeset
|
149 |
obsdata = obsdata.getvalue() |
cf35f38d6a10
exchange: fix changeset pulling over http
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
876
diff
changeset
|
150 |
finaldata.write('%20i' % len(obsdata)) |
cf35f38d6a10
exchange: fix changeset pulling over http
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
876
diff
changeset
|
151 |
finaldata.write(obsdata) |
cf35f38d6a10
exchange: fix changeset pulling over http
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
876
diff
changeset
|
152 |
finaldata.seek(0) |
1778
924b76a51d18
wireproto: chunking and compression is forthwith to be handled by hgweb
Martijn Pieters <mjpieters@fb.com>
parents:
1757
diff
changeset
|
153 |
return streamres(finaldata, proto) |
826
bee5e1105e6c
exchange: add the pullmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
822
diff
changeset
|
154 |
|
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
155 |
def _obsrelsethashtreefm0(repo): |
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
156 |
return _obsrelsethashtree(repo, obsolete._fm0encodeonemarker) |
874
19a7ed6384a9
simple4server: add origin and documentation to most function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
873
diff
changeset
|
157 |
|
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
158 |
def _obsrelsethashtreefm1(repo): |
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
159 |
return _obsrelsethashtree(repo, obsolete._fm1encodeonemarker) |
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
160 |
|
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
161 |
def _obsrelsethashtree(repo, encodeonemarker): |
866
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
162 |
cache = [] |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
163 |
unfi = repo.unfiltered() |
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
164 |
markercache = {} |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
165 |
repo.ui.progress(_("preparing locally"), 0, total=len(unfi)) |
866
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
166 |
for i in unfi: |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
167 |
ctx = unfi[i] |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
168 |
entry = 0 |
1713
00612a019547
evolve: use hashlib to compute sha1 hashes
Jeroen Vaelen <jeroen@fb.com>
parents:
1548
diff
changeset
|
169 |
sha = hashlib.sha1() |
866
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
170 |
# add data from p1 |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
171 |
for p in ctx.parents(): |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
172 |
p = p.rev() |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
173 |
if p < 0: |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
174 |
p = node.nullid |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
175 |
else: |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
176 |
p = cache[p][1] |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
177 |
if p != node.nullid: |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
178 |
entry += 1 |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
179 |
sha.update(p) |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
180 |
tmarkers = repo.obsstore.relevantmarkers([ctx.node()]) |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
181 |
if tmarkers: |
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
182 |
bmarkers = [] |
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
183 |
for m in tmarkers: |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2026
diff
changeset
|
184 |
if m not in markercache: |
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
185 |
markercache[m] = encodeonemarker(m) |
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
186 |
bmarkers.append(markercache[m]) |
866
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
187 |
bmarkers.sort() |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
188 |
for m in bmarkers: |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
189 |
entry += 1 |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
190 |
sha.update(m) |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
191 |
if entry: |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
192 |
cache.append((ctx.node(), sha.digest())) |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
193 |
else: |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
194 |
cache.append((ctx.node(), node.nullid)) |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
195 |
repo.ui.progress(_("preparing locally"), i, total=len(unfi)) |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
196 |
repo.ui.progress(_("preparing locally"), None) |
866
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
197 |
return cache |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
198 |
|
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
199 |
def _obshash(repo, nodes, version=0): |
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
200 |
if version == 0: |
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
201 |
hashs = _obsrelsethashtreefm0(repo) |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2026
diff
changeset
|
202 |
elif version == 1: |
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
203 |
hashs = _obsrelsethashtreefm1(repo) |
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
204 |
else: |
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
205 |
assert False |
866
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
206 |
nm = repo.changelog.nodemap |
1073
f15f02007a0b
obshash: resist to unknown revision during discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1067
diff
changeset
|
207 |
revs = [nm.get(n) for n in nodes] |
2026
851265d5adc2
serveronly: fix undefined variable
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1838
diff
changeset
|
208 |
return [r is None and node.nullid or hashs[r][1] for r in revs] |
866
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
209 |
|
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
210 |
def srv_obshash(repo, proto, nodes): |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
211 |
return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes))) |
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
212 |
|
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
213 |
def srv_obshash1(repo, proto, nodes): |
1548
4229d1dae5ad
check-code: make simple4server.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1331
diff
changeset
|
214 |
return wireproto.encodelist(_obshash(repo, wireproto.decodelist(nodes), |
4229d1dae5ad
check-code: make simple4server.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1331
diff
changeset
|
215 |
version=1)) |
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
216 |
|
822
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
217 |
def capabilities(orig, repo, proto): |
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
218 |
"""wrapper to advertise new capability""" |
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
219 |
caps = orig(repo, proto) |
884
4ae115cf3efd
sinmple4server: advertise new cap only when advertising obsolescence
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
882
diff
changeset
|
220 |
advertise = repo.ui.configbool('__temporary__', 'advertiseobsolete', True) |
1215
004e21b8d67b
server4simple: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents:
1097
diff
changeset
|
221 |
if obsolete.isenabled(repo, obsolete.exchangeopt) and advertise: |
2060
cbdb68189432
capabilities: properly sort capabilities after updating them
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2050
diff
changeset
|
222 |
caps = caps.split() |
cbdb68189432
capabilities: properly sort capabilities after updating them
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2050
diff
changeset
|
223 |
caps.append('_evoext_pushobsmarkers_0') |
cbdb68189432
capabilities: properly sort capabilities after updating them
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2050
diff
changeset
|
224 |
caps.append('_evoext_pullobsmarkers_0') |
cbdb68189432
capabilities: properly sort capabilities after updating them
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2050
diff
changeset
|
225 |
caps.append('_evoext_obshash_0') |
cbdb68189432
capabilities: properly sort capabilities after updating them
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2050
diff
changeset
|
226 |
caps.append('_evoext_obshash_1') |
cbdb68189432
capabilities: properly sort capabilities after updating them
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2050
diff
changeset
|
227 |
caps.append('_evoext_getbundle_obscommon') |
cbdb68189432
capabilities: properly sort capabilities after updating them
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2050
diff
changeset
|
228 |
caps.sort() |
cbdb68189432
capabilities: properly sort capabilities after updating them
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2050
diff
changeset
|
229 |
return ' '.join(caps) |
822
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
230 |
|
1253
d03583da89c4
pull: fix bundle2 part generation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1252
diff
changeset
|
231 |
def _getbundleobsmarkerpart(orig, bundler, repo, source, **kwargs): |
1097
580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1091
diff
changeset
|
232 |
if 'evo_obscommon' not in kwargs: |
1253
d03583da89c4
pull: fix bundle2 part generation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1252
diff
changeset
|
233 |
return orig(bundler, repo, source, **kwargs) |
d03583da89c4
pull: fix bundle2 part generation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1252
diff
changeset
|
234 |
|
d03583da89c4
pull: fix bundle2 part generation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1252
diff
changeset
|
235 |
heads = kwargs.get('heads') |
1097
580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1091
diff
changeset
|
236 |
if kwargs.get('obsmarkers', False): |
580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1091
diff
changeset
|
237 |
if heads is None: |
580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1091
diff
changeset
|
238 |
heads = repo.heads() |
580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1091
diff
changeset
|
239 |
obscommon = kwargs.get('evo_obscommon', ()) |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
240 |
assert obscommon |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
241 |
obsset = repo.unfiltered().set('::%ln - ::%ln', heads, obscommon) |
1097
580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1091
diff
changeset
|
242 |
subset = [c.node() for c in obsset] |
580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1091
diff
changeset
|
243 |
markers = repo.obsstore.relevantmarkers(subset) |
580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1091
diff
changeset
|
244 |
exchange.buildobsmarkerspart(bundler, markers) |
963
f80e8e3c3726
simple4server: backport the bundle2 exchange
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
888
diff
changeset
|
245 |
|
822
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
246 |
def extsetup(ui): |
963
f80e8e3c3726
simple4server: backport the bundle2 exchange
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
888
diff
changeset
|
247 |
localrepo.moderncaps.add('_evoext_b2x_obsmarkers_0') |
1097
580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1091
diff
changeset
|
248 |
gboptsmap['evo_obscommon'] = 'nodes' |
869
e9eeef0d07ec
exchange: enforce permission on new wireprotocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
866
diff
changeset
|
249 |
hgweb_mod.perms['evoext_pushobsmarkers_0'] = 'push' |
e9eeef0d07ec
exchange: enforce permission on new wireprotocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
866
diff
changeset
|
250 |
hgweb_mod.perms['evoext_pullobsmarkers_0'] = 'pull' |
e9eeef0d07ec
exchange: enforce permission on new wireprotocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
866
diff
changeset
|
251 |
hgweb_mod.perms['evoext_obshash'] = 'pull' |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1837
diff
changeset
|
252 |
hgweb_mod.perms['evoext_obshash1'] = 'pull' |
822
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
253 |
wireproto.commands['evoext_pushobsmarkers_0'] = (srv_pushobsmarkers, '') |
826
bee5e1105e6c
exchange: add the pullmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
822
diff
changeset
|
254 |
wireproto.commands['evoext_pullobsmarkers_0'] = (srv_pullobsmarkers, '*') |
875
10867a8e27c6
exchange: properly wrap wireprotocol capabilities
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
874
diff
changeset
|
255 |
# wrap module content |
1253
d03583da89c4
pull: fix bundle2 part generation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1252
diff
changeset
|
256 |
origfunc = exchange.getbundle2partsmapping['obsmarkers'] |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2026
diff
changeset
|
257 |
|
1253
d03583da89c4
pull: fix bundle2 part generation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1252
diff
changeset
|
258 |
def newfunc(*args, **kwargs): |
d03583da89c4
pull: fix bundle2 part generation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1252
diff
changeset
|
259 |
return _getbundleobsmarkerpart(origfunc, *args, **kwargs) |
d03583da89c4
pull: fix bundle2 part generation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1252
diff
changeset
|
260 |
exchange.getbundle2partsmapping['obsmarkers'] = newfunc |
822
5f5d269278e9
exchange: add the pushmarker wireproto command to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
660
diff
changeset
|
261 |
extensions.wrapfunction(wireproto, 'capabilities', capabilities) |
875
10867a8e27c6
exchange: properly wrap wireprotocol capabilities
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
874
diff
changeset
|
262 |
# wrap command content |
10867a8e27c6
exchange: properly wrap wireprotocol capabilities
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
874
diff
changeset
|
263 |
oldcap, args = wireproto.commands['capabilities'] |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2026
diff
changeset
|
264 |
|
875
10867a8e27c6
exchange: properly wrap wireprotocol capabilities
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
874
diff
changeset
|
265 |
def newcap(repo, proto): |
10867a8e27c6
exchange: properly wrap wireprotocol capabilities
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
874
diff
changeset
|
266 |
return capabilities(oldcap, repo, proto) |
10867a8e27c6
exchange: properly wrap wireprotocol capabilities
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
874
diff
changeset
|
267 |
wireproto.commands['capabilities'] = (newcap, args) |
866
c6dc5822e640
simple4server: add the wireproto command for obsolescence markers discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
852
diff
changeset
|
268 |
wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes') |
1245
580a8f5ea462
discovery: port the new hashing version to simple4server
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1097
diff
changeset
|
269 |
wireproto.commands['evoext_obshash1'] = (srv_obshash1, 'nodes') |
882
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
270 |
# specific simple4server content |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
271 |
extensions.wrapfunction(pushkey, '_nslist', _nslist) |
48804a8d7472
simple4server: option to advertise obsolescence support
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
878
diff
changeset
|
272 |
pushkey._namespaces['namespaces'] = (lambda *x: False, pushkey._nslist) |
963
f80e8e3c3726
simple4server: backport the bundle2 exchange
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
888
diff
changeset
|
273 |
|
1215
004e21b8d67b
server4simple: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents:
1097
diff
changeset
|
274 |
def reposetup(ui, repo): |
004e21b8d67b
server4simple: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents:
1097
diff
changeset
|
275 |
evolveopts = ui.configlist('experimental', 'evolution') |
004e21b8d67b
server4simple: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents:
1097
diff
changeset
|
276 |
if not evolveopts: |
004e21b8d67b
server4simple: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents:
1097
diff
changeset
|
277 |
evolveopts = 'all' |
004e21b8d67b
server4simple: remove use of obsolete._enabled
Durham Goode <durham@fb.com>
parents:
1097
diff
changeset
|
278 |
ui.setconfig('experimental', 'evolution', evolveopts) |