[PATCH 4 of 9 RFC] obsolete: add binary version of listmarkers (API)
Gregory Szorc
gregory.szorc at gmail.com
Sun Aug 14 17:10:03 EDT 2016
# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1471206127 25200
# Sun Aug 14 13:22:07 2016 -0700
# Node ID 67501b93c9875cc6cdef0e77d2d148a14a5d60a8
# Parent cab15fd54ee60cc067920454544586cc4aa03d8e
obsolete: add binary version of listmarkers (API)
Continuing our work to implement binary/raw versions of listkeys
functions.
We had to update a caller in exchange.py because we stopped returning
base85 encoded data from obsolete._pushkeyescape.
diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -1014,16 +1014,17 @@ def _pushobsolete(pushop):
pushop.stepsdone.add('obsmarkers')
if pushop.outobsmarkers:
pushop.ui.debug('try to push obsolete markers to remote\n')
rslts = []
remotedata = obsolete._pushkeyescape(sorted(pushop.outobsmarkers))
for key in sorted(remotedata, reverse=True):
# reverse sort to ensure we end with dump0
data = remotedata[key]
+ data = base85.b85encode(data)
rslts.append(remote.pushkey('obsolete', key, '', data))
if [r for r in rslts if not r]:
msg = _('failed to push some obsolete markers!\n')
repo.ui.warn(msg)
def _pushbookmark(pushop):
"""Update bookmark position on remote"""
if pushop.cgresult == 0 or 'bookmarks' in pushop.stepsdone:
diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py
--- a/mercurial/obsolete.py
+++ b/mercurial/obsolete.py
@@ -722,39 +722,44 @@ def commonversion(versions):
# you have to take in account:
# - the version header
# - the base85 encoding
_maxpayload = 5300
def _pushkeyescape(markers):
"""encode markers into a dict suitable for pushkey exchange
- - binary data is base85 encoded
- split in chunks smaller than 5300 bytes"""
keys = {}
parts = []
currentlen = _maxpayload * 2 # ensure we create a new part
for marker in markers:
nextdata = _fm0encodeonemarker(marker)
if (len(nextdata) + currentlen > _maxpayload):
currentpart = []
currentlen = 0
parts.append(currentpart)
currentpart.append(nextdata)
currentlen += len(nextdata)
for idx, part in enumerate(reversed(parts)):
data = ''.join([_pack('>B', _fm0version)] + part)
- keys['dump%i' % idx] = base85.b85encode(data)
+ keys['dump%i' % idx] = data
return keys
+def listmarkersraw(repo):
+ if not repo.obsstore:
+ return {}
+ return _pushkeyescape(sorted(repo.obsstore))
+
def listmarkers(repo):
"""List markers over pushkey"""
- if not repo.obsstore:
- return {}
- return _pushkeyescape(sorted(repo.obsstore))
+ d = {}
+ for k, v in listmarkersraw(repo).iteritems():
+ d[k] = base85.b85encode(v)
+ return d
def pushmarker(repo, key, old, new):
"""Push markers over pushkey"""
if not key.startswith('dump'):
repo.ui.warn(_('unknown key: %r') % key)
return 0
if old:
repo.ui.warn(_('unexpected old value for %r') % key)
More information about the Mercurial-devel
mailing list