bundle2: move `readbundle` into the `exchange` module
authorPierre-Yves David <pierre-yves.david@fb.com>
Mon, 14 Apr 2014 15:33:50 -0400
changeset 21063 7ca4f2049d3b
parent 21062 e7c0a65a5c9c
child 21064 4d9d490d7bbe
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.
hgext/shelve.py
mercurial/bundlerepo.py
mercurial/changegroup.py
mercurial/commands.py
mercurial/exchange.py
mercurial/repair.py
mercurial/wireproto.py
--- 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)