[PATCH] largefiles: check file in the repo store before checking remotely (issue4686)
Piotr Listkiewicz
piotr.listkiewicz at gmail.com
Fri Jun 24 05:47:27 EDT 2016
In commit message i wrote bad issue number, it should be 5257(verify shows
unpushed largefiles as missing) , resend it or it will be fixed in flight?
2016-06-24 9:47 GMT+02:00 liscju <piotr.listkiewicz at gmail.com>:
> # HG changeset patch
> # User liscju <piotr.listkiewicz at gmail.com>
> # Date 1466714237 -7200
> # Thu Jun 23 22:37:17 2016 +0200
> # Node ID 2670e4331e0c763b04c0de2e1149917ccca42364
> # Parent 6d96658a22b0fc1eb210c99c5629dd69fedf3006
> largefiles: check file in the repo store before checking remotely
> (issue4686)
>
> 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
> @@ -45,10 +45,23 @@ class localstore(basestore.basestore):
> with open(path, 'rb') as fd:
> return lfutil.copyandhash(fd, tmpfile)
>
> + def _hashesavailablelocally(self, hashes):
> + localhashes = [hash for hash in hashes
> + if lfutil.instore(self.repo, hash)]
> + return localhashes
> +
> def _verifyfiles(self, contents, filestocheck):
> failed = False
> + expectedhashes = [expectedhash
> + for cset, filename, expectedhash in
> filestocheck]
> + localhashes = self._hashesavailablelocally(expectedhashes)
> for cset, filename, expectedhash in filestocheck:
> - storepath, exists = lfutil.findstorepath(self.remote,
> expectedhash)
> + if expectedhash in localhashes:
> + storepath, exists = lfutil.findstorepath(
> + self.repo, expectedhash)
> + else:
> + 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20160624/3cc714a5/attachment.html>
More information about the Mercurial-devel
mailing list