bundle2: move `readbundle` into the `exchange` module
The `readbundle` function is going to understand the bundle2 header. We move the
function to a more suitable place before making any other changes.
--- a/hgext/shelve.py Mon Apr 14 14:46:32 2014 -0400
+++ b/hgext/shelve.py Mon Apr 14 15:33:50 2014 -0400
@@ -25,7 +25,7 @@
from mercurial.node import nullid, nullrev, bin, hex
from mercurial import changegroup, cmdutil, scmutil, phases, commands
from mercurial import error, hg, mdiff, merge, patch, repair, util
-from mercurial import templatefilters, changegroup
+from mercurial import templatefilters, changegroup, exchange
from mercurial import lock as lockmod
from hgext import rebase
import errno
@@ -71,7 +71,7 @@
def applybundle(self):
fp = self.opener()
try:
- gen = changegroup.readbundle(fp, self.fname, self.vfs)
+ gen = exchange.readbundle(fp, self.fname, self.vfs)
changegroup.addchangegroup(self.repo, gen, 'unshelve',
'bundle:' + self.vfs.join(self.fname))
finally:
--- a/mercurial/bundlerepo.py Mon Apr 14 14:46:32 2014 -0400
+++ b/mercurial/bundlerepo.py Mon Apr 14 15:33:50 2014 -0400
@@ -14,7 +14,7 @@
from node import nullid
from i18n import _
import os, tempfile, shutil
-import changegroup, util, mdiff, discovery, cmdutil, scmutil
+import changegroup, util, mdiff, discovery, cmdutil, scmutil, exchange
import localrepo, changelog, manifest, filelog, revlog, error
class bundlerevlog(revlog.revlog):
@@ -202,7 +202,7 @@
self.tempfile = None
f = util.posixfile(bundlename, "rb")
- self.bundle = changegroup.readbundle(f, bundlename)
+ self.bundle = exchange.readbundle(f, bundlename)
if self.bundle.compressed():
fdtemp, temp = self.vfs.mkstemp(prefix="hg-bundle-",
suffix=".hg10un")
@@ -220,7 +220,7 @@
fptemp.close()
f = self.vfs.open(self.tempfile, mode="rb")
- self.bundle = changegroup.readbundle(f, bundlename, self.vfs)
+ self.bundle = exchange.readbundle(f, bundlename, self.vfs)
# dict with the mapping 'filename' -> position in the bundle
self.bundlefilespos = {}
--- a/mercurial/changegroup.py Mon Apr 14 14:46:32 2014 -0400
+++ b/mercurial/changegroup.py Mon Apr 14 15:33:50 2014 -0400
@@ -227,25 +227,6 @@
return d
return readexactly(self._fh, n)
-def readbundle(fh, fname, vfs=None):
- header = readexactly(fh, 6)
-
- if not fname:
- fname = "stream"
- if not header.startswith('HG') and header.startswith('\0'):
- fh = headerlessfixup(fh, header)
- header = "HG10UN"
- elif vfs:
- fname = vfs.join(fname)
-
- magic, version, alg = header[0:2], header[2:4], header[4:6]
-
- if magic != 'HG':
- raise util.Abort(_('%s: not a Mercurial bundle') % fname)
- if version != '10':
- raise util.Abort(_('%s: unknown bundle version %s') % (fname, version))
- return unbundle10(fh, alg)
-
class bundle10(object):
deltaheader = _BUNDLE10_DELTA_HEADER
def __init__(self, repo, bundlecaps=None):
--- a/mercurial/commands.py Mon Apr 14 14:46:32 2014 -0400
+++ b/mercurial/commands.py Mon Apr 14 15:33:50 2014 -0400
@@ -20,7 +20,7 @@
import dagparser, context, simplemerge, graphmod
import random
import setdiscovery, treediscovery, dagutil, pvec, localrepo
-import phases, obsolete
+import phases, obsolete, exchange
table = {}
@@ -1736,7 +1736,7 @@
"""lists the contents of a bundle"""
f = hg.openpath(ui, bundlepath)
try:
- gen = changegroup.readbundle(f, bundlepath)
+ gen = exchange.readbundle(f, bundlepath)
if all:
ui.write(("format: id, p1, p2, cset, delta base, len(delta)\n"))
@@ -5807,7 +5807,7 @@
try:
for fname in fnames:
f = hg.openpath(ui, fname)
- gen = changegroup.readbundle(f, fname)
+ gen = exchange.readbundle(f, fname)
modheads = changegroup.addchangegroup(repo, gen, 'unbundle',
'bundle:' + fname)
finally:
--- a/mercurial/exchange.py Mon Apr 14 14:46:32 2014 -0400
+++ b/mercurial/exchange.py Mon Apr 14 15:33:50 2014 -0400
@@ -11,6 +11,25 @@
import util, scmutil, changegroup, base85
import discovery, phases, obsolete, bookmarks, bundle2
+def readbundle(fh, fname, vfs=None):
+ header = changegroup.readexactly(fh, 6)
+
+ if not fname:
+ fname = "stream"
+ if not header.startswith('HG') and header.startswith('\0'):
+ fh = changegroup.headerlessfixup(fh, header)
+ header = "HG10UN"
+ elif vfs:
+ fname = vfs.join(fname)
+
+ magic, version, alg = header[0:2], header[2:4], header[4:6]
+
+ if magic != 'HG':
+ raise util.Abort(_('%s: not a Mercurial bundle') % fname)
+ if version != '10':
+ raise util.Abort(_('%s: unknown bundle version %s') % (fname, version))
+ return changegroup.unbundle10(fh, alg)
+
class pushoperation(object):
"""A object that represent a single push operation
--- a/mercurial/repair.py Mon Apr 14 14:46:32 2014 -0400
+++ b/mercurial/repair.py Mon Apr 14 15:33:50 2014 -0400
@@ -6,7 +6,7 @@
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
-from mercurial import changegroup
+from mercurial import changegroup, exchange
from mercurial.node import short
from mercurial.i18n import _
import errno
@@ -147,7 +147,7 @@
if saveheads or savebases:
ui.note(_("adding branch\n"))
f = vfs.open(chgrpfile, "rb")
- gen = changegroup.readbundle(f, chgrpfile, vfs)
+ gen = exchange.readbundle(f, chgrpfile, vfs)
if not repo.ui.verbose:
# silence internal shuffling chatter
repo.ui.pushbuffer()
--- a/mercurial/wireproto.py Mon Apr 14 14:46:32 2014 -0400
+++ b/mercurial/wireproto.py Mon Apr 14 15:33:50 2014 -0400
@@ -766,7 +766,7 @@
try:
proto.getfile(fp)
fp.seek(0)
- gen = changegroupmod.readbundle(fp, None)
+ gen = exchange.readbundle(fp, None)
r = exchange.unbundle(repo, gen, their_heads, 'serve',
proto._client())
return pushres(r)