author | Anton Shestakov <av6@dwimlabs.net> |
Fri, 08 May 2020 22:50:09 +0800 | |
branch | mercurial-4.6 |
changeset 5368 | 844b1ad5b34b |
parent 5212 | 99123c3229b4 |
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 |
|
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
10 |
from mercurial import ( |
2523
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
11 |
bundle2, |
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
12 |
error, |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
13 |
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
|
14 |
extensions, |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
15 |
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
|
16 |
obsolete, |
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
17 |
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
|
18 |
util, |
5180
515d425c0a05
compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4907
diff
changeset
|
19 |
wireprototypes, |
515d425c0a05
compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4907
diff
changeset
|
20 |
wireprotov1server |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
21 |
) |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
22 |
|
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
|
23 |
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
|
24 |
|
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
25 |
from . import ( |
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
26 |
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
|
27 |
utility, |
2054
f9d65d24b9f9
discovery: split discovery related code in 'obsdiscovery'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2053
diff
changeset
|
28 |
obsdiscovery, |
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
29 |
) |
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
30 |
|
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
|
31 |
eh = exthelper.exthelper() |
2275
fff7a678f659
extension: simplify the extensions helper hierarchy
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2117
diff
changeset
|
32 |
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
|
33 |
obsexcmsg = utility.obsexcmsg |
816
03587920dfd9
evolve: add relevant marker exchange machinery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
811
diff
changeset
|
34 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
35 |
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
|
36 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
37 |
_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
|
38 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
39 |
##################################################### |
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
40 |
### 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
|
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 |
|
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 |
# 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
|
44 |
# 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
|
45 |
# obsolete subtree. |
2058
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
46 |
|
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
47 |
@eh.uisetup |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
48 |
def addgetbundleargs(self): |
5180
515d425c0a05
compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4907
diff
changeset
|
49 |
gboptsmap = wireprototypes.GETBUNDLE_ARGUMENTS |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
50 |
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
|
51 |
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
|
52 |
|
5202
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
53 |
ARGUMENTS_LIMIT = 200 |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
54 |
|
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
55 |
OVERFLOW_MSG = """obsmarkers differ for %d common nodes |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
56 |
| |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
57 |
| This might be too much for the remote HTTP server that doesn't accept |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
58 |
| arguments through POST request. (config: experimental.httppostargs=yes) |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
59 |
| |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
60 |
| Falling back to a less efficient fetching method. |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
61 |
| |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
62 |
| More efficient fetching method is possible and will be used in the future. |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
63 |
""" |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
64 |
|
2058
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
65 |
@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
|
66 |
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
|
67 |
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
|
68 |
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
|
69 |
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
|
70 |
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
|
71 |
boundaries = obsdiscovery.buildpullobsmarkersboundaries(pullop) |
5202
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
72 |
use_common = True |
5201
7c6d08cd1221
obsexchange: swap the 'common' and 'missing' clause
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4907
diff
changeset
|
73 |
if b'missing' in boundaries: |
5202
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
74 |
use_common = False |
5201
7c6d08cd1221
obsexchange: swap the 'common' and 'missing' clause
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4907
diff
changeset
|
75 |
missing = boundaries[b'missing'] |
5202
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
76 |
# using getattr since `limitedarguments` is missing |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
77 |
# hg <= 5.0 (69921d02daaf) |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
78 |
limitedarguments = getattr(pullop.remote, 'limitedarguments', False) |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
79 |
if limitedarguments and len(missing) > ARGUMENTS_LIMIT: |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
80 |
obsexcmsg(ui, OVERFLOW_MSG % len(missing)) |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
81 |
use_common = True |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
82 |
else: |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
83 |
if missing: |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
84 |
obsexcmsg(ui, b'request obsmarkers for %d common nodes\n' |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
85 |
% len(missing)) |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
86 |
kwargs[b'evo_missing_nodes'] = missing |
c0b8804066dc
obsexchange: fallback to simpler request for dumb http server
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5201
diff
changeset
|
87 |
if use_common and b'common' in boundaries: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
88 |
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
|
89 |
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
|
90 |
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
|
91 |
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
|
92 |
kwargs[b'evo_obscommon'] = common |
2058
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
93 |
return ret |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
94 |
|
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
|
95 |
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
|
96 |
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
|
97 |
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
|
98 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
99 |
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
|
100 |
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
|
101 |
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
|
102 |
if heads is None: |
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
103 |
heads = repo.heads() |
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
104 |
obscommon = kwargs.get('evo_obscommon', ()) |
5205
240efc3ab4dd
exchange: deal with empty obscommon
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5202
diff
changeset
|
105 |
if obscommon: |
240efc3ab4dd
exchange: deal with empty obscommon
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5202
diff
changeset
|
106 |
obsset = repo.unfiltered().set(b'::%ln - ::%ln', heads, obscommon) |
240efc3ab4dd
exchange: deal with empty obscommon
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5202
diff
changeset
|
107 |
else: |
240efc3ab4dd
exchange: deal with empty obscommon
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
5202
diff
changeset
|
108 |
obsset = repo.unfiltered().set(b'::%ln', heads) |
2084
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
109 |
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
|
110 |
else: |
b1f029dcf573
discovery: implement some range based discovery
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2079
diff
changeset
|
111 |
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
|
112 |
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
|
113 |
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
|
114 |
markers = repo.obsstore.relevantmarkers(subset) |
2523
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
115 |
if util.safehasattr(bundle2, 'buildobsmarkerspart'): |
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
116 |
bundle2.buildobsmarkerspart(bundler, markers) |
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
117 |
else: |
3629446411b3
compat: adapt to buildobsmarkerspart move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2275
diff
changeset
|
118 |
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
|
119 |
|
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 |
# 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
|
121 |
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
|
122 |
"""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
|
123 |
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
|
124 |
if obsolete.isenabled(repo, obsolete.exchangeopt): |
5180
515d425c0a05
compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4907
diff
changeset
|
125 |
caps = caps.data.split() |
3500
a43fdbd6f7eb
wireproto: fix *_capabilities for change of API types
Boris Feld <boris.feld@octobus.net>
parents:
3173
diff
changeset
|
126 |
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
|
127 |
caps.sort() |
5180
515d425c0a05
compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4907
diff
changeset
|
128 |
caps = wireprototypes.bytesresponse(b' '.join(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): |
5180
515d425c0a05
compat: drop 4.5 related compatibility around wireprotocol module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4907
diff
changeset
|
133 |
gboptsmap = wireprototypes.GETBUNDLE_ARGUMENTS |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
134 |
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
|
135 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
136 |
# 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
|
137 |
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
|
138 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
139 |
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
|
140 |
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
|
141 |
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
|
142 |
|
3682
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
143 |
extensions.wrapfunction(wireprotov1server, 'capabilities', |
72f61b9cb8e9
evolve: add support for hg >= b4d85bc1
Martin von Zweigbergk <martinvonz@google.com>
parents:
3677
diff
changeset
|
144 |
_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
|
145 |
# 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
|
146 |
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
|
147 |
|
302aa8bbb3af
exchange: dispatch all code in 'serveronly' to the appropriate submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2059
diff
changeset
|
148 |
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
|
149 |
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
|
150 |
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
|
151 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4804
diff
changeset
|
152 |
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
|
153 |
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
|
154 |
|
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
|
155 |
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
|
156 |
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
|
157 |
# 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
|
158 |
# 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
|
159 |
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
|
160 |
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
|
161 |
|
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
162 |
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
|
163 |
"""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
|
164 |
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
|
165 |
raise err |
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
166 |
|
3172
aed2cac9edc3
wireproto: avoid exposing pushkey abort for server without evolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3153
diff
changeset
|
167 |
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
|
168 |
"""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
|
169 |
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
|
170 |
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
|
171 |
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
|
172 |
return {} |
aed2cac9edc3
wireproto: avoid exposing pushkey abort for server without evolution
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3153
diff
changeset
|
173 |
|
3153
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
174 |
@eh.uisetup |
544354cfc626
pushkey: forbid usage of pushley to exchange markers
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
175 |
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
|
176 |
pushkey._namespaces[b'obsolete'] = (forbidpushkey, forbidlistkey) |