[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