##// END OF EJS Templates
perf: don't depend on pycompat for older Mercurial versions...
perf: don't depend on pycompat for older Mercurial versions We already define local _sysstr() and _xrange() for compatibility, so we should use those. Also create a similar local _bytestr() corresponding to pycompat.bytestr(). Differential Revision: https://phab.mercurial-scm.org/D6745

File last commit:

r42607:a97b12f7 default
r43053:c0000597 default
Show More
narrowwirepeer.py
115 lines | 4.6 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,
Pulkit Goyal
narrow: use narrow_widen wireproto command to widen in case of ellipses...
r42605 node as nodemod,
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 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 )
Pulkit Goyal
narrow: use narrow_widen wireproto command to widen in case of ellipses...
r42605 from . import narrowbundle2
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)
Pulkit Goyal
narrow: use narrow_widen wireproto command to widen in case of ellipses...
r42605 known = wireprototypes.decodelist(known)
known = {nodemod.bin(n) for n in known}
Pulkit Goyal
narrow: the first version of narrow_widen wireprotocol command...
r40106 if ellipses == '0':
ellipses = False
else:
ellipses = bool(ellipses)
cgversion = cgversion
Pulkit Goyal
narrow: pass the bundle to bundle2.widen_bundle() instead of generating there...
r42607 bundler = bundle2.bundle20(repo.ui)
Pulkit Goyal
narrow: use narrow_widen wireproto command to widen in case of ellipses...
r42605 if not ellipses:
newmatch = narrowspec.match(repo.root, include=newincludes,
exclude=newexcludes)
oldmatch = narrowspec.match(repo.root, include=oldincludes,
exclude=oldexcludes)
Pulkit Goyal
narrow: pass the bundle to bundle2.widen_bundle() instead of generating there...
r42607 bundle2.widen_bundle(bundler, repo, oldmatch, newmatch, common,
known, cgversion, ellipses)
Pulkit Goyal
narrow: use narrow_widen wireproto command to widen in case of ellipses...
r42605 else:
narrowbundle2.generateellipsesbundle2(bundler, repo, oldincludes,
oldexcludes, newincludes, newexcludes, cgversion, common,
list(common), known, None)
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)