# HG changeset patch # User FUJIWARA Katsunori # Date 2013-03-29 13:57:15 # Node ID a54ddfae8907b43c9802b8fbebb85fe3604bb869 # Parent c1af1fb314bc96caf58e1dd6031ae3570008af6f 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 in which a filelog 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 changelog and manifest can include such merging someway, but filelogs can't, because "localrepository._filecommit()" converts such merging request to linear history. diff --git a/mercurial/context.py b/mercurial/context.py --- a/mercurial/context.py +++ b/mercurial/context.py @@ -701,9 +701,14 @@ class filectx(object): 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: