summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJed Brown <jed@59A2.org>2014-05-25 22:44:48 -0600
committerJed Brown <jed@59A2.org>2014-05-25 22:47:53 -0600
commit41fbd824da3c928df416398d2c71d7a237945d76 (patch)
treecbe02033dd769ecfb3fe51ceeae4bd47616d8980
parent6b01b1a7080e3aad3b6c19e3938d83a3168cfd4e (diff)
parent6ca25da37333bbffe10cbb837c0002fd250931b1 (diff)
downloadgit-fat-41fbd824da3c928df416398d2c71d7a237945d76.tar.gz
Merge branch 'add_verify_command' of github:jmurty/git-fat (PR #36)
* 'add_verify_command' of github:jmurty/git-fat: Add `verify` command to check git-fat object data matches hash filename. Conflicts: git-fat
-rwxr-xr-xgit-fat22
-rwxr-xr-xtest.sh8
2 files changed, 29 insertions, 1 deletions
diff --git a/git-fat b/git-fat
index 049844f..7035db7 100755
--- a/git-fat
+++ b/git-fat
@@ -422,6 +422,24 @@ class GitFat(object):
sys.stderr.write('fatal: git-fat is not yet configured in this repository.\n')
sys.stderr.write('Run "git fat init" to configure.\n')
sys.exit(1)
+
+ def cmd_verify(self):
+ """Print details of git-fat objects with incorrect data hash"""
+ corrupted_objects = []
+ for obj in self.catalog_objects():
+ fname = os.path.join(self.objdir, obj)
+ h = hashlib.new('sha1')
+ for block in readblocks(open(fname)):
+ h.update(block)
+ data_hash = h.hexdigest()
+ if obj != data_hash:
+ corrupted_objects.append((obj, data_hash))
+ if corrupted_objects:
+ print('Corrupted objects: %d' % len(corrupted_objects))
+ for obj, data_hash in corrupted_objects:
+ print('%s data hash is %s' % (obj, data_hash))
+ sys.exit(1)
+
def cmd_init(self):
self.setup()
if self.is_init_done():
@@ -547,6 +565,8 @@ if __name__ == '__main__':
fat.cmd_pull(sys.argv[2:])
elif cmd == 'gc':
fat.cmd_gc()
+ elif cmd == 'verify':
+ fat.cmd_verify()
elif cmd == 'checkout':
fat.cmd_checkout(sys.argv[2:])
elif cmd == 'find':
@@ -554,4 +574,4 @@ if __name__ == '__main__':
elif cmd == 'index-filter':
fat.cmd_index_filter(sys.argv[2:])
else:
- print('Usage: git fat [init|status|push|pull|gc|checkout|find|index-filter]', file=sys.stderr)
+ print('Usage: git fat [init|status|push|pull|gc|verify|checkout|find|index-filter]', file=sys.stderr)
diff --git a/test.sh b/test.sh
index 33c6d66..0ee63ea 100755
--- a/test.sh
+++ b/test.sh
@@ -54,3 +54,11 @@ git commit -m'add d with normal content'
rm d
git fat pull
+# Check verify command finds corrupt object
+mv .git/fat/objects/6ecec2e21d3033e7ba53e2db63f69dbd3a011fa8 \
+ .git/fat/objects/6ecec2e21d3033e7ba53e2db63f69dbd3a011fa8.bak
+echo "Not the right data" > .git/fat/objects/6ecec2e21d3033e7ba53e2db63f69dbd3a011fa8
+git fat verify && true
+if [ $? -eq 0 ]; then echo "Verify did not detect invalid object"; exit 1; fi
+mv .git/fat/objects/6ecec2e21d3033e7ba53e2db63f69dbd3a011fa8.bak \
+ .git/fat/objects/6ecec2e21d3033e7ba53e2db63f69dbd3a011fa8