annotate: discard refcount of discarded annotation for memory efficiency
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Thu, 18 Apr 2013 19:50:04 +0900
changeset 19061 36067f5baf24
parent 19060 c010cb6fdef7
child 19062 365b0de17c1c
annotate: discard refcount of discarded annotation for memory efficiency Before this patch, refcount (managed in "needed") of the annotation result is kept as 1, even if corresponding annotation result is discarded from "hist", because it isn't decreased and discarded. In the history tree including merging revision, the most recent common ancestor of merged revisions is scanned twice. Refcount of such ancestor never becomes 0, because refcount is started from 1 at the second scanning. This prevents annotation results of merging revision in "hist" from being discarded, and decreases memory efficiency. This patch discards refcount of the annotation result, when the corresponding annotation is discarded from "hist".
mercurial/context.py
--- a/mercurial/context.py	Thu Apr 18 16:46:09 2013 +0400
+++ b/mercurial/context.py	Thu Apr 18 19:50:04 2013 +0900
@@ -713,6 +713,7 @@
                         curr = pair(hist[p], curr)
                     if needed[p] == 1:
                         del hist[p]
+                        del needed[p]
                     else:
                         needed[p] -= 1