[PATCH] linkrev: use the right manifest content when adjusting linrev (issue4499)
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Thu Jan 15 01:26:41 UTC 2015
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at fb.com>
# Date 1421284869 28800
# Wed Jan 14 17:21:09 2015 -0800
# Node ID ab44a72d59209a4b21581a7f7f8de777fa69aea8
# Parent 6c44cef5baa231dbfa311475f56f60b2dc4a7b4d
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.
diff --git a/mercurial/context.py b/mercurial/context.py
--- a/mercurial/context.py
+++ b/mercurial/context.py
@@ -47,11 +47,11 @@ def _adjustlinkrev(repo, path, filelog,
for a in anc:
ac = cl.read(a) # get changeset data (we avoid object creation).
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
# replaces) we could. Such a buggy situation will likely result is crash
# somewhere else at to some point.
diff --git a/tests/test-log.t b/tests/test-log.t
--- a/tests/test-log.t
+++ b/tests/test-log.t
@@ -1840,5 +1840,64 @@ Even when the file revision is missing f
| parent: 0:f7b1eb17ad24
| user: test
| 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 ..
More information about the Mercurial-devel
mailing list