comparison mercurial/revlog.py @ 35639:30f5f33250c8

revlog: separate diff computation from the collection of other info
author Paul Morelle <paul.morelle@octobus.net>
date Sun, 14 Jan 2018 12:59:46 -0800
parents edc9330acac1
children fa4278171add
comparison
equal deleted inserted replaced
35638:edc9330acac1 35639:30f5f33250c8
1933 # must pass the censored index flag to add censored revisions 1933 # must pass the censored index flag to add censored revisions
1934 if not flags & REVIDX_ISCENSORED: 1934 if not flags & REVIDX_ISCENSORED:
1935 raise 1935 raise
1936 return btext[0] 1936 return btext[0]
1937 1937
1938 def _builddeltadiff(self, base, node, p1, p2, btext, cachedelta, fh, flags):
1939 t = self._buildtext(node, p1, p2, btext, cachedelta, fh, flags)
1940 if self.iscensored(base):
1941 # deltas based on a censored revision must replace the
1942 # full content in one patch, so delta works everywhere
1943 header = mdiff.replacediffheader(self.rawsize(base), len(t))
1944 delta = header + t
1945 else:
1946 ptext = self.revision(base, _df=fh, raw=True)
1947 delta = mdiff.textdiff(ptext, t)
1948
1949 return delta
1950
1938 def _builddeltainfo(self, node, rev, p1, p2, btext, cachedelta, fh, flags): 1951 def _builddeltainfo(self, node, rev, p1, p2, btext, cachedelta, fh, flags):
1939 # can we use the cached delta? 1952 # can we use the cached delta?
1940 if cachedelta and cachedelta[0] == rev: 1953 if cachedelta and cachedelta[0] == rev:
1941 delta = cachedelta[1] 1954 delta = cachedelta[1]
1942 else: 1955 else:
1943 t = self._buildtext(node, p1, p2, btext, cachedelta, fh, flags) 1956 delta = self._builddeltadiff(rev, node, p1, p2, btext, cachedelta,
1944 if self.iscensored(rev): 1957 fh, flags)
1945 # deltas based on a censored revision must replace the
1946 # full content in one patch, so delta works everywhere
1947 header = mdiff.replacediffheader(self.rawsize(rev), len(t))
1948 delta = header + t
1949 else:
1950 ptext = self.revision(rev, _df=fh, raw=True)
1951 delta = mdiff.textdiff(ptext, t)
1952 header, data = self.compress(delta) 1958 header, data = self.compress(delta)
1953 deltalen = len(header) + len(data) 1959 deltalen = len(header) + len(data)
1954 chainbase = self.chainbase(rev) 1960 chainbase = self.chainbase(rev)
1955 offset = self.end(len(self) - 1) 1961 offset = self.end(len(self) - 1)
1956 dist = deltalen + offset - self.start(chainbase) 1962 dist = deltalen + offset - self.start(chainbase)