[PATCH 1 of 2 STABLE] annotate: reuse already calculated annotation

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Thu Mar 28 05:36:57 CDT 2013


# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1364464124 -32400
# Branch stable
# Node ID 53691948fe037f64fe97d4eb7fad76ebda4edf6a
# Parent  43dfb6fce6a76168766f3b73f4c991ab811590ec
annotate: reuse already calculated annotation

Before this patch, annotation is re-calculated even if it is already
calculated. This may cause unexpected annotation, because already
cleared "pcache" ("pcache[f] = []") prevents from scanning ancestors.

This patch reuses already calculated annotation if it is available.

In fact, "reusable" situation should be seen only on legacy
repositories which include the merging between the revision and its
ancestor, because:

  - tree is scanned in depth-first

    without such merging, annotation result should be released soon

  - recent Mercurial doesn't allow such merging

diff -r 43dfb6fce6a7 -r 53691948fe03 mercurial/context.py
--- a/mercurial/context.py	Fri Mar 01 11:54:36 2013 -0300
+++ b/mercurial/context.py	Thu Mar 28 18:48:44 2013 +0900
@@ -710,9 +710,14 @@
                     needed[p] = needed.get(p, 0) + 1
             if ready:
                 visit.pop()
-                curr = decorate(f.data(), f)
+                reusable = f in hist
+                if reusable:
+                    curr = hist[f]
+                else:
+                    curr = decorate(f.data(), f)
                 for p in pl:
-                    curr = pair(hist[p], curr)
+                    if not reusable:
+                        curr = pair(hist[p], curr)
                     if needed[p] == 1:
                         del hist[p]
                     else:


More information about the Mercurial-devel mailing list