# HG changeset patch # User liscju <piotr.listkiewicz@gmail.com> # Date 2016-06-23 20:37:17 # Node ID ecbbf4d56ee82b48fe4fa19d68056b9d17eff570 # Parent e5c91dc909f7222bc3e9df01d9bba87986efad47 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 diff --git a/hgext/largefiles/localstore.py b/hgext/largefiles/localstore.py --- a/hgext/largefiles/localstore.py +++ b/hgext/largefiles/localstore.py @@ -47,7 +47,10 @@ class localstore(basestore.basestore): 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') diff --git a/tests/test-largefiles-wireproto.t b/tests/test-largefiles-wireproto.t --- a/tests/test-largefiles-wireproto.t +++ b/tests/test-largefiles-wireproto.t @@ -149,6 +149,14 @@ largefiles clients refuse to push largef $ 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 diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t --- a/tests/test-largefiles.t +++ b/tests/test-largefiles.t @@ -1536,8 +1536,11 @@ revert some files to an older revision 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 @@ revert some files to an older revision [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