Patchwork [V2] largefiles: check file in the repo store before checking remotely (issue5257)

login
register
mail settings
Submitter liscju
Date June 27, 2016, 7:19 a.m.
Message ID <220010aa03f604c1d811.1467011959@liscju-VirtualBox>
Download mbox | patch
Permalink /patch/15633/
State Accepted
Headers show

Comments

liscju - June 27, 2016, 7:19 a.m.
# HG changeset patch
# User liscju <piotr.listkiewicz@gmail.com>
# Date 1466714237 -7200
#      Thu Jun 23 22:37:17 2016 +0200
# Node ID 220010aa03f604c1d811bd8f54a90b1c69e790f9
# Parent  6d96658a22b0fc1eb210c99c5629dd69fedf3006
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
Yuya Nishihara - June 27, 2016, 12:23 p.m.
On Mon, 27 Jun 2016 09:19:19 +0200, liscju wrote:
> # HG changeset patch
> # User liscju <piotr.listkiewicz@gmail.com>
> # Date 1466714237 -7200
> #      Thu Jun 23 22:37:17 2016 +0200
> # Node ID 220010aa03f604c1d811bd8f54a90b1c69e790f9
> # Parent  6d96658a22b0fc1eb210c99c5629dd69fedf3006
> largefiles: check file in the repo store before checking remotely (issue5257)

Queued this, thanks.

Patch

diff --git a/hgext/largefiles/localstore.py b/hgext/largefiles/localstore.py
--- a/hgext/largefiles/localstore.py
+++ b/hgext/largefiles/localstore.py
@@ -48,7 +48,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