Revision 748af44c63ea6fec12690f1693f3dddd963e88d5 authored by Nicolas Pitre on 21 February 2010, 20:48:06 UTC, committed by Junio C Hamano on 22 February 2010, 06:33:25 UTC
We don't want the data being deflated and stored into loose objects to be different from what we expect. While the deflated data is protected by a CRC which is good enough for safe data retrieval operations, we still want to be doubly sure that the source data used at object creation time is still what we expected once that data has been deflated and its CRC32 computed. The most plausible data corruption may occur if the source file is modified while Git is deflating and writing it out in a loose object. Or Git itself could have a bug causing memory corruption. Or even bad RAM could cause trouble. So it is best to make sure everything is coherent and checksum protected from beginning to end. To do so we compute the SHA1 of the data being deflated _after_ the deflate operation has consumed that data, and make sure it matches with the expected SHA1. This way we can rely on the CRC32 checked by the inflate operation to provide a good indication that the data is still coherent with its SHA1 hash. One pathological case we ignore is when the data is modified before (or during) deflate call, but changed back before it is hashed. There is some overhead of course. Using 'git add' on a set of large files: Before: real 0m25.210s user 0m23.783s sys 0m1.408s After: real 0m26.537s user 0m25.175s sys 0m1.358s The overhead is around 5% for full data coherency guarantee. Signed-off-by: Nicolas Pitre <nico@fluxnic.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 9892beb
File | Mode | Size |
---|---|---|
Documentation | ||
block-sha1 | ||
compat | ||
contrib | ||
git-gui | ||
git_remote_helpers | ||
gitk-git | ||
gitweb | ||
perl | ||
ppc | ||
t | ||
templates | ||
xdiff | ||
.gitattributes | -rw-r--r-- | 105 bytes |
.gitignore | -rw-r--r-- | 2.8 KB |
.mailmap | -rw-r--r-- | 2.5 KB |
COPYING | -rw-r--r-- | 18.3 KB |
GIT-VERSION-GEN | -rwxr-xr-x | 734 bytes |
INSTALL | -rw-r--r-- | 6.3 KB |
Makefile | -rw-r--r-- | 57.1 KB |
README | -rw-r--r-- | 2.4 KB |
RelNotes | l--------- | 32 bytes |
abspath.c | -rw-r--r-- | 2.8 KB |
advice.c | -rw-r--r-- | 1.3 KB |
advice.h | -rw-r--r-- | 399 bytes |
alias.c | -rw-r--r-- | 1.4 KB |
alloc.c | -rw-r--r-- | 1.7 KB |
archive-tar.c | -rw-r--r-- | 6.3 KB |
archive-zip.c | -rw-r--r-- | 7.3 KB |
archive.c | -rw-r--r-- | 10.2 KB |
archive.h | -rw-r--r-- | 927 bytes |
attr.c | -rw-r--r-- | 16.1 KB |
attr.h | -rw-r--r-- | 973 bytes |
base85.c | -rw-r--r-- | 2.7 KB |
bisect.c | -rw-r--r-- | 23.7 KB |
bisect.h | -rw-r--r-- | 820 bytes |
blob.c | -rw-r--r-- | 565 bytes |
blob.h | -rw-r--r-- | 664 bytes |
branch.c | -rw-r--r-- | 5.4 KB |
branch.h | -rw-r--r-- | 1.0 KB |
builtin-add.c | -rw-r--r-- | 11.3 KB |
builtin-annotate.c | -rw-r--r-- | 446 bytes |
builtin-apply.c | -rw-r--r-- | 91.6 KB |
builtin-archive.c | -rw-r--r-- | 3.5 KB |
builtin-bisect--helper.c | -rw-r--r-- | 617 bytes |
builtin-blame.c | -rw-r--r-- | 62.8 KB |
builtin-branch.c | -rw-r--r-- | 18.7 KB |
builtin-bundle.c | -rw-r--r-- | 1.8 KB |
builtin-cat-file.c | -rw-r--r-- | 5.6 KB |
builtin-check-attr.c | -rw-r--r-- | 2.9 KB |
builtin-check-ref-format.c | -rw-r--r-- | 1.4 KB |
builtin-checkout-index.c | -rw-r--r-- | 8.1 KB |
builtin-checkout.c | -rw-r--r-- | 22.9 KB |
builtin-clean.c | -rw-r--r-- | 4.1 KB |
builtin-clone.c | -rw-r--r-- | 17.2 KB |
builtin-commit-tree.c | -rw-r--r-- | 3.6 KB |
builtin-commit.c | -rw-r--r-- | 35.5 KB |
builtin-config.c | -rw-r--r-- | 13.5 KB |
builtin-count-objects.c | -rw-r--r-- | 3.0 KB |
builtin-describe.c | -rw-r--r-- | 9.9 KB |
builtin-diff-files.c | -rw-r--r-- | 1.9 KB |
builtin-diff-index.c | -rw-r--r-- | 1.2 KB |
builtin-diff-tree.c | -rw-r--r-- | 4.2 KB |
builtin-diff.c | -rw-r--r-- | 10.6 KB |
builtin-fast-export.c | -rw-r--r-- | 16.0 KB |
builtin-fetch-pack.c | -rw-r--r-- | 22.7 KB |
builtin-fetch.c | -rw-r--r-- | 24.1 KB |
builtin-fmt-merge-msg.c | -rw-r--r-- | 8.7 KB |
builtin-for-each-ref.c | -rw-r--r-- | 22.4 KB |
builtin-fsck.c | -rw-r--r-- | 15.8 KB |
builtin-gc.c | -rw-r--r-- | 6.1 KB |
builtin-grep.c | -rw-r--r-- | 23.2 KB |
builtin-hash-object.c | -rw-r--r-- | 3.5 KB |
builtin-help.c | -rw-r--r-- | 11.3 KB |
builtin-index-pack.c | -rw-r--r-- | 26.8 KB |
builtin-init-db.c | -rw-r--r-- | 13.4 KB |
builtin-log.c | -rw-r--r-- | 34.9 KB |
builtin-ls-files.c | -rw-r--r-- | 15.3 KB |
builtin-ls-remote.c | -rw-r--r-- | 2.4 KB |
builtin-ls-tree.c | -rw-r--r-- | 4.4 KB |
builtin-mailinfo.c | -rw-r--r-- | 23.5 KB |
builtin-mailsplit.c | -rw-r--r-- | 6.3 KB |
builtin-merge-base.c | -rw-r--r-- | 1.4 KB |
builtin-merge-file.c | -rw-r--r-- | 2.7 KB |
builtin-merge-index.c | -rw-r--r-- | 2.2 KB |
builtin-merge-ours.c | -rw-r--r-- | 926 bytes |
builtin-merge-recursive.c | -rw-r--r-- | 2.1 KB |
builtin-merge-tree.c | -rw-r--r-- | 8.1 KB |
builtin-merge.c | -rw-r--r-- | 33.4 KB |
builtin-mktag.c | -rw-r--r-- | 5.2 KB |
builtin-mktree.c | -rw-r--r-- | 5.0 KB |
builtin-mv.c | -rw-r--r-- | 5.9 KB |
builtin-name-rev.c | -rw-r--r-- | 7.1 KB |
builtin-pack-objects.c | -rw-r--r-- | 59.3 KB |
builtin-pack-redundant.c | -rw-r--r-- | 15.0 KB |
builtin-pack-refs.c | -rw-r--r-- | 589 bytes |
builtin-patch-id.c | -rw-r--r-- | 1.6 KB |
builtin-prune-packed.c | -rw-r--r-- | 1.9 KB |
builtin-prune.c | -rw-r--r-- | 3.8 KB |
builtin-push.c | -rw-r--r-- | 6.5 KB |
builtin-read-tree.c | -rw-r--r-- | 6.5 KB |
builtin-receive-pack.c | -rw-r--r-- | 16.7 KB |
builtin-reflog.c | -rw-r--r-- | 17.7 KB |
builtin-remote.c | -rw-r--r-- | 38.7 KB |
builtin-replace.c | -rw-r--r-- | 3.9 KB |
builtin-rerere.c | -rw-r--r-- | 3.8 KB |
builtin-reset.c | -rw-r--r-- | 9.3 KB |
builtin-rev-list.c | -rw-r--r-- | 9.4 KB |
builtin-rev-parse.c | -rw-r--r-- | 15.8 KB |
builtin-revert.c | -rw-r--r-- | 11.7 KB |
builtin-rm.c | -rw-r--r-- | 7.0 KB |
builtin-send-pack.c | -rw-r--r-- | 14.8 KB |
builtin-shortlog.c | -rw-r--r-- | 8.6 KB |
builtin-show-branch.c | -rw-r--r-- | 23.0 KB |
builtin-show-ref.c | -rw-r--r-- | 6.3 KB |
builtin-stripspace.c | -rw-r--r-- | 2.0 KB |
builtin-symbolic-ref.c | -rw-r--r-- | 1.3 KB |
builtin-tag.c | -rw-r--r-- | 11.3 KB |
builtin-tar-tree.c | -rw-r--r-- | 2.5 KB |
builtin-unpack-file.c | -rw-r--r-- | 845 bytes |
builtin-unpack-objects.c | -rw-r--r-- | 12.9 KB |
builtin-update-index.c | -rw-r--r-- | 20.3 KB |
builtin-update-ref.c | -rw-r--r-- | 1.6 KB |
builtin-update-server-info.c | -rw-r--r-- | 591 bytes |
builtin-upload-archive.c | -rw-r--r-- | 4.0 KB |
builtin-var.c | -rw-r--r-- | 1.8 KB |
builtin-verify-pack.c | -rw-r--r-- | 4.1 KB |
builtin-verify-tag.c | -rw-r--r-- | 2.7 KB |
builtin-write-tree.c | -rw-r--r-- | 1.5 KB |
builtin.h | -rw-r--r-- | 8.0 KB |
bundle.c | -rw-r--r-- | 10.2 KB |
bundle.h | -rw-r--r-- | 627 bytes |
cache-tree.c | -rw-r--r-- | 15.6 KB |
cache-tree.h | -rw-r--r-- | 1.4 KB |
cache.h | -rw-r--r-- | 36.2 KB |
check-builtins.sh | -rwxr-xr-x | 588 bytes |
check-racy.c | -rw-r--r-- | 538 bytes |
check_bindir | -rwxr-xr-x | 369 bytes |
color.c | -rw-r--r-- | 4.5 KB |
color.h | -rw-r--r-- | 1.4 KB |
combine-diff.c | -rw-r--r-- | 27.8 KB |
command-list.txt | -rw-r--r-- | 7.7 KB |
commit.c | -rw-r--r-- | 17.5 KB |
commit.h | -rw-r--r-- | 4.8 KB |
config.c | -rw-r--r-- | 29.8 KB |
config.mak.in | -rw-r--r-- | 1.4 KB |
configure.ac | -rw-r--r-- | 24.0 KB |
connect.c | -rw-r--r-- | 13.7 KB |
convert.c | -rw-r--r-- | 14.1 KB |
copy.c | -rw-r--r-- | 1.6 KB |
csum-file.c | -rw-r--r-- | 2.5 KB |
csum-file.h | -rw-r--r-- | 761 bytes |
ctype.c | -rw-r--r-- | 874 bytes |
daemon.c | -rw-r--r-- | 25.1 KB |
date.c | -rw-r--r-- | 22.2 KB |
decorate.c | -rw-r--r-- | 1.8 KB |
decorate.h | -rw-r--r-- | 400 bytes |
delta.h | -rw-r--r-- | 3.4 KB |
diff-delta.c | -rw-r--r-- | 15.3 KB |
diff-lib.c | -rw-r--r-- | 13.4 KB |
diff-no-index.c | -rw-r--r-- | 6.1 KB |
diff.c | -rw-r--r-- | 100.1 KB |
diff.h | -rw-r--r-- | 9.2 KB |
diffcore-break.c | -rw-r--r-- | 8.7 KB |
diffcore-delta.c | -rw-r--r-- | 5.4 KB |
diffcore-order.c | -rw-r--r-- | 2.2 KB |
diffcore-pickaxe.c | -rw-r--r-- | 3.2 KB |
diffcore-rename.c | -rw-r--r-- | 16.9 KB |
diffcore.h | -rw-r--r-- | 4.1 KB |
dir.c | -rw-r--r-- | 24.2 KB |
dir.h | -rw-r--r-- | 2.8 KB |
editor.c | -rw-r--r-- | 1.1 KB |
entry.c | -rw-r--r-- | 6.0 KB |
environment.c | -rw-r--r-- | 4.9 KB |
exec_cmd.c | -rw-r--r-- | 3.3 KB |
exec_cmd.h | -rw-r--r-- | 487 bytes |
fast-import.c | -rw-r--r-- | 75.0 KB |
fetch-pack.h | -rw-r--r-- | 479 bytes |
fixup-builtins | -rwxr-xr-x | 432 bytes |
fsck.c | -rw-r--r-- | 8.0 KB |
fsck.h | -rw-r--r-- | 1.0 KB |
generate-cmdlist.sh | -rwxr-xr-x | 443 bytes |
git-add--interactive.perl | -rwxr-xr-x | 34.4 KB |
git-am.sh | -rwxr-xr-x | 17.8 KB |
git-archimport.perl | -rwxr-xr-x | 36.0 KB |
git-bisect.sh | -rwxr-xr-x | 9.8 KB |
git-compat-util.h | -rw-r--r-- | 11.5 KB |
git-cvsexportcommit.perl | -rwxr-xr-x | 12.4 KB |
git-cvsimport.perl | -rwxr-xr-x | 28.1 KB |
git-cvsserver.perl | -rwxr-xr-x | 114.9 KB |
git-difftool--helper.sh | -rwxr-xr-x | 1.7 KB |
git-difftool.perl | -rwxr-xr-x | 2.6 KB |
git-filter-branch.sh | -rwxr-xr-x | 11.9 KB |
git-instaweb.sh | -rwxr-xr-x | 11.0 KB |
git-lost-found.sh | -rwxr-xr-x | 554 bytes |
git-merge-octopus.sh | -rwxr-xr-x | 2.0 KB |
git-merge-one-file.sh | -rwxr-xr-x | 3.7 KB |
git-merge-resolve.sh | -rwxr-xr-x | 944 bytes |
git-mergetool--lib.sh | -rw-r--r-- | 8.8 KB |
git-mergetool.sh | -rwxr-xr-x | 6.0 KB |
git-notes.sh | -rwxr-xr-x | 2.7 KB |
git-parse-remote.sh | -rwxr-xr-x | 1.9 KB |
git-pull.sh | -rwxr-xr-x | 7.8 KB |
git-quiltimport.sh | -rwxr-xr-x | 3.3 KB |
git-rebase--interactive.sh | -rwxr-xr-x | 23.1 KB |
git-rebase.sh | -rwxr-xr-x | 14.0 KB |
git-relink.perl | -rwxr-xr-x | 4.0 KB |
git-repack.sh | -rwxr-xr-x | 4.4 KB |
git-request-pull.sh | -rwxr-xr-x | 1.6 KB |
git-send-email.perl | -rwxr-xr-x | 33.1 KB |
git-sh-setup.sh | -rwxr-xr-x | 3.5 KB |
git-stash.sh | -rwxr-xr-x | 8.4 KB |
git-submodule.sh | -rwxr-xr-x | 17.0 KB |
git-svn.perl | -rwxr-xr-x | 171.0 KB |
git-web--browse.sh | -rwxr-xr-x | 3.9 KB |
git.c | -rw-r--r-- | 14.9 KB |
git.spec.in | -rw-r--r-- | 10.0 KB |
graph.c | -rw-r--r-- | 34.6 KB |
graph.h | -rw-r--r-- | 2.5 KB |
grep.c | -rw-r--r-- | 21.0 KB |
grep.h | -rw-r--r-- | 2.2 KB |
hash.c | -rw-r--r-- | 2.5 KB |
hash.h | -rw-r--r-- | 1.1 KB |
help.c | -rw-r--r-- | 8.4 KB |
help.h | -rw-r--r-- | 751 bytes |
hex.c | -rw-r--r-- | 2.1 KB |
http-backend.c | -rw-r--r-- | 14.1 KB |
http-fetch.c | -rw-r--r-- | 2.3 KB |
http-push.c | -rw-r--r-- | 54.2 KB |
http-walker.c | -rw-r--r-- | 13.7 KB |
http.c | -rw-r--r-- | 31.0 KB |
http.h | -rw-r--r-- | 5.1 KB |
ident.c | -rw-r--r-- | 6.1 KB |
imap-send.c | -rw-r--r-- | 31.3 KB |
levenshtein.c | -rw-r--r-- | 2.5 KB |
levenshtein.h | -rw-r--r-- | 201 bytes |
list-objects.c | -rw-r--r-- | 4.6 KB |
list-objects.h | -rw-r--r-- | 422 bytes |
ll-merge.c | -rw-r--r-- | 9.6 KB |
ll-merge.h | -rw-r--r-- | 337 bytes |
lockfile.c | -rw-r--r-- | 6.3 KB |
log-tree.c | -rw-r--r-- | 14.1 KB |
log-tree.h | -rw-r--r-- | 783 bytes |
mailmap.c | -rw-r--r-- | 6.5 KB |
mailmap.h | -rw-r--r-- | 263 bytes |
match-trees.c | -rw-r--r-- | 8.7 KB |
merge-file.c | -rw-r--r-- | 2.4 KB |
merge-recursive.c | -rw-r--r-- | 38.8 KB |
merge-recursive.h | -rw-r--r-- | 1.5 KB |
name-hash.c | -rw-r--r-- | 2.5 KB |
notes.c | -rw-r--r-- | 12.4 KB |
notes.h | -rw-r--r-- | 295 bytes |
object.c | -rw-r--r-- | 5.8 KB |
object.h | -rw-r--r-- | 2.5 KB |
pack-check.c | -rw-r--r-- | 4.5 KB |
pack-refs.c | -rw-r--r-- | 2.8 KB |
pack-refs.h | -rw-r--r-- | 465 bytes |
pack-revindex.c | -rw-r--r-- | 4.0 KB |
pack-revindex.h | -rw-r--r-- | 223 bytes |
pack-write.c | -rw-r--r-- | 7.3 KB |
pack.h | -rw-r--r-- | 2.2 KB |
pager.c | -rw-r--r-- | 2.1 KB |
parse-options.c | -rw-r--r-- | 15.6 KB |
parse-options.h | -rw-r--r-- | 7.0 KB |
patch-delta.c | -rw-r--r-- | 2.1 KB |
patch-ids.c | -rw-r--r-- | 2.5 KB |
patch-ids.h | -rw-r--r-- | 490 bytes |
path.c | -rw-r--r-- | 14.5 KB |
pkt-line.c | -rw-r--r-- | 3.3 KB |
pkt-line.h | -rw-r--r-- | 589 bytes |
preload-index.c | -rw-r--r-- | 2.3 KB |
pretty.c | -rw-r--r-- | 26.7 KB |
progress.c | -rw-r--r-- | 6.5 KB |
progress.h | -rw-r--r-- | 504 bytes |
quote.c | -rw-r--r-- | 10.2 KB |
quote.h | -rw-r--r-- | 2.5 KB |
reachable.c | -rw-r--r-- | 5.6 KB |
reachable.h | -rw-r--r-- | 127 bytes |
read-cache.c | -rw-r--r-- | 44.2 KB |
reflog-walk.c | -rw-r--r-- | 7.7 KB |
reflog-walk.h | -rw-r--r-- | 664 bytes |
refs.c | -rw-r--r-- | 43.5 KB |
refs.h | -rw-r--r-- | 3.9 KB |
remote-curl.c | -rw-r--r-- | 19.4 KB |
remote.c | -rw-r--r-- | 41.1 KB |
remote.h | -rw-r--r-- | 4.2 KB |
replace_object.c | -rw-r--r-- | 2.6 KB |
rerere.c | -rw-r--r-- | 14.3 KB |
rerere.h | -rw-r--r-- | 505 bytes |
resolve-undo.c | -rw-r--r-- | 4.0 KB |
resolve-undo.h | -rw-r--r-- | 546 bytes |
revision.c | -rw-r--r-- | 52.5 KB |
revision.h | -rw-r--r-- | 4.3 KB |
run-command.c | -rw-r--r-- | 11.5 KB |
run-command.h | -rw-r--r-- | 2.6 KB |
send-pack.h | -rw-r--r-- | 374 bytes |
server-info.c | -rw-r--r-- | 5.2 KB |
setup.c | -rw-r--r-- | 13.4 KB |
sha1-lookup.c | -rw-r--r-- | 7.8 KB |
sha1-lookup.h | -rw-r--r-- | 403 bytes |
sha1_file.c | -rw-r--r-- | 63.1 KB |
sha1_name.c | -rw-r--r-- | 25.8 KB |
shallow.c | -rw-r--r-- | 2.3 KB |
shell.c | -rw-r--r-- | 2.2 KB |
shortlog.h | -rw-r--r-- | 450 bytes |
show-index.c | -rw-r--r-- | 2.2 KB |
sideband.c | -rw-r--r-- | 3.4 KB |
sideband.h | -rw-r--r-- | 326 bytes |
sigchain.c | -rw-r--r-- | 969 bytes |
sigchain.h | -rw-r--r-- | 215 bytes |
strbuf.c | -rw-r--r-- | 8.0 KB |
strbuf.h | -rw-r--r-- | 5.0 KB |
string-list.c | -rw-r--r-- | 4.2 KB |
string-list.h | -rw-r--r-- | 1.7 KB |
submodule.c | -rw-r--r-- | 4.5 KB |
submodule.h | -rw-r--r-- | 281 bytes |
symlinks.c | -rw-r--r-- | 7.9 KB |
tag.c | -rw-r--r-- | 2.7 KB |
tag.h | -rw-r--r-- | 471 bytes |
tar.h | -rw-r--r-- | 644 bytes |
test-chmtime.c | -rw-r--r-- | 2.6 KB |
test-ctype.c | -rw-r--r-- | 1.4 KB |
test-date.c | -rw-r--r-- | 1.3 KB |
test-delta.c | -rw-r--r-- | 1.8 KB |
test-dump-cache-tree.c | -rw-r--r-- | 1.5 KB |
test-genrandom.c | -rw-r--r-- | 722 bytes |
test-index-version.c | -rw-r--r-- | 264 bytes |
test-match-trees.c | -rw-r--r-- | 588 bytes |
test-parse-options.c | -rw-r--r-- | 3.0 KB |
test-path-utils.c | -rw-r--r-- | 872 bytes |
test-run-command.c | -rw-r--r-- | 774 bytes |
test-sha1.c | -rw-r--r-- | 816 bytes |
test-sha1.sh | -rwxr-xr-x | 1.9 KB |
test-sigchain.c | -rw-r--r-- | 344 bytes |
thread-utils.c | -rw-r--r-- | 965 bytes |
thread-utils.h | -rw-r--r-- | 109 bytes |
trace.c | -rw-r--r-- | 3.5 KB |
transport-helper.c | -rw-r--r-- | 17.4 KB |
transport.c | -rw-r--r-- | 29.3 KB |
transport.h | -rw-r--r-- | 4.7 KB |
tree-diff.c | -rw-r--r-- | 11.9 KB |
tree-walk.c | -rw-r--r-- | 10.1 KB |
tree-walk.h | -rw-r--r-- | 1.7 KB |
tree.c | -rw-r--r-- | 7.0 KB |
tree.h | -rw-r--r-- | 883 bytes |
unimplemented.sh | -rw-r--r-- | 100 bytes |
unpack-trees.c | -rw-r--r-- | 35.7 KB |
unpack-trees.h | -rw-r--r-- | 1.6 KB |
upload-pack.c | -rw-r--r-- | 17.5 KB |
usage.c | -rw-r--r-- | 2.4 KB |
userdiff.c | -rw-r--r-- | 6.0 KB |
userdiff.h | -rw-r--r-- | 477 bytes |
utf8.c | -rw-r--r-- | 13.0 KB |
utf8.h | -rw-r--r-- | 613 bytes |
walker.c | -rw-r--r-- | 7.2 KB |
walker.h | -rw-r--r-- | 1.1 KB |
wrap-for-bin.sh | -rw-r--r-- | 526 bytes |
wrapper.c | -rw-r--r-- | 6.3 KB |
write_or_die.c | -rw-r--r-- | 2.0 KB |
ws.c | -rw-r--r-- | 8.2 KB |
wt-status.c | -rw-r--r-- | 18.7 KB |
wt-status.h | -rw-r--r-- | 1.3 KB |
xdiff-interface.c | -rw-r--r-- | 7.9 KB |
xdiff-interface.h | -rw-r--r-- | 1.1 KB |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...