[PATCH 4 of 9] bundle-ng: move gengroup into bundler
Sune Foldager
cryo at cyanite.org
Thu Feb 14 13:40:14 CST 2013
# HG changeset patch
# User Sune Foldager <cryo at cyanite.org>
# Date 1360455164 -3600
# Node ID 1107b6c3ba5652700ecaa0184d00490f81d2b063
# Parent ad5a6d13a57e28c75167facacc2811cefc014155
bundle-ng: move gengroup into bundler
diff -r ad5a6d13a57e -r 1107b6c3ba56 mercurial/changegroup.py
--- a/mercurial/changegroup.py Sat Feb 09 23:42:03 2013 +0100
+++ b/mercurial/changegroup.py Sun Feb 10 01:12:44 2013 +0100
@@ -6,7 +6,7 @@
# GNU General Public License version 2 or any later version.
from i18n import _
-from node import nullrev
+from node import nullrev, hex
import mdiff, util, dagutil
import struct, os, bz2, zlib, tempfile
@@ -225,11 +225,24 @@
class bundle10(object):
deltaheader = _BUNDLE10_DELTA_HEADER
- def __init__(self, bundlecaps=None):
+ def __init__(self, bundlecaps=None, repo=None):
# Set of capabilities we can use to build the bundle.
if bundlecaps is None:
bundlecaps = set()
self._bundlecaps = bundlecaps
+ if repo is not None:
+ self._changelog = repo.changelog
+ self._manifest = repo.manifest
+ reorder = repo.ui.config('bundle', 'reorder', 'auto')
+ if reorder == 'auto':
+ reorder = None
+ else:
+ reorder = util.parsebool(reorder)
+ else:
+ reorder = False
+ self._repo = repo
+ self._reorder = reorder
+ self.count = [0, 0]
def start(self, lookup):
self._lookup = lookup
def close(self):
@@ -276,6 +289,43 @@
yield self.close()
+ def generate(self, clnodes, getmfnodes, getfiles, getfilenodes, source):
+ '''yield a sequence of changegroup chunks (strings)'''
+ repo = self._repo
+ cl = self._changelog
+ mf = self._manifest
+ reorder = self._reorder
+ progress = repo.ui.progress
+ count = self.count
+ _bundling = _('bundling')
+
+ count[:] = [0, len(clnodes)]
+ for chunk in self.group(clnodes, cl, reorder=reorder):
+ yield chunk
+ progress(_bundling, None)
+
+ for chunk in self.group(getmfnodes(), mf, reorder=reorder):
+ yield chunk
+ progress(_bundling, None)
+
+ changedfiles = getfiles()
+ count[:] = [0, len(changedfiles)]
+ for fname in sorted(changedfiles):
+ filerevlog = repo.file(fname)
+ if not len(filerevlog):
+ raise util.Abort(_("empty or missing revlog for %s")
+ % fname)
+ nodelist = getfilenodes(fname, filerevlog)
+ if nodelist:
+ count[0] += 1
+ yield self.fileheader(fname)
+ for chunk in self.group(nodelist, filerevlog, reorder):
+ yield chunk
+ yield self.close()
+ progress(_bundling, None)
+
+ if clnodes:
+ repo.hook('outgoing', node=hex(clnodes[0]), source=source)
def revchunk(self, revlog, rev, prev):
node = revlog.node(rev)
More information about the Mercurial-devel
mailing list