author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
Tue, 07 Mar 2017 15:04:58 +0100 | |
changeset 2058 | 92c2a54f98ee |
parent 2057 | 4c195eb4d2c5 |
child 2059 | ebbce3be9142 |
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: |
11 |
import StringIO as io |
|
12 |
StringIO = io.StringIO |
|
13 |
except ImportError: |
|
14 |
import io |
|
15 |
StringIO = io.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
|
16 |
|
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
|
17 |
import errno |
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 |
import socket |
617
469befc27b26
detect incompatibility with future mercurial 2.5
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
616
diff
changeset
|
19 |
|
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
20 |
from mercurial import ( |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
21 |
error, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
22 |
exchange, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
23 |
httppeer, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
24 |
localrepo, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
25 |
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
|
26 |
obsolete, |
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
|
27 |
util, |
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
|
28 |
wireproto, |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
29 |
) |
81
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
30 |
from mercurial.i18n import _ |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
31 |
|
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
32 |
from . import ( |
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
33 |
exthelper, |
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
34 |
serveronly, |
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
|
35 |
utility, |
2054
f9d65d24b9f9
discovery: split discovery related code in 'obsdiscovery'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2053
diff
changeset
|
36 |
obsdiscovery, |
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
37 |
) |
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
38 |
|
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
|
39 |
eh = exthelper.exthelper() |
2054
f9d65d24b9f9
discovery: split discovery related code in 'obsdiscovery'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2053
diff
changeset
|
40 |
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
|
41 |
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
|
42 |
obsexcprg = utility.obsexcprg |
816
03587920dfd9
evolve: add relevant marker exchange machinery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
811
diff
changeset
|
43 |
|
2058
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
44 |
### adds support for the 'evo_obscommon' argument to getbundle |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
45 |
# |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
46 |
# This argument use the data recovered from the discovery to request only a |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
47 |
# subpart of the obsolete subtree. |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
48 |
|
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
49 |
@eh.uisetup |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
50 |
def addgetbundleargs(self): |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
51 |
wireproto.gboptsmap['evo_obscommon'] = 'nodes' |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
52 |
|
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
53 |
@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
|
54 |
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
|
55 |
ret = orig(pullop, kwargs) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
56 |
if ('obsmarkers' in kwargs and |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
57 |
pullop.remote.capable('_evoext_getbundle_obscommon')): |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
58 |
boundaries = obsdiscovery._buildpullobsmarkersboundaries(pullop) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
59 |
common = boundaries['common'] |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
60 |
if common != [node.nullid]: |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
61 |
kwargs['evo_obscommon'] = common |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
62 |
return ret |
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, '_pullobsolete') |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
65 |
def _pullobsolete(orig, pullop): |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
66 |
if not obsolete.isenabled(pullop.repo, obsolete.exchangeopt): |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
67 |
return None |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
68 |
if 'obsmarkers' in pullop.stepsdone: |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
69 |
return None |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
70 |
wirepull = pullop.remote.capable('_evoext_pullobsmarkers_0') |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
71 |
if not wirepull: |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
72 |
return orig(pullop) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
73 |
if 'obsolete' not in pullop.remote.listkeys('namespaces'): |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
74 |
return None # remote opted out of obsolescence marker exchange |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
75 |
tr = None |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
76 |
ui = pullop.repo.ui |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
77 |
boundaries = obsdiscovery._buildpullobsmarkersboundaries(pullop) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
78 |
if not set(boundaries['heads']) - set(boundaries['common']): |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
79 |
obsexcmsg(ui, "nothing to pull\n") |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
80 |
return None |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
81 |
|
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
82 |
obsexcmsg(ui, "pull obsolescence markers\n", True) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
83 |
new = 0 |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
84 |
|
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
85 |
if wirepull: |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
86 |
obsdata = pullop.remote.evoext_pullobsmarkers_0(**boundaries) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
87 |
obsdata = obsdata.read() |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
88 |
if len(obsdata) > 5: |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
89 |
msg = "merging obsolescence markers (%i bytes)\n" % len(obsdata) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
90 |
obsexcmsg(ui, msg) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
91 |
tr = pullop.gettransaction() |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
92 |
old = len(pullop.repo.obsstore._all) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
93 |
pullop.repo.obsstore.mergemarkers(tr, obsdata) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
94 |
new = len(pullop.repo.obsstore._all) - old |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
95 |
obsexcmsg(ui, "%i obsolescence markers added\n" % new, True) |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
96 |
else: |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
97 |
obsexcmsg(ui, "no unknown remote markers\n") |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
98 |
obsexcmsg(ui, "DONE\n") |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
99 |
if new: |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
100 |
pullop.repo.invalidatevolatilesets() |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
101 |
return tr |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
102 |
|
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
103 |
############################################### |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
104 |
### Support for old legacy exchange methods ### |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
105 |
############################################### |
817
c2bf0eb727f1
exchange: only push the set of marker relevant to want we push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
816
diff
changeset
|
106 |
|
854
86b826399dfd
exchange: add progress bar when pushing using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
853
diff
changeset
|
107 |
class pushobsmarkerStringIO(StringIO): |
86b826399dfd
exchange: add progress bar when pushing using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
853
diff
changeset
|
108 |
"""hacky string io for progress""" |
86b826399dfd
exchange: add progress bar when pushing using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
853
diff
changeset
|
109 |
|
86b826399dfd
exchange: add progress bar when pushing using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
853
diff
changeset
|
110 |
@util.propertycache |
879
85b3d54516a7
exchange: expose length of pushed markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
877
diff
changeset
|
111 |
def length(self): |
854
86b826399dfd
exchange: add progress bar when pushing using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
853
diff
changeset
|
112 |
return len(self.getvalue()) |
86b826399dfd
exchange: add progress bar when pushing using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
853
diff
changeset
|
113 |
|
1080
41d2555141ea
evolve: allow read() from the magic StringIO
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1079
diff
changeset
|
114 |
def read(self, size=None): |
1624
081605c2e9b6
evolve: mark progress units for translation
Anton Shestakov <av6@dwimlabs.net>
parents:
1623
diff
changeset
|
115 |
obsexcprg(self.ui, self.tell(), unit=_("bytes"), total=self.length) |
854
86b826399dfd
exchange: add progress bar when pushing using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
853
diff
changeset
|
116 |
return StringIO.read(self, size) |
86b826399dfd
exchange: add progress bar when pushing using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
853
diff
changeset
|
117 |
|
961
8de88b323fb6
evolve: install progress support for the bundle2 push path
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
960
diff
changeset
|
118 |
def __iter__(self): |
8de88b323fb6
evolve: install progress support for the bundle2 push path
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
960
diff
changeset
|
119 |
d = self.read(4096) |
8de88b323fb6
evolve: install progress support for the bundle2 push path
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
960
diff
changeset
|
120 |
while d: |
8de88b323fb6
evolve: install progress support for the bundle2 push path
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
960
diff
changeset
|
121 |
yield d |
8de88b323fb6
evolve: install progress support for the bundle2 push path
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
960
diff
changeset
|
122 |
d = self.read(4096) |
8de88b323fb6
evolve: install progress support for the bundle2 push path
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
960
diff
changeset
|
123 |
|
2057
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
124 |
# compat-code: _pushobsolete |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
125 |
# |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
126 |
# the _pushobsolete function is a core function used to exchange |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
127 |
# obsmarker with repository that does not support bundle2 |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
128 |
|
817
c2bf0eb727f1
exchange: only push the set of marker relevant to want we push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
816
diff
changeset
|
129 |
@eh.wrapfunction(exchange, '_pushobsolete') |
c2bf0eb727f1
exchange: only push the set of marker relevant to want we push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
816
diff
changeset
|
130 |
def _pushobsolete(orig, pushop): |
c2bf0eb727f1
exchange: only push the set of marker relevant to want we push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
816
diff
changeset
|
131 |
"""utility function to push obsolete markers to a remote""" |
2056
b96ca1b51e04
push: exit obsexchange early if disabled
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2055
diff
changeset
|
132 |
if not obsolete.isenabled(pushop.repo, obsolete.exchangeopt): |
b96ca1b51e04
push: exit obsexchange early if disabled
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2055
diff
changeset
|
133 |
return |
2055
ce3d68029ed7
compat: drop special code handling change in push/pull op API
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2054
diff
changeset
|
134 |
if 'obsmarkers' in pushop.stepsdone: |
ce3d68029ed7
compat: drop special code handling change in push/pull op API
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2054
diff
changeset
|
135 |
return |
ce3d68029ed7
compat: drop special code handling change in push/pull op API
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2054
diff
changeset
|
136 |
pushop.stepsdone.add('obsmarkers') |
1832
41b531dab3ad
compat: drop support for ancestral pushop object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1831
diff
changeset
|
137 |
if pushop.cgresult == 0: |
1077
cdfc19f25478
obsexc: push nothing if push fail
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1076
diff
changeset
|
138 |
return |
817
c2bf0eb727f1
exchange: only push the set of marker relevant to want we push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
816
diff
changeset
|
139 |
pushop.ui.debug('try to push obsolete markers to remote\n') |
c2bf0eb727f1
exchange: only push the set of marker relevant to want we push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
816
diff
changeset
|
140 |
repo = pushop.repo |
c2bf0eb727f1
exchange: only push the set of marker relevant to want we push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
816
diff
changeset
|
141 |
remote = pushop.remote |
2056
b96ca1b51e04
push: exit obsexchange early if disabled
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2055
diff
changeset
|
142 |
if (repo.obsstore and 'obsolete' in remote.listkeys('namespaces')): |
1078
5717d023da63
obsexc: use the common discovery
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1077
diff
changeset
|
143 |
markers = pushop.outobsmarkers |
864
401da1b38cca
discovery: implement a discovery process and use it for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
863
diff
changeset
|
144 |
if not markers: |
1033
908273755215
evolve: move OBSEXC message in a dedicated function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1032
diff
changeset
|
145 |
obsexcmsg(repo.ui, "no marker to push\n") |
864
401da1b38cca
discovery: implement a discovery process and use it for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
863
diff
changeset
|
146 |
elif remote.capable('_evoext_pushobsmarkers_0'): |
2057
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
147 |
msg = ('the remote repository use years old versions of Mercurial' |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
148 |
' and evolve\npushing obsmarker using legacy method\n') |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
149 |
repo.ui.warn(msg) |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
150 |
repo.ui.warn('(please upgrade your server)\n') |
961
8de88b323fb6
evolve: install progress support for the bundle2 push path
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
960
diff
changeset
|
151 |
obsdata = pushobsmarkerStringIO() |
1091
236a8e81551e
compat: use in-core encodemarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1090
diff
changeset
|
152 |
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
|
153 |
obsdata.write(chunk) |
957
2cde59f3cb5d
evolve: add a push pass using bundle2
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
956
diff
changeset
|
154 |
obsdata.seek(0) |
961
8de88b323fb6
evolve: install progress support for the bundle2 push path
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
960
diff
changeset
|
155 |
obsdata.ui = repo.ui |
1037
bddee73b361e
evolve: add "absolescence" in front of markers in the message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1036
diff
changeset
|
156 |
obsexcmsg(repo.ui, "pushing %i obsolescence markers (%i bytes)\n" |
1036
70de12b7721a
evolve: re-introduce the "pushing 42 markers…" message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1035
diff
changeset
|
157 |
% (len(markers), len(obsdata.getvalue())), |
70de12b7721a
evolve: re-introduce the "pushing 42 markers…" message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1035
diff
changeset
|
158 |
True) |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
159 |
remote.evoext_pushobsmarkers_0(obsdata) |
1034
5fd28e46e8f5
evolve: move OBSEXC progress in a dedicated function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1033
diff
changeset
|
160 |
obsexcprg(repo.ui, None) |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
161 |
else: |
2057
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
162 |
# XXX core could be able do the same things but without the debug |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
163 |
# and progress output. |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
164 |
msg = ('the remote repository usea years old version of Mercurial' |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
165 |
' and not evolve extension\n') |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
166 |
repo.ui.warn(msg) |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
167 |
msg = 'pushing obsmarker using and extremely slow legacy method\n' |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
168 |
repo.ui.warn(msg) |
4c195eb4d2c5
push: add extra warning about pushing to old server
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2056
diff
changeset
|
169 |
repo.ui.warn('(please upgrade your server and enable evolve.serveronly on it)\n') |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
170 |
rslts = [] |
2058
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
171 |
remotedata = obsolete._pushkeyescape(markers).items() |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
172 |
totalbytes = sum(len(d) for k, d in remotedata) |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
173 |
sentbytes = 0 |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
174 |
obsexcmsg(repo.ui, "pushing %i obsolescence markers in %i " |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
175 |
"pushkey payload (%i bytes)\n" |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
176 |
% (len(markers), len(remotedata), totalbytes), |
1036
70de12b7721a
evolve: re-introduce the "pushing 42 markers…" message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1035
diff
changeset
|
177 |
True) |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
178 |
for key, data in remotedata: |
1624
081605c2e9b6
evolve: mark progress units for translation
Anton Shestakov <av6@dwimlabs.net>
parents:
1623
diff
changeset
|
179 |
obsexcprg(repo.ui, sentbytes, item=key, unit=_("bytes"), |
1034
5fd28e46e8f5
evolve: move OBSEXC progress in a dedicated function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1033
diff
changeset
|
180 |
total=totalbytes) |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
181 |
rslts.append(remote.pushkey('obsolete', key, '', data)) |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
182 |
sentbytes += len(data) |
1624
081605c2e9b6
evolve: mark progress units for translation
Anton Shestakov <av6@dwimlabs.net>
parents:
1623
diff
changeset
|
183 |
obsexcprg(repo.ui, sentbytes, item=key, unit=_("bytes"), |
1034
5fd28e46e8f5
evolve: move OBSEXC progress in a dedicated function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1033
diff
changeset
|
184 |
total=totalbytes) |
5fd28e46e8f5
evolve: move OBSEXC progress in a dedicated function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1033
diff
changeset
|
185 |
obsexcprg(repo.ui, None) |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
186 |
if [r for r in rslts if not r]: |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
187 |
msg = _('failed to push some obsolete markers!\n') |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
188 |
repo.ui.warn(msg) |
1033
908273755215
evolve: move OBSEXC message in a dedicated function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1032
diff
changeset
|
189 |
obsexcmsg(repo.ui, "DONE\n") |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
190 |
|
2058
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
191 |
# Supporting legacy way to push obsmarker so that old client can still push |
92c2a54f98ee
exchange: split between modern and legacy code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2057
diff
changeset
|
192 |
# them somewhat efficiently |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
193 |
|
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
194 |
@eh.addattr(wireproto.wirepeer, 'evoext_pushobsmarkers_0') |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
195 |
def client_pushobsmarkers(self, obsfile): |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
196 |
"""wireprotocol peer method""" |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
197 |
self.requirecap('_evoext_pushobsmarkers_0', |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
198 |
_('push obsolete markers faster')) |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
199 |
ret, output = self._callpush('evoext_pushobsmarkers_0', obsfile) |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
200 |
for l in output.splitlines(True): |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
201 |
self.ui.status(_('remote: '), l) |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
202 |
return ret |
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
203 |
|
880
7fe06f32d1ad
exchange: fix push markers over wire protocol for http peer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
879
diff
changeset
|
204 |
@eh.addattr(httppeer.httppeer, 'evoext_pushobsmarkers_0') |
7fe06f32d1ad
exchange: fix push markers over wire protocol for http peer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
879
diff
changeset
|
205 |
def httpclient_pushobsmarkers(self, obsfile): |
7fe06f32d1ad
exchange: fix push markers over wire protocol for http peer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
879
diff
changeset
|
206 |
"""httpprotocol peer method |
7fe06f32d1ad
exchange: fix push markers over wire protocol for http peer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
879
diff
changeset
|
207 |
(Cannot simply use _callpush as http is doing some special handling)""" |
7fe06f32d1ad
exchange: fix push markers over wire protocol for http peer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
879
diff
changeset
|
208 |
self.requirecap('_evoext_pushobsmarkers_0', |
7fe06f32d1ad
exchange: fix push markers over wire protocol for http peer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
879
diff
changeset
|
209 |
_('push obsolete markers faster')) |
1209
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
210 |
try: |
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
211 |
r = self._call('evoext_pushobsmarkers_0', data=obsfile) |
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
212 |
vals = r.split('\n', 1) |
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
213 |
if len(vals) < 2: |
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
214 |
raise error.ResponseError(_("unexpected response:"), r) |
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
215 |
|
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
216 |
for l in vals[1].splitlines(True): |
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
217 |
if l.strip(): |
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
218 |
self.ui.status(_('remote: '), l) |
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
219 |
return vals[0] |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
220 |
except socket.error as err: |
1209
fa35aeb64d32
evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
1206
diff
changeset
|
221 |
if err.args[0] in (errno.ECONNRESET, errno.EPIPE): |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
222 |
raise error.Abort(_('push failed: %s') % err.args[1]) |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
223 |
raise error.Abort(err.args[1]) |
880
7fe06f32d1ad
exchange: fix push markers over wire protocol for http peer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
879
diff
changeset
|
224 |
|
1081
dddb8a70437c
obsexc: add support for evoext_pushobsmarkers_0 on localpeer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1080
diff
changeset
|
225 |
@eh.wrapfunction(localrepo.localrepository, '_restrictcapabilities') |
dddb8a70437c
obsexc: add support for evoext_pushobsmarkers_0 on localpeer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1080
diff
changeset
|
226 |
def local_pushobsmarker_capabilities(orig, repo, caps): |
dddb8a70437c
obsexc: add support for evoext_pushobsmarkers_0 on localpeer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1080
diff
changeset
|
227 |
caps = orig(repo, caps) |
dddb8a70437c
obsexc: add support for evoext_pushobsmarkers_0 on localpeer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1080
diff
changeset
|
228 |
caps.add('_evoext_pushobsmarkers_0') |
dddb8a70437c
obsexc: add support for evoext_pushobsmarkers_0 on localpeer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1080
diff
changeset
|
229 |
return caps |
dddb8a70437c
obsexc: add support for evoext_pushobsmarkers_0 on localpeer
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1080
diff
changeset
|
230 |
|
1314
d13d97363521
evolve: refactoring of code related to pushing obs markers
Laurent Charignon <lcharignon@fb.com>
parents:
1313
diff
changeset
|
231 |
@eh.addattr(localrepo.localpeer, 'evoext_pushobsmarkers_0') |
d13d97363521
evolve: refactoring of code related to pushing obs markers
Laurent Charignon <lcharignon@fb.com>
parents:
1313
diff
changeset
|
232 |
def local_pushobsmarkers(peer, obsfile): |
d13d97363521
evolve: refactoring of code related to pushing obs markers
Laurent Charignon <lcharignon@fb.com>
parents:
1313
diff
changeset
|
233 |
data = obsfile.read() |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1836
diff
changeset
|
234 |
serveronly._pushobsmarkers(peer._repo, data) |
821
202376586cf6
exchange: introduce a wireprotocol command to push markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
820
diff
changeset
|
235 |
|
823
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
236 |
@eh.addattr(wireproto.wirepeer, 'evoext_pullobsmarkers_0') |
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
237 |
def client_pullobsmarkers(self, heads=None, common=None): |
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
238 |
self.requirecap('_evoext_pullobsmarkers_0', _('look up remote obsmarkers')) |
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
239 |
opts = {} |
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
240 |
if heads is not None: |
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
241 |
opts['heads'] = wireproto.encodelist(heads) |
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
242 |
if common is not None: |
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
243 |
opts['common'] = wireproto.encodelist(common) |
1836
9e87ac06be90
compat: just use '_callcompressable'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1835
diff
changeset
|
244 |
f = self._callcompressable("evoext_pullobsmarkers_0", **opts) |
898
934b6f0feffd
evolve: small white space change
Olle Lundberg <geek@nerd.sh>
parents:
897
diff
changeset
|
245 |
length = int(f.read(20)) |
853
b82b49189328
exchange: add progress bar when pulling using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
825
diff
changeset
|
246 |
chunk = 4096 |
b82b49189328
exchange: add progress bar when pulling using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
825
diff
changeset
|
247 |
current = 0 |
b82b49189328
exchange: add progress bar when pulling using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
825
diff
changeset
|
248 |
data = StringIO() |
b82b49189328
exchange: add progress bar when pulling using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
825
diff
changeset
|
249 |
ui = self.ui |
1624
081605c2e9b6
evolve: mark progress units for translation
Anton Shestakov <av6@dwimlabs.net>
parents:
1623
diff
changeset
|
250 |
obsexcprg(ui, current, unit=_("bytes"), total=length) |
853
b82b49189328
exchange: add progress bar when pulling using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
825
diff
changeset
|
251 |
while current < length: |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
252 |
readsize = min(length - current, chunk) |
853
b82b49189328
exchange: add progress bar when pulling using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
825
diff
changeset
|
253 |
data.write(f.read(readsize)) |
b82b49189328
exchange: add progress bar when pulling using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
825
diff
changeset
|
254 |
current += readsize |
1624
081605c2e9b6
evolve: mark progress units for translation
Anton Shestakov <av6@dwimlabs.net>
parents:
1623
diff
changeset
|
255 |
obsexcprg(ui, current, unit=_("bytes"), total=length) |
1034
5fd28e46e8f5
evolve: move OBSEXC progress in a dedicated function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1033
diff
changeset
|
256 |
obsexcprg(ui, None) |
870
1a23c7c52a43
exchange: fix pull over wire protocol
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
869
diff
changeset
|
257 |
data.seek(0) |
853
b82b49189328
exchange: add progress bar when pulling using wire protocol command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
825
diff
changeset
|
258 |
return data |
823
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
259 |
|
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
260 |
@eh.addattr(localrepo.localpeer, 'evoext_pullobsmarkers_0') |
9aa20585e158
exchange: add a new method to pull markers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
821
diff
changeset
|
261 |
def local_pullobsmarkers(self, heads=None, common=None): |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1836
diff
changeset
|
262 |
return serveronly._getobsmarkersstream(self._repo, heads=heads, |
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1836
diff
changeset
|
263 |
common=common) |
1159
04bd66779a1f
obsup: hack extension to make in-place upgrading of obsolete markers easy
Augie Fackler <raf@durin42.com>
parents:
1157
diff
changeset
|
264 |
_bestformat = max(obsolete.formats.keys()) |