# HG changeset patch # User Paul Morelle # Date 1515963586 28800 # Node ID 30f5f33250c8b8a2a712114f06df4c965a5641fb # Parent edc9330acac14d29fd5e8e43a028607f1e161051 revlog: separate diff computation from the collection of other info diff -r edc9330acac1 -r 30f5f33250c8 mercurial/revlog.py --- a/mercurial/revlog.py Fri Jan 12 18:58:44 2018 +0100 +++ b/mercurial/revlog.py Sun Jan 14 12:59:46 2018 -0800 @@ -1935,20 +1935,26 @@ raise return btext[0] + def _builddeltadiff(self, base, node, p1, p2, btext, cachedelta, fh, flags): + t = self._buildtext(node, p1, p2, btext, cachedelta, fh, flags) + if self.iscensored(base): + # deltas based on a censored revision must replace the + # full content in one patch, so delta works everywhere + header = mdiff.replacediffheader(self.rawsize(base), len(t)) + delta = header + t + else: + ptext = self.revision(base, _df=fh, raw=True) + delta = mdiff.textdiff(ptext, t) + + return delta + def _builddeltainfo(self, node, rev, p1, p2, btext, cachedelta, fh, flags): # can we use the cached delta? if cachedelta and cachedelta[0] == rev: delta = cachedelta[1] else: - t = self._buildtext(node, p1, p2, btext, cachedelta, fh, flags) - if self.iscensored(rev): - # deltas based on a censored revision must replace the - # full content in one patch, so delta works everywhere - header = mdiff.replacediffheader(self.rawsize(rev), len(t)) - delta = header + t - else: - ptext = self.revision(rev, _df=fh, raw=True) - delta = mdiff.textdiff(ptext, t) + delta = self._builddeltadiff(rev, node, p1, p2, btext, cachedelta, + fh, flags) header, data = self.compress(delta) deltalen = len(header) + len(data) chainbase = self.chainbase(rev)