# HG changeset patch # User FUJIWARA Katsunori # Date 1364565435 -32400 # 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 -r c1af1fb314bc -r a54ddfae8907 mercurial/context.py --- a/mercurial/context.py Wed Apr 17 00:29:54 2013 +0400 +++ b/mercurial/context.py Fri Mar 29 22:57:15 2013 +0900 @@ -701,9 +701,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: