Submitter | Boris Feld |
---|---|
Date | Sept. 13, 2018, 2:27 p.m. |
Message ID | <8b194b4eacc6b0ec1918.1536848873@localhost.localdomain> |
Download | mbox | patch |
Permalink | /patch/34605/ |
State | Accepted |
Headers | show |
Comments
> On Sep 13, 2018, at 10:27, Boris FELD <boris.feld@octobus.net> wrote: > > # HG changeset patch > # User Boris Feld <boris.feld@octobus.net> > # Date 1536561101 -7200 > # Mon Sep 10 08:31:41 2018 +0200 > # Node ID 8b194b4eacc6b0ec191863c1385ec47124939fce > # Parent bf9d5d5513d0babd5e1d59df1c1fa26c244faae5 > # EXP-Topic sparse-snapshot > # Available At https://bitbucket.org/octobus/mercurial-devel/ > # hg pull https://bitbucket.org/octobus/mercurial-devel/ -r 8b194b4eacc6 > revlog: reuse cached delta for identical base revision (issue5975) queued, thanks
Patch
diff --git a/mercurial/revlogutils/deltas.py b/mercurial/revlogutils/deltas.py --- a/mercurial/revlogutils/deltas.py +++ b/mercurial/revlogutils/deltas.py @@ -832,9 +832,18 @@ class deltacomputer(object): def _builddeltainfo(self, revinfo, base, fh): # can we use the cached delta? - if revinfo.cachedelta and revinfo.cachedelta[0] == base: - delta = revinfo.cachedelta[1] - else: + delta = None + if revinfo.cachedelta: + cachebase, cachediff = revinfo.cachedelta + #check if the diff still apply + currentbase = cachebase + while (currentbase != nullrev + and currentbase != base + and self.revlog.length(currentbase) == 0): + currentbase = self.revlog.deltaparent(currentbase) + if currentbase == base: + delta = revinfo.cachedelta[1] + if delta is None: delta = self._builddeltadiff(base, revinfo, fh) revlog = self.revlog header, data = revlog.compress(delta)