author | Anton Shestakov <av6@dwimlabs.net> |
Thu, 23 Jan 2020 17:40:52 +0700 | |
branch | mercurial-5.0 |
changeset 5087 | 5d76b320420e |
parent 4814 | 48b30ff742cb |
child 4907 | 0ce6510b45ab |
permissions | -rw-r--r-- |
2053
f3765c4a352a
exchange: rename the module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
1 |
# Code dedicated to the exchange of obsolescence markers |
f3765c4a352a
exchange: rename the module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
2 |
# |
f3765c4a352a
exchange: rename the module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
3 |
# Copyright 2017 Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
f3765c4a352a
exchange: rename the module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
4 |
# |
f3765c4a352a
exchange: rename the module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
f3765c4a352a
exchange: rename the module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
6 |
# GNU General Public License version 2 or any later version. |
1414
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
7 |
|
2044
d31ad31e456b
exchange: move code related to exchange into a 'evolve.exchange' submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2043
diff
changeset
|
8 |
from __future__ import absolute_import |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
9 |
|
1678 | 10 |
try: |
4405
8b91088944ca
obsexchange: avoid importing io/StringIO module with a different name
Anton Shestakov <av6@dwimlabs.net>
parents:
4324
diff
changeset
|
11 |
from StringIO import StringIO |
1678 | 12 |
except ImportError: |
4405
8b91088944ca
obsexchange: avoid importing io/StringIO module with a different name
Anton Shestakov <av6@dwimlabs.net>
parents:
4324
diff
changeset
|
13 |
from io import StringIO |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
14 |
|
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
15 |
from mercurial import ( |
2523
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
16 |
bundle2, |
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
17 |
error, |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
18 |
exchange, |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
19 |
extensions, |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
20 |
lock as lockmod, |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
21 |
node, |
2044
d31ad31e456b
exchange: move code related to exchange into a 'evolve.exchange' submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2043
diff
changeset
|
22 |
obsolete, |
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
23 |
pushkey, |
2044
d31ad31e456b
exchange: move code related to exchange into a 'evolve.exchange' submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2043
diff
changeset
|
24 |
util, |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
25 |
) |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
26 |
|
3173
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
27 |
from mercurial.hgweb import common as hgwebcommon |
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
28 |
|
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
29 |
from . import ( |
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
30 |
exthelper, |
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:
2044
diff
changeset
|
31 |
utility, |
2054
f9d65d24b9f9
discovery: split discovery related code in 'obsdiscovery'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2053
diff
changeset
|
32 |
obsdiscovery, |
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
33 |
) |
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
34 |
|
2044
d31ad31e456b
exchange: move code related to exchange into a 'evolve.exchange' submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2043
diff
changeset
|
35 |
eh = exthelper.exthelper() |
2275
fff7a678f659
extension: simplify the extensions helper hierarchy
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2117
diff
changeset
|
36 |
eh.merge(obsdiscovery.eh) |
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:
2044
diff
changeset
|
37 |
obsexcmsg = utility.obsexcmsg |
2054
f9d65d24b9f9
discovery: split discovery related code in 'obsdiscovery'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2053
diff
changeset
|
38 |
obsexcprg = utility.obsexcprg |
816
03587920dfd9
evolve: add relevant marker exchange machinery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
811
diff
changeset
|
39 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
40 |
eh.configitem(b'experimental', b'verbose-obsolescence-exchange', False) |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
41 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
42 |
_bestformat = max(obsolete.formats.keys()) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
43 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
44 |
##################################################### |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
45 |
### Support for subset specification in getbundle ### |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
46 |
##################################################### |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
47 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
48 |
# Adds support for the 'evo_obscommon' argument to getbundle This argument use |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
49 |
# the data recovered from the discovery to request only a subpart of the |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
50 |
# obsolete subtree. |
2058
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
51 |
|
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
52 |
@eh.uisetup |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
53 |
def addgetbundleargs(self): |
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
54 |
try: |
3709
aaa6adbbb47a
compat: handle different `ui.edit` signature with Mercurial 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3708
diff
changeset
|
55 |
from mercurial import wireprototypes |
aaa6adbbb47a
compat: handle different `ui.edit` signature with Mercurial 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3708
diff
changeset
|
56 |
gboptsmap = wireprototypes.GETBUNDLE_ARGUMENTS |
aaa6adbbb47a
compat: handle different `ui.edit` signature with Mercurial 4.3
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3708
diff
changeset
|
57 |
except (ImportError, AttributeError): |
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
58 |
# <= hg 4.5 |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
59 |
from mercurial import wireproto |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
60 |
gboptsmap = wireproto.gboptsmap |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
61 |
gboptsmap[b'evo_obscommon'] = b'nodes' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
62 |
gboptsmap[b'evo_missing_nodes'] = b'nodes' |
2058
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
63 |
|
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
64 |
@eh.wrapfunction(exchange, '_pullbundle2extraprepare') |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
65 |
def _addobscommontob2pull(orig, pullop, kwargs): |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
66 |
ret = orig(pullop, kwargs) |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
67 |
ui = pullop.repo.ui |
4803
88472e743c64
python3: add byte prefix for objects that look like kwargs but aren't
Raphaël Gomès <rgomes@octobus.net>
parents:
4714
diff
changeset
|
68 |
if (b'obsmarkers' in kwargs |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
69 |
and pullop.remote.capable(b'_evoext_getbundle_obscommon')): |
2076
5c6d05c34ba4
obsdiscovery: organize the code by category
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2075
diff
changeset
|
70 |
boundaries = obsdiscovery.buildpullobsmarkersboundaries(pullop) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
71 |
if b'common' in boundaries: |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
72 |
common = boundaries[b'common'] |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
73 |
if common != pullop.common: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
74 |
obsexcmsg(ui, b'request obsmarkers for some common nodes\n') |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
75 |
if common != [node.nullid]: |
4803
88472e743c64
python3: add byte prefix for objects that look like kwargs but aren't
Raphaël Gomès <rgomes@octobus.net>
parents:
4714
diff
changeset
|
76 |
kwargs[b'evo_obscommon'] = common |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
77 |
elif b'missing' in boundaries: |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
78 |
missing = boundaries[b'missing'] |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
79 |
if missing: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
80 |
obsexcmsg(ui, b'request obsmarkers for %d common nodes\n' |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
81 |
% len(missing)) |
4803
88472e743c64
python3: add byte prefix for objects that look like kwargs but aren't
Raphaël Gomès <rgomes@octobus.net>
parents:
4714
diff
changeset
|
82 |
kwargs[b'evo_missing_nodes'] = missing |
2058
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
83 |
return ret |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
84 |
|
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
85 |
def _getbundleobsmarkerpart(orig, bundler, repo, source, **kwargs): |
4804
079dbf36e884
python3: add raw prefix in cases harder to analyze at the token level
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
86 |
if not (set([r'evo_obscommon', r'evo_missing_nodes']) & set(kwargs)): |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
87 |
return orig(bundler, repo, source, **kwargs) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
88 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
89 |
if kwargs.get('obsmarkers', False): |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
90 |
heads = kwargs.get('heads') |
4804
079dbf36e884
python3: add raw prefix in cases harder to analyze at the token level
Raphaël Gomès <rgomes@octobus.net>
parents:
4803
diff
changeset
|
91 |
if r'evo_obscommon' in kwargs: |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
92 |
if heads is None: |
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
93 |
heads = repo.heads() |
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
94 |
obscommon = kwargs.get('evo_obscommon', ()) |
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
95 |
assert obscommon |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
96 |
obsset = repo.unfiltered().set(b'::%ln - ::%ln', heads, obscommon) |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
97 |
subset = [c.node() for c in obsset] |
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
98 |
else: |
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
99 |
common = kwargs.get('common') |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
100 |
subset = [c.node() for c in repo.unfiltered().set(b'only(%ln, %ln)', heads, common)] |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
101 |
subset += kwargs['evo_missing_nodes'] |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
102 |
markers = repo.obsstore.relevantmarkers(subset) |
2523
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
103 |
if util.safehasattr(bundle2, 'buildobsmarkerspart'): |
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
104 |
bundle2.buildobsmarkerspart(bundler, markers) |
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
105 |
else: |
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
106 |
exchange.buildobsmarkerspart(bundler, markers) |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
107 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
108 |
# manual wrap up in extsetup because of the wireproto.commands mapping |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
109 |
def _obscommon_capabilities(orig, repo, proto): |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
110 |
"""wrapper to advertise new capability""" |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
111 |
caps = orig(repo, proto) |
2075
a7c0685ba6d9
evolution: drop the old __temporary__.advertiseobsolete option
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2063
diff
changeset
|
112 |
if obsolete.isenabled(repo, obsolete.exchangeopt): |
3500
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
113 |
|
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
114 |
# Compat hg 4.6+ (2f7290555c96) |
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
115 |
bytesresponse = False |
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
116 |
if util.safehasattr(caps, 'data'): |
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
117 |
bytesresponse = True |
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
118 |
caps = caps.data |
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
119 |
|
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
120 |
caps = caps.split() |
3500
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
121 |
caps.append(b'_evoext_getbundle_obscommon') |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
122 |
caps.sort() |
3500
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
123 |
caps = b' '.join(caps) |
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
124 |
|
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
125 |
# Compat hg 4.6+ (2f7290555c96) |
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
126 |
if bytesresponse: |
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
127 |
from mercurial import wireprototypes |
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
128 |
caps = wireprototypes.bytesresponse(caps) |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
129 |
return caps |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
130 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
131 |
@eh.extsetup |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
132 |
def extsetup_obscommon(ui): |
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
133 |
try: |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
134 |
from mercurial import wireprototypes, wireprotov1server |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
135 |
gboptsmap = wireprototypes.GETBUNDLE_ARGUMENTS |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
136 |
except (ImportError, AttributeError): |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
137 |
# <= hg 4.5 |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
138 |
from mercurial import wireproto |
3669
0407965ae79e
compat: deal with change in the wireproto module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3576
diff
changeset
|
139 |
gboptsmap = wireproto.gboptsmap |
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
140 |
wireprotov1server = wireproto |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
141 |
gboptsmap[b'evo_obscommon'] = b'nodes' |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
142 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
143 |
# wrap module content |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
144 |
origfunc = exchange.getbundle2partsmapping[b'obsmarkers'] |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
145 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
146 |
def newfunc(*args, **kwargs): |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
147 |
return _getbundleobsmarkerpart(origfunc, *args, **kwargs) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
148 |
exchange.getbundle2partsmapping[b'obsmarkers'] = newfunc |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
149 |
|
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
150 |
extensions.wrapfunction(wireprotov1server, 'capabilities', |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
151 |
_obscommon_capabilities) |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
152 |
# wrap command content |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
153 |
oldcap, args = wireprotov1server.commands[b'capabilities'] |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
154 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
155 |
def newcap(repo, proto): |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
156 |
return _obscommon_capabilities(oldcap, repo, proto) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
157 |
wireprotov1server.commands[b'capabilities'] = (newcap, args) |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
158 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
159 |
def _pushobsmarkers(repo, data): |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
160 |
tr = lock = None |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
161 |
try: |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
162 |
lock = repo.lock() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
163 |
tr = repo.transaction(b'pushkey: obsolete markers') |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
164 |
new = repo.obsstore.mergemarkers(tr, data) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
165 |
if new is not None: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
166 |
obsexcmsg(repo.ui, b"%i obsolescence markers added\n" % new, True) |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
167 |
tr.close() |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
168 |
finally: |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
169 |
lockmod.release(tr, lock) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
170 |
repo.hook(b'evolve_pushobsmarkers') |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
171 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
172 |
def srv_pushobsmarkers(repo, proto): |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
173 |
"""wireprotocol command""" |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
174 |
fp = StringIO() |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
175 |
proto.redirect() |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
176 |
proto.getfile(fp) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
177 |
data = fp.getvalue() |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
178 |
fp.close() |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
179 |
_pushobsmarkers(repo, data) |
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
180 |
try: |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
181 |
from mercurial import wireprototypes |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
182 |
wireprototypes.pushres # force demandimport |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
183 |
except (ImportError, AttributeError): |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
184 |
from mercurial import wireproto as wireprototypes |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
185 |
return wireprototypes.pushres(0) |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
186 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
187 |
def _getobsmarkersstream(repo, heads=None, common=None): |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
188 |
"""Get a binary stream for all markers relevant to `::<heads> - ::<common>` |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
189 |
""" |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
190 |
revset = b'' |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
191 |
args = [] |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
192 |
repo = repo.unfiltered() |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
193 |
if heads is None: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
194 |
revset = b'all()' |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
195 |
elif heads: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
196 |
revset += b"(::%ln)" |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
197 |
args.append(heads) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
198 |
else: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
199 |
assert False, b'pulling no heads?' |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
200 |
if common: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
201 |
revset += b' - (::%ln)' |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
202 |
args.append(common) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
203 |
nodes = [c.node() for c in repo.set(revset, *args)] |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
204 |
markers = repo.obsstore.relevantmarkers(nodes) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
205 |
obsdata = StringIO() |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
206 |
for chunk in obsolete.encodemarkers(markers, True): |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
207 |
obsdata.write(chunk) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
208 |
obsdata.seek(0) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
209 |
return obsdata |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
210 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
211 |
def srv_pullobsmarkers(repo, proto, others): |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
212 |
"""serves a binary stream of markers. |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
213 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
214 |
Serves relevant to changeset between heads and common. The stream is prefix |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
215 |
by a -string- representation of an integer. This integer is the size of the |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
216 |
stream.""" |
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
217 |
try: |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
218 |
from mercurial import wireprototypes, wireprotov1server |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
219 |
wireprototypes.pushres # force demandimport |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
220 |
except (ImportError, AttributeError): |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
221 |
from mercurial import wireproto as wireprototypes |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
222 |
wireprotov1server = wireprototypes |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
223 |
opts = wireprotov1server.options(b'', [b'heads', b'common'], others) |
4714
c51fc0ae7a7e
py3: switch from iteritems() to items()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4405
diff
changeset
|
224 |
for k, v in opts.items(): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
225 |
if k in (b'heads', b'common'): |
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
226 |
opts[k] = wireprototypes.decodelist(v) |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
227 |
obsdata = _getobsmarkersstream(repo, **opts) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
228 |
finaldata = StringIO() |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
229 |
obsdata = obsdata.getvalue() |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
230 |
finaldata.write(b'%20i' % len(obsdata)) |
2061
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
231 |
finaldata.write(obsdata) |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
232 |
finaldata.seek(0) |
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
233 |
return wireprototypes.streamres(reader=finaldata, v1compressible=True) |
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
234 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
235 |
abortmsg = b"won't exchange obsmarkers through pushkey" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
236 |
hint = b"upgrade your client or server to use the bundle2 protocol" |
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
237 |
|
3173
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
238 |
class HTTPCompatibleAbort(hgwebcommon.ErrorResponse, error.Abort): |
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
239 |
def __init__(self, message, code, hint=None): |
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
240 |
# initialisation of each class is a bit messy. |
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
241 |
# We explicitly do the dispatch |
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
242 |
hgwebcommon.ErrorResponse.__init__(self, 410, message) |
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
243 |
error.Abort.__init__(self, message, hint=hint) |
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
244 |
|
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
245 |
def forbidpushkey(repo=None, key=None, old=None, new=None): |
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
246 |
"""prevent exchange through pushkey""" |
3173
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
247 |
err = HTTPCompatibleAbort(abortmsg, 410, hint=hint) |
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
248 |
raise err |
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
249 |
|
3172
aed2cac9edc3
wireproto: avoid exposing pushkey abort for server without evolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3153
diff
changeset
|
250 |
def forbidlistkey(repo=None, key=None, old=None, new=None): |
aed2cac9edc3
wireproto: avoid exposing pushkey abort for server without evolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3153
diff
changeset
|
251 |
"""prevent exchange through pushkey""" |
aed2cac9edc3
wireproto: avoid exposing pushkey abort for server without evolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3153
diff
changeset
|
252 |
if obsolete.isenabled(repo, obsolete.exchangeopt): |
3173
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
253 |
err = HTTPCompatibleAbort(abortmsg, 410, hint=hint) |
3afe20410b55
wireproto: gracefully fail on http when trying to use older pushkey method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3172
diff
changeset
|
254 |
raise err |
3172
aed2cac9edc3
wireproto: avoid exposing pushkey abort for server without evolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3153
diff
changeset
|
255 |
return {} |
aed2cac9edc3
wireproto: avoid exposing pushkey abort for server without evolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3153
diff
changeset
|
256 |
|
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
257 |
@eh.uisetup |
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
258 |
def setuppushkeyforbidding(ui): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
259 |
pushkey._namespaces[b'obsolete'] = (forbidpushkey, forbidlistkey) |