# HG changeset patch # User Valentin Gatien-Baron # Date 2019-01-21 21:36:16 # Node ID 6e9ba867a9461adcca7b08d5479ae5f74d1473d2 # Parent 66c27df1be84b1bf0524a7660468bae360012866 delta: move some delta chain related computation earlier in deltainfo They are some more optimization change that will make use of this in the function. So we retrieve the data earlier. diff --git a/mercurial/revlogutils/deltas.py b/mercurial/revlogutils/deltas.py --- a/mercurial/revlogutils/deltas.py +++ b/mercurial/revlogutils/deltas.py @@ -932,6 +932,21 @@ class deltacomputer(object): def _builddeltainfo(self, revinfo, base, fh): # can we use the cached delta? + revlog = self.revlog + chainbase = revlog.chainbase(base) + if revlog._generaldelta: + deltabase = base + else: + deltabase = chainbase + snapshotdepth = None + if revlog._sparserevlog and deltabase == nullrev: + snapshotdepth = 0 + elif revlog._sparserevlog and revlog.issnapshot(deltabase): + # A delta chain should always be one full snapshot, + # zero or more semi-snapshots, and zero or more deltas + p1, p2 = revlog.rev(revinfo.p1), revlog.rev(revinfo.p2) + if deltabase not in (p1, p2) and revlog.issnapshot(deltabase): + snapshotdepth = len(revlog._deltachain(deltabase)[0]) delta = None if revinfo.cachedelta: cachebase, cachediff = revinfo.cachedelta @@ -945,31 +960,14 @@ class deltacomputer(object): delta = revinfo.cachedelta[1] if delta is None: delta = self._builddeltadiff(base, revinfo, fh) - revlog = self.revlog header, data = revlog.compress(delta) deltalen = len(header) + len(data) - chainbase = revlog.chainbase(base) offset = revlog.end(len(revlog) - 1) dist = deltalen + offset - revlog.start(chainbase) - if revlog._generaldelta: - deltabase = base - else: - deltabase = chainbase chainlen, compresseddeltalen = revlog._chaininfo(base) chainlen += 1 compresseddeltalen += deltalen - revlog = self.revlog - snapshotdepth = None - if deltabase == nullrev: - snapshotdepth = 0 - elif revlog._sparserevlog and revlog.issnapshot(deltabase): - # A delta chain should always be one full snapshot, - # zero or more semi-snapshots, and zero or more deltas - p1, p2 = revlog.rev(revinfo.p1), revlog.rev(revinfo.p2) - if deltabase not in (p1, p2) and revlog.issnapshot(deltabase): - snapshotdepth = len(revlog._deltachain(deltabase)[0]) - return _deltainfo(dist, deltalen, (header, data), deltabase, chainbase, chainlen, compresseddeltalen, snapshotdepth)