largefiles: check file in the repo store before checking remotely (issue5257)
Problem was files to check were gathered in the repository where
the verify was launched but verification was done on the remote
store. It was observed when user committed in cloned repository
and ran verify before pushing - committed files were marked
as non existing.
This commit fixes this by checking in the remote store only files
that are not existing in the repository store where verify was launched.
Solution is similiar to fd288d118074
--- a/hgext/largefiles/localstore.py Mon Jun 27 10:33:33 2016 +0200
+++ b/hgext/largefiles/localstore.py Thu Jun 23 22:37:17 2016 +0200
@@ -47,7 +47,10 @@
def _verifyfiles(self, contents, filestocheck):
failed = False
for cset, filename, expectedhash in filestocheck:
- storepath, exists = lfutil.findstorepath(self.remote, expectedhash)
+ storepath, exists = lfutil.findstorepath(self.repo, expectedhash)
+ if not exists:
+ storepath, exists = lfutil.findstorepath(
+ self.remote, expectedhash)
if not exists:
self.ui.warn(
_('changeset %s: %s references missing %s\n')
--- a/tests/test-largefiles-wireproto.t Mon Jun 27 10:33:33 2016 +0200
+++ b/tests/test-largefiles-wireproto.t Thu Jun 23 22:37:17 2016 +0200
@@ -149,6 +149,14 @@
$ hg commit -m "m2"
Invoking status precommit hook
A f2
+ $ hg verify --large
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 2 files, 2 changesets, 2 total revisions
+ searching 1 changesets for largefiles
+ verified existence of 1 revisions of 1 largefiles
$ hg serve --config extensions.largefiles=! -R ../r6 -d -p $HGPORT --pid-file ../hg.pid
$ cat ../hg.pid >> $DAEMON_PIDS
$ hg push http://localhost:$HGPORT
--- a/tests/test-largefiles.t Mon Jun 27 10:33:33 2016 +0200
+++ b/tests/test-largefiles.t Thu Jun 23 22:37:17 2016 +0200
@@ -1536,8 +1536,11 @@
searching 1 changesets for largefiles
verified existence of 3 revisions of 3 largefiles
-- introduce missing blob in local store repo and make sure that this is caught:
+- introduce missing blob in local store repo and remote store
+and make sure that this is caught:
+
$ mv $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928 .
+ $ rm .hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
$ hg verify --large
checking changesets
checking manifests
@@ -1556,7 +1559,8 @@
[1]
- cleanup
- $ mv e166e74c7303192238d60af5a9c4ce9bef0b7928 $TESTTMP/d/.hg/largefiles/
+ $ cp e166e74c7303192238d60af5a9c4ce9bef0b7928 $TESTTMP/d/.hg/largefiles/
+ $ mv e166e74c7303192238d60af5a9c4ce9bef0b7928 .hg/largefiles/
- verifying all revisions will fail because we didn't clone all largefiles to d:
$ echo 'T-shirt' > $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4