##// END OF EJS Templates
remotefilelog: prefetch files in deterministic order...
remotefilelog: prefetch files in deterministic order I have been troubleshooting some slowness in this area (it's unclear if it's the client or server that's to blame, but that's beside the point) and it's a lot easier to do troubleshoot if the files are prefetched in the same order each time. Differential Revision: https://phab.mercurial-scm.org/D6172

File last commit:

r40380:2c5835b4 default
r42203:0129bf02 default
Show More
narrowwirepeer.py
107 lines | 4.3 KiB | text/x-python | PythonLexer
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 # narrowwirepeer.py - passes narrow spec with unbundle command
#
# Copyright 2017 Google, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import
from mercurial import (
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 bundle2,
error,
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 extensions,
hg,
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 narrowspec,
pycompat,
wireprototypes,
wireprotov1peer,
Pulkit Goyal
narrow: add narrow and ellipses as server capabilities...
r39559 wireprotov1server,
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 )
def uisetup():
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 wireprotov1peer.wirepeer.narrow_widen = peernarrowwiden
Pulkit Goyal
narrow: add narrow and ellipses as server capabilities...
r39559
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 def reposetup(repo):
def wirereposetup(ui, peer):
def wrapped(orig, cmd, *args, **kwargs):
if cmd == 'unbundle':
Augie Fackler
narrowwirepeer: add TODO about how we add wireproto args to unbundle :(...
r36119 # TODO: don't blindly add include/exclude wireproto
# arguments to unbundle.
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 include, exclude = repo.narrowpats
Augie Fackler
narrowwirepeer: add some strkwargs to fix a crash on py3...
r36369 kwargs[r"includepats"] = ','.join(include)
kwargs[r"excludepats"] = ','.join(exclude)
Augie Fackler
narrow: import experimental extension from narrowhg revision cb51d673e9c5...
r36096 return orig(cmd, *args, **kwargs)
extensions.wrapfunction(peer, '_calltwowaystream', wrapped)
hg.wirepeersetupfuncs.append(wirereposetup)
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106
@wireprotov1server.wireprotocommand('narrow_widen', 'oldincludes oldexcludes'
' newincludes newexcludes'
' commonheads cgversion'
' known ellipses',
permission='pull')
def narrow_widen(repo, proto, oldincludes, oldexcludes, newincludes,
newexcludes, commonheads, cgversion, known, ellipses):
"""wireprotocol command to send data when a narrow clone is widen. We will
be sending a changegroup here.
The current set of arguments which are required:
oldincludes: the old includes of the narrow copy
oldexcludes: the old excludes of the narrow copy
newincludes: the new includes of the narrow copy
newexcludes: the new excludes of the narrow copy
commonheads: list of heads which are common between the server and client
cgversion(maybe): the changegroup version to produce
known: list of nodes which are known on the client (used in ellipses cases)
ellipses: whether to send ellipses data or not
"""
Pulkit Goyal
narrow: don't compress the bundle2 when sending 'error:abort'...
r40183 preferuncompressed = False
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 try:
oldincludes = wireprototypes.decodelist(oldincludes)
newincludes = wireprototypes.decodelist(newincludes)
oldexcludes = wireprototypes.decodelist(oldexcludes)
newexcludes = wireprototypes.decodelist(newexcludes)
# validate the patterns
narrowspec.validatepatterns(set(oldincludes))
narrowspec.validatepatterns(set(newincludes))
narrowspec.validatepatterns(set(oldexcludes))
narrowspec.validatepatterns(set(newexcludes))
common = wireprototypes.decodelist(commonheads)
known = None
if known:
known = wireprototypes.decodelist(known)
if ellipses == '0':
ellipses = False
else:
ellipses = bool(ellipses)
cgversion = cgversion
newmatch = narrowspec.match(repo.root, include=newincludes,
exclude=newexcludes)
oldmatch = narrowspec.match(repo.root, include=oldincludes,
exclude=oldexcludes)
Martin von Zweigbergk
narrow: when widening, don't include manifests the client already has...
r40380 bundler = bundle2.widen_bundle(repo, oldmatch, newmatch, common, known,
Pulkit Goyal
narrow: start returning bundle2 from widen_bundle()...
r40107 cgversion, ellipses)
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 except error.Abort as exc:
Pulkit Goyal
narrow: start returning bundle2 from widen_bundle()...
r40107 bundler = bundle2.bundle20(repo.ui)
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 manargs = [('message', pycompat.bytestr(exc))]
advargs = []
if exc.hint is not None:
advargs.append(('hint', exc.hint))
bundler.addpart(bundle2.bundlepart('error:abort', manargs, advargs))
Pulkit Goyal
narrow: don't compress the bundle2 when sending 'error:abort'...
r40183 preferuncompressed = True
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106
chunks = bundler.getchunks()
Pulkit Goyal
narrow: don't compress the bundle2 when sending 'error:abort'...
r40183 return wireprototypes.streamres(gen=chunks,
prefer_uncompressed=preferuncompressed)
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106
def peernarrowwiden(remote, **kwargs):
Pulkit Goyal
py3: add some r'' prefixes in hgext/narrow/narrowwirepeer.py...
r40248 for ch in (r'oldincludes', r'newincludes', r'oldexcludes', r'newexcludes',
r'commonheads', r'known'):
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 kwargs[ch] = wireprototypes.encodelist(kwargs[ch])
Pulkit Goyal
py3: add some r'' prefixes in hgext/narrow/narrowwirepeer.py...
r40248 kwargs[r'ellipses'] = '%i' % bool(kwargs[r'ellipses'])
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 f = remote._callcompressable('narrow_widen', **kwargs)
return bundle2.getunbundler(remote.ui, f)