[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