--- a/mercurial/revlog.py Wed May 18 23:11:34 2011 +0200
+++ b/mercurial/revlog.py Wed May 18 23:26:26 2011 +0200
@@ -14,7 +14,7 @@
# import stuff from node for others to import from revlog
from node import bin, hex, nullid, nullrev, short #@UnusedImport
from i18n import _
-import ancestor, mdiff, parsers, error, util
+import ancestor, mdiff, parsers, error, util, dagutil
import struct, zlib, errno
_pack = struct.pack
@@ -1086,7 +1086,7 @@
self._basecache = (curr, chainbase)
return node
- def group(self, nodelist, bundler):
+ def group(self, nodelist, bundler, reorder=None):
"""Calculate a delta group, yielding a sequence of changegroup chunks
(strings).
@@ -1098,7 +1098,14 @@
changegroup starts with a full revision.
"""
- revs = sorted([self.rev(n) for n in nodelist])
+ # for generaldelta revlogs, we linearize the revs; this will both be
+ # much quicker and generate a much smaller bundle
+ if (self._generaldelta and reorder is not False) or reorder:
+ dag = dagutil.revlogdag(self)
+ revs = set(self.rev(n) for n in nodelist)
+ revs = dag.linearize(revs)
+ else:
+ revs = sorted([self.rev(n) for n in nodelist])
# if we don't have any revisions touched by these changesets, bail
if not revs: