[PATCH V2] revlog: use raw revision for rawsize

Jun Wu quark at fb.com
Mon Apr 3 01:58:39 UTC 2017


# HG changeset patch
# User Jun Wu <quark at fb.com>
# Date 1491184623 25200
#      Sun Apr 02 18:57:03 2017 -0700
# Node ID 8482a52e811195186399f21b87a1a6a2760593fa
# Parent  04ec317b81280c189fcea33a05c8cbbac3c186b1
# Available At https://bitbucket.org/quark-zju/hg-draft
#              hg pull https://bitbucket.org/quark-zju/hg-draft -r 8482a52e8111
revlog: use raw revision for rawsize

When writing the revlog-ng index, the third field is len(rawtext). See
revlog._addrevision:

    textlen = len(rawtext)
    ....
    e = (offset_type(offset, flags), l, textlen,
         base, link, p1r, p2r, node)
    self.index.insert(-1, e)

Therefore, revlog.index[rev][2] returned by revlog.rawsize should be
len(rawtext), where "rawtext" is revlog.revision(raw=True).

Unfortunately it's hard to add a test for this code path because "if l >= 0"
catches most cases.

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -445,5 +445,5 @@ class revlog(object):
             return l
 
-        t = self.revision(rev)
+        t = self.revision(rev, raw=True)
         return len(t)
     size = rawsize


More information about the Mercurial-devel mailing list