mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
changegroup: extract method that sorts nodes to send
The current implementation of narrowhg needs to influence the order in which nodes are sent to the client. adgar@ and I think this is fixable, but it's going to require pretty substantial time investment, so in the interim we'd like to extract this method. I think it makes the group() code a little more obvious, as it took us a couple of tries to isolate the exact behavior we were observing.
This commit is contained in:
parent
656cb7b663
commit
8945f7f25d
@ -530,6 +530,17 @@ class cg1packer(object):
|
||||
def fileheader(self, fname):
|
||||
return chunkheader(len(fname)) + fname
|
||||
|
||||
# Extracted both for clarity and for overriding in extensions.
|
||||
def _sortgroup(self, revlog, nodelist, lookup):
|
||||
"""Sort nodes for change group and turn them into revnums."""
|
||||
# for generaldelta revlogs, we linearize the revs; this will both be
|
||||
# much quicker and generate a much smaller bundle
|
||||
if (revlog._generaldelta and self._reorder is None) or self._reorder:
|
||||
dag = dagutil.revlogdag(revlog)
|
||||
return dag.linearize(set(revlog.rev(n) for n in nodelist))
|
||||
else:
|
||||
return sorted([revlog.rev(n) for n in nodelist])
|
||||
|
||||
def group(self, nodelist, revlog, lookup, units=None):
|
||||
"""Calculate a delta group, yielding a sequence of changegroup chunks
|
||||
(strings).
|
||||
@ -549,14 +560,7 @@ class cg1packer(object):
|
||||
yield self.close()
|
||||
return
|
||||
|
||||
# for generaldelta revlogs, we linearize the revs; this will both be
|
||||
# much quicker and generate a much smaller bundle
|
||||
if (revlog._generaldelta and self._reorder is None) or self._reorder:
|
||||
dag = dagutil.revlogdag(revlog)
|
||||
revs = set(revlog.rev(n) for n in nodelist)
|
||||
revs = dag.linearize(revs)
|
||||
else:
|
||||
revs = sorted([revlog.rev(n) for n in nodelist])
|
||||
revs = self._sortgroup(revlog, nodelist, lookup)
|
||||
|
||||
# add the parent of the first rev
|
||||
p = revlog.parentrevs(revs[0])[0]
|
||||
|
Loading…
Reference in New Issue
Block a user