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.
This commit is contained in:
Pierre-Yves David 2015-01-14 17:21:09 -08:00
parent 4accabb1fb
commit dc490d9ff6
2 changed files with 60 additions and 1 deletions

View File

@ -49,7 +49,7 @@ def _adjustlinkrev(repo, path, filelog, fnode, srcrev, inclusive=False):
if path in ac[3]: # checking the 'files' field. if path in ac[3]: # checking the 'files' field.
# The file has been touched, check if the content is similar # The file has been touched, check if the content is similar
# to the one we search for. # to the one we search for.
if fnode == ma.readdelta(ac[0]).get(path): if fnode == ma.readfast(ac[0]).get(path):
return a return a
# In theory, we should never get out of that loop without a result. But # 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 # if manifest uses a buggy file revision (not children of the one it

View File

@ -1842,3 +1842,62 @@ Even when the file revision is missing from some head:
| date: Thu Jan 01 00:00:00 1970 +0000 | date: Thu Jan 01 00:00:00 1970 +0000
| summary: 1 | 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 ..