[PATCH V2] largefiles: makes verify work on local content by default (issue4242) (BC)

liscju piotr.listkiewicz at gmail.com
Wed Apr 13 15:07:20 UTC 2016


# HG changeset patch
# User liscju <piotr.listkiewicz at gmail.com>
# Date 1456917749 -3600
#      Wed Mar 02 12:22:29 2016 +0100
# Node ID 07d5186eae6c051658e09a5f256ee525eb317de3
# Parent  02be5fc18c0c70c087a9d1ab5ffe5afce926f227
largefiles: makes verify work on local content by default (issue4242) (BC)

Before this commit largefiles verify options always tried to do
verification on the remote store by default. Fix this by
making verification run on local store.

diff -r 02be5fc18c0c -r 07d5186eae6c hgext/largefiles/basestore.py
--- a/hgext/largefiles/basestore.py	Wed Mar 09 10:47:33 2016 -0500
+++ b/hgext/largefiles/basestore.py	Wed Mar 02 12:22:29 2016 +0100
@@ -219,3 +219,7 @@ def _openstore(repo, remote=None, put=Fa
 
     raise error.Abort(_('%s does not appear to be a largefile store') %
                      util.hidepassword(path))
+
+def _openlocalstore(repo):
+    ui = repo.ui
+    return localstore.localstore(ui, repo, repo)
diff -r 02be5fc18c0c -r 07d5186eae6c hgext/largefiles/lfcommands.py
--- a/hgext/largefiles/lfcommands.py	Wed Mar 09 10:47:33 2016 -0500
+++ b/hgext/largefiles/lfcommands.py	Wed Mar 02 12:22:29 2016 +0100
@@ -368,7 +368,7 @@ def verifylfiles(ui, repo, all=False, co
     else:
         revs = ['.']
 
-    store = basestore._openstore(repo)
+    store = basestore._openlocalstore(repo)
     return store.verify(revs, contents=contents)
 
 def cachelfiles(ui, repo, node, filelist=None):
diff -r 02be5fc18c0c -r 07d5186eae6c tests/test-largefiles-wireproto.t
--- a/tests/test-largefiles-wireproto.t	Wed Mar 09 10:47:33 2016 -0500
+++ b/tests/test-largefiles-wireproto.t	Wed Mar 02 12:22:29 2016 +0100
@@ -228,10 +228,24 @@ Archive contains largefiles
       testing: empty-default/f1         OK
   No errors detected in compressed data of archive.zip.
 
-test 'verify' with remotestore:
+test 'verify' on original corrupted repository:
 
   $ rm "${USERCACHE}"/02a439e5c31c526465ab1a0ca1f431f76b827b90
   $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
+  $ hg -R empty verify --large --lfa
+  checking changesets
+  checking manifests
+  crosschecking files in changesets and manifests
+  checking files
+  1 files, 1 changesets, 1 total revisions
+  searching 1 changesets for largefiles
+  changeset 0:cf03e5bb9936: f1 references missing $TESTTMP/empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 (glob)
+  verified existence of 1 revisions of 1 largefiles
+  [1]
+
+test 'verify' on http cloned repository, repo wasn't updated so
+it lacks large file
+
   $ hg -R http-clone verify --large --lfa
   checking changesets
   checking manifests
@@ -239,11 +253,14 @@ test 'verify' with remotestore:
   checking files
   1 files, 1 changesets, 1 total revisions
   searching 1 changesets for largefiles
-  changeset 0:cf03e5bb9936: f1 missing
+  changeset 0:cf03e5bb9936: f1 references missing $TESTTMP/http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 (glob)
   verified existence of 1 revisions of 1 largefiles
   [1]
   $ mv 02a439e5c31c526465ab1a0ca1f431f76b827b90 empty/.hg/largefiles/
+  $ hg -R empty -q verify --large --lfa
   $ hg -R http-clone -q verify --large --lfa
+  changeset 0:cf03e5bb9936: f1 references missing $TESTTMP/http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 (glob)
+  [1]
 
 largefiles pulled on update - a largefile missing on the server:
   $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
@@ -275,7 +292,9 @@ largefiles pulled on update - a largefil
   checking files
   1 files, 1 changesets, 1 total revisions
   searching 1 changesets for largefiles
+  changeset 0:cf03e5bb9936: f1 references missing $TESTTMP/http-clone/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 (glob)
   verified contents of 1 revisions of 1 largefiles
+  [1]
   $ hg -R http-clone up -Cqr null
 
 largefiles pulled on update - no server side problems:
@@ -301,6 +320,14 @@ largefiles pulled on update - no server 
   $ ls http-clone-usercache/*
   http-clone-usercache/02a439e5c31c526465ab1a0ca1f431f76b827b90
 
+test local verify doesn't see only server repository corruption:
+
+  $ mv empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 .
+  $ hg -R empty -q verify --large --lfa
+  changeset 0:cf03e5bb9936: f1 references missing $TESTTMP/empty/.hg/largefiles/02a439e5c31c526465ab1a0ca1f431f76b827b90 (glob)
+  [1]
+  $ hg -R http-clone -q verify --large --lfa
+
   $ rm -rf empty http-clone*
 
 used all HGPORTs, kill all daemons
diff -r 02be5fc18c0c -r 07d5186eae6c tests/test-largefiles.t
--- a/tests/test-largefiles.t	Wed Mar 09 10:47:33 2016 -0500
+++ b/tests/test-largefiles.t	Wed Mar 02 12:22:29 2016 +0100
@@ -1536,9 +1536,9 @@ 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 original local store repo and make sure that this is caught:
   $ mv $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928 .
-  $ hg verify --large
+  $ hg -R ../d verify --large
   checking changesets
   checking manifests
   crosschecking files in changesets and manifests
@@ -1549,18 +1549,32 @@ revert some files to an older revision
   verified existence of 3 revisions of 3 largefiles
   [1]
 
-- introduce corruption and make sure that it is caught when checking content:
+- corruption in original repo should not be visible in cloned repo
+
+  $ hg verify --large
+  checking changesets
+  checking manifests
+  crosschecking files in changesets and manifests
+  checking files
+  10 files, 10 changesets, 28 total revisions
+  searching 1 changesets for largefiles
+  verified existence of 3 revisions of 3 largefiles
+
+- introduce corruption in original repo and make sure that it is caught when checking content:
   $ echo '5 cents' > $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928
-  $ hg verify -q --large --lfc
+  $ hg -R ../d verify -q --large --lfc
   changeset 9:598410d3eb9a: sub/large4 references corrupted $TESTTMP/d/.hg/largefiles/e166e74c7303192238d60af5a9c4ce9bef0b7928 (glob)
   [1]
 
+- but corruption of file content in original repo should not be visible in cloned repository
+  $ hg verify -q --large --lfc
+
 - cleanup
   $ mv e166e74c7303192238d60af5a9c4ce9bef0b7928 $TESTTMP/d/.hg/largefiles/
 
 - verifying all revisions will fail because we didn't clone all largefiles to d:
   $ echo 'T-shirt' > $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
-  $ hg verify -q --lfa --lfc
+  $ hg -R ../d verify -q --lfa --lfc
   changeset 0:30d30fe6a5be: large1 references missing $TESTTMP/d/.hg/largefiles/4669e532d5b2c093a78eca010077e708a071bb64 (glob)
   changeset 0:30d30fe6a5be: sub/large2 references missing $TESTTMP/d/.hg/largefiles/1deebade43c8c498a3c8daddac0244dc55d1331d (glob)
   changeset 1:ce8896473775: large1 references missing $TESTTMP/d/.hg/largefiles/5f78770c0e77ba4287ad6ef3071c9bf9c379742f (glob)
@@ -1573,6 +1587,20 @@ revert some files to an older revision
   changeset 6:4355d653f84f: large3 references missing $TESTTMP/d/.hg/largefiles/7838695e10da2bb75ac1156565f40a2595fa2fa0 (glob)
   [1]
 
+- veryfying all revisions on e repository will fail as well
+  $ hg verify -q --lfa --lfc
+  changeset 0:30d30fe6a5be: large1 references missing $TESTTMP/e/.hg/largefiles/4669e532d5b2c093a78eca010077e708a071bb64 (glob)
+  changeset 0:30d30fe6a5be: sub/large2 references missing $TESTTMP/e/.hg/largefiles/1deebade43c8c498a3c8daddac0244dc55d1331d (glob)
+  changeset 1:ce8896473775: large1 references missing $TESTTMP/e/.hg/largefiles/5f78770c0e77ba4287ad6ef3071c9bf9c379742f (glob)
+  changeset 1:ce8896473775: sub/large2 references missing $TESTTMP/e/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 (glob)
+  changeset 3:9e8fbc4bce62: large1 references missing $TESTTMP/e/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 (glob)
+  changeset 4:74c02385b94c: large3 references missing $TESTTMP/e/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 (glob)
+  changeset 4:74c02385b94c: sub/large4 references missing $TESTTMP/e/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4 (glob)
+  changeset 5:9d5af5072dbd: large3 references missing $TESTTMP/e/.hg/largefiles/baaf12afde9d8d67f25dab6dced0d2bf77dba47c (glob)
+  changeset 5:9d5af5072dbd: sub/large4 references missing $TESTTMP/e/.hg/largefiles/aeb2210d19f02886dde00dac279729a48471e2f9 (glob)
+  changeset 6:4355d653f84f: large3 references missing $TESTTMP/e/.hg/largefiles/7838695e10da2bb75ac1156565f40a2595fa2fa0 (glob)
+  [1]
+
 - cleanup
   $ rm $TESTTMP/d/.hg/largefiles/eb7338044dc27f9bc59b8dd5a246b065ead7a9c4
   $ rm -f .hglf/sub/*.orig


More information about the Mercurial-devel mailing list