[PATCH 3 of 4 STABLE] committablefilectx: propagate ancestry info to parent to fix annotation

Yuya Nishihara yuya at tcha.org
Sat Apr 18 06:28:13 CDT 2015


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1429333855 -32400
#      Sat Apr 18 14:10:55 2015 +0900
# Branch stable
# Node ID 5551511c8a017481b16c0cdbc4b2deb3d7b01d28
# Parent  54242b301d723b516a27932e13d83fd213a0e3bb
committablefilectx: propagate ancestry info to parent to fix annotation

Before this patch, annotating working directory could include wrong revisions
that were hidden or belonged to different branches. This fixes wfctx.parents()
to set _descendantrev so that all ancestors can take advantage of the linkrev
adjustment introduced at c48924787eaa. _adjustlinkrev() can handle 'None'
revision thanks to 5a12ef618c03.

diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -1618,7 +1618,7 @@ class committablefilectx(basefilectx):
         for pc in pcl[1:]:
             pl.append((path, filenode(pc, path), fl))
 
-        return [filectx(self._repo, p, fileid=n, filelog=l)
+        return [self._parentfilectx(p, fileid=n, filelog=l)
                 for p, n, l in pl if n != nullid]
 
     def children(self):
diff --git a/tests/test-annotate.t b/tests/test-annotate.t
--- a/tests/test-annotate.t
+++ b/tests/test-annotate.t
@@ -556,6 +556,7 @@ create history with a filerev whose link
   grafting 1:fd27c222e3e6 "contentB"
   $ echo C >> a
   $ hg commit -m 'contentC'
+  $ echo W >> a
   $ hg log -G
   @  changeset:   4:072f1e8df249
   |  tag:         tip
@@ -592,6 +593,12 @@ Annotate should list ancestor of startin
   3: B
   4: C
 
+  $ hg annotate a -r 'wdir()'
+  0 : A
+  3 : B
+  4 : C
+  4+: W
+
 Even when the starting revision is the linkrev-shadowed one:
 
   $ hg annotate a -r 3


More information about the Mercurial-devel mailing list