# HG changeset patch # User Jun Wu # Date 1490924283 25200 # Node ID ec48d57de11030a2756f4049f094626f1a100767 # Parent 5b93c6fdb3918f1d931ed35c26b8f16ece21639a revlog: make _addrevision only accept rawtext All 3 users of _addrevision use raw: - addrevision: passing rawtext to _addrevision - addgroup: passing rawtext and raw=True to _addrevision - clone: passing rawtext to _addrevision There is no real user using _addrevision(raw=False). On the other hand, _addrevision is low-level code dealing with raw revlog deltas and rawtexts. It should not transform rawtext to non-raw text. This patch removes the "raw" parameter from "_addrevision", and does some rename and doc change to make it clear that "_addrevision" expects rawtext. Archeology shows 2df983125d37 added "raw" flag to "_addrevision", follow-ups e12c0fa1f65b and c1b7b2285522 seem to make the flag unnecessary. test-revlog-raw.py no longer complains. diff -r 5b93c6fdb391 -r ec48d57de110 mercurial/revlog.py --- a/mercurial/revlog.py Thu Mar 30 18:24:23 2017 -0700 +++ b/mercurial/revlog.py Thu Mar 30 18:38:03 2017 -0700 @@ -1577,19 +1577,19 @@ return True - def _addrevision(self, node, text, transaction, link, p1, p2, flags, - cachedelta, ifh, dfh, alwayscache=False, raw=False): + def _addrevision(self, node, rawtext, transaction, link, p1, p2, flags, + cachedelta, ifh, dfh, alwayscache=False): """internal function to add revisions to the log see addrevision for argument descriptions. + + note: "addrevision" takes non-raw text, "_addrevision" takes raw text. + invariants: - - text is optional (can be None); if not set, cachedelta must be set. + - rawtext is optional (can be None); if not set, cachedelta must be set. if both are set, they must correspond to each other. - - raw is optional; if set to True, it indicates the revision data is to - be treated by _processflags() as raw. It is usually set by changegroup - generation and debug commands. """ - btext = [text] + btext = [rawtext] def buildtext(): if btext[0] is not None: return btext[0] @@ -1607,11 +1607,11 @@ fh = ifh else: fh = dfh - basetext = self.revision(baserev, _df=fh, raw=raw) + basetext = self.revision(baserev, _df=fh, raw=True) btext[0] = mdiff.patch(basetext, delta) try: - res = self._processflags(btext[0], flags, 'read', raw=raw) + res = self._processflags(btext[0], flags, 'read', raw=True) btext[0], validatehash = res if validatehash: self.checkhash(btext[0], node, p1=p1, p2=p2) @@ -1663,11 +1663,11 @@ # full versions are inserted when the needed deltas # become comparable to the uncompressed text - if text is None: + if rawtext is None: textlen = mdiff.patchedsize(self.rawsize(cachedelta[0]), cachedelta[1]) else: - textlen = len(text) + textlen = len(rawtext) # should we try to build a delta? if prev != nullrev and self.storedeltachains: @@ -1708,8 +1708,8 @@ if delta is not None: dist, l, data, base, chainbase, chainlen, compresseddeltalen = delta else: - text = buildtext() - data = self.compress(text) + rawtext = buildtext() + data = self.compress(rawtext) l = len(data[1]) + len(data[0]) base = chainbase = curr @@ -1721,11 +1721,11 @@ entry = self._io.packentry(e, self.node, self.version, curr) self._writeentry(transaction, ifh, dfh, entry, data, link, offset) - if alwayscache and text is None: - text = buildtext() + if alwayscache and rawtext is None: + rawtext = buildtext() - if type(text) == str: # only accept immutable objects - self._cache = (node, curr, text) + if type(rawtext) == str: # only accept immutable objects + self._cache = (node, curr, rawtext) self._chainbasecache[curr] = chainbase return node @@ -1847,8 +1847,7 @@ chain = self._addrevision(node, None, transaction, link, p1, p2, flags, (baserev, delta), ifh, dfh, - alwayscache=bool(addrevisioncb), - raw=True) + alwayscache=bool(addrevisioncb)) if addrevisioncb: addrevisioncb(self, chain) diff -r 5b93c6fdb391 -r ec48d57de110 tests/test-revlog-raw.py.out --- a/tests/test-revlog-raw.py.out Thu Mar 30 18:24:23 2017 -0700 +++ b/tests/test-revlog-raw.py.out Thu Mar 30 18:38:03 2017 -0700 @@ -1,4 +1,4 @@ local test passed addgroupcopy test passed clone test passed -abort: crashed: integrity check failed on _destrevlog.i:5 +lowlevelcopy test passed