[PATCH 3 of 3 hg-bfiles] basestore: make get method check hash of the fiel recieved from the store

david.douard at logilab.fr david.douard at logilab.fr
Thu Nov 26 15:53:25 CST 2009


# HG changeset patch
# User David Douard <david.douard at logilab.fr>
# Date 1259272166 -3600
# Node ID 879995fbdf30f9eaf9fe85cc2d0c1166f2c7ce24
# Parent  80cec09e7f8f975d233fd18e6bf07751be0b0805
basestore: make get method check hash of the fiel recieved from the store

diff --git a/bfiles.py b/bfiles.py
--- a/bfiles.py
+++ b/bfiles.py
@@ -803,8 +803,14 @@
                 continue
             
             hhash = binascii.hexlify(bhash)
-            os.rename(tmpfilename, outfilename)
-            success.append((filename, hhash))
+            if hhash != hash:
+                ui.warn('%s: data corruption (expected %s, got %s)\n'
+                        % (filename, hash, hhash))
+                os.remove(tmpfilename)
+                missing.append((filename, hash))
+            else:
+                os.rename(tmpfilename, outfilename)
+                success.append((filename, hhash))
 
         return (success, missing)
     
diff --git a/tests/test-verify b/tests/test-verify
--- a/tests/test-verify
+++ b/tests/test-verify
@@ -35,6 +35,8 @@
 echo x >> $storefile
 bfverify
 bfverify --contents
+echo "% damage store: bfupdate complains"
+hg bfupdate -v
 
 echo "% remove file from store; normal bfverify notices"
 rm $storefile
diff --git a/tests/test-verify.out b/tests/test-verify.out
--- a/tests/test-verify.out
+++ b/tests/test-verify.out
@@ -31,6 +31,13 @@
   but got 33c7666516dd2225c6a14195b8f50dcf8bd632de)
 verified contents of 3 revisions of 3 big files
 FAIL
+% damage store: bfupdate complains
+hg bfupdate -v
+getting big1
+big1: data corruption (expected d52500312b0201d2d2ef3803e384195a9ce68b2f, got 33c7666516dd2225c6a14195b8f50dcf8bd632de)
+getting big2
+getting sub/big3
+abort: failed to get 1 big files: big1
 % remove file from store; normal bfverify notices
 hg bfverify
 searching 1 changesets for big files


More information about the Mercurial-devel mailing list