changeset 23865:81349f4b47f4

linkrev: use the right manifest content when adjusting linrev (issue4499) When the manifest revision is stored as a delta against a non-parent revision, '_adjustlinkrev' could miss some file update because it was using the delta only. We now use the 'fastread' method that uses the delta only when it makes sense. A test showcasing on the of possible issue have been added.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Wed, 14 Jan 2015 17:21:09 -0800
parents 6c44cef5baa2
children 9dd442148301
files mercurial/context.py tests/test-log.t
diffstat 2 files changed, 60 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/context.py	Wed Jan 14 16:57:00 2015 -0800
+++ b/mercurial/context.py	Wed Jan 14 17:21:09 2015 -0800
@@ -49,7 +49,7 @@
             if path in ac[3]: # checking the 'files' field.
                 # The file has been touched, check if the content is similar
                 # to the one we search for.
-                if fnode == ma.readdelta(ac[0]).get(path):
+                if fnode == ma.readfast(ac[0]).get(path):
                     return a
         # In theory, we should never get out of that loop without a result. But
         # if manifest uses a buggy file revision (not children of the one it
--- a/tests/test-log.t	Wed Jan 14 16:57:00 2015 -0800
+++ b/tests/test-log.t	Wed Jan 14 17:21:09 2015 -0800
@@ -1842,3 +1842,62 @@
   |  date:        Thu Jan 01 00:00:00 1970 +0000
   |  summary:     1
   |
+  $ cd ..
+
+Check proper report when the manifest changes but not the file issue4499
+------------------------------------------------------------------------
+
+  $ hg init issue4499
+  $ cd issue4499
+  $ for f in A B C D F E G H I J K L M N O P Q R S T U; do
+  >     echo 1 > $f;
+  >     hg add $f;
+  > done
+  $ hg commit -m 'A1B1C1'
+  $ echo 2 > A
+  $ echo 2 > B
+  $ echo 2 > C
+  $ hg commit -m 'A2B2C2'
+  $ hg up 0
+  3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ echo 3 > A
+  $ echo 2 > B
+  $ echo 2 > C
+  $ hg commit -m 'A3B2C2'
+  created new head
+
+  $ hg log -G
+  @  changeset:   2:fe5fc3d0eb17
+  |  tag:         tip
+  |  parent:      0:abf4f0e38563
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     A3B2C2
+  |
+  | o  changeset:   1:07dcc6b312c0
+  |/   user:        test
+  |    date:        Thu Jan 01 00:00:00 1970 +0000
+  |    summary:     A2B2C2
+  |
+  o  changeset:   0:abf4f0e38563
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     A1B1C1
+  
+
+Log -f on B should reports current changesets
+
+  $ hg log -fG B
+  @  changeset:   2:fe5fc3d0eb17
+  |  tag:         tip
+  |  parent:      0:abf4f0e38563
+  |  user:        test
+  |  date:        Thu Jan 01 00:00:00 1970 +0000
+  |  summary:     A3B2C2
+  |
+  o  changeset:   0:abf4f0e38563
+     user:        test
+     date:        Thu Jan 01 00:00:00 1970 +0000
+     summary:     A1B1C1
+  
+  $ cd ..