Revision 4f22b1015d4203ccdf2b66f27ee5946504342ace authored by Jeff King on 24 February 2012, 22:10:17 UTC, committed by Junio C Hamano on 24 February 2012, 22:18:20 UTC
Because git's object format requires us to specify the
number of bytes in the object in its header, we must know
the size before streaming a blob into the object database.
This is not a problem when adding a regular file, as we can
get the size from stat(). However, when filters are in use
(such as autocrlf, or the ident, filter, or eol
gitattributes), we have no idea what the ultimate size will
be.

The current code just punts on the whole issue and ignores
filter configuration entirely for files larger than
core.bigfilethreshold. This can generate confusing results
if you use filters for large binary files, as the filter
will suddenly stop working as the file goes over a certain
size.  Rather than try to handle unknown input sizes with
streaming, this patch just turns off the streaming
optimization when filters are in use.

This has a slight performance regression in a very specific
case: if you have autocrlf on, but no gitattributes, a large
binary file will avoid the streaming code path because we
don't know beforehand whether it will need conversion or
not. But if you are handling large binary files, you should
be marking them as such via attributes (or at least not
using autocrlf, and instead marking your text files as
such). And the flip side is that if you have a large
_non_-binary file, there is a correctness improvement;
before we did not apply the conversion at all.

The first half of the new t1051 script covers these failures
on input. The second half tests the matching output code
paths. These already work correctly, and do not need any
adjustment.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 4c3b57b
History
File Mode Size
Documentation
block-sha1
builtin
compat
contrib
git-gui
git_remote_helpers
gitk-git
gitweb
mergetools
perl
po
ppc
t
templates
vcs-svn
xdiff
.gitattributes -rw-r--r-- 105 bytes
.gitignore -rw-r--r-- 3.2 KB
.mailmap -rw-r--r-- 2.7 KB
COPYING -rw-r--r-- 18.3 KB
GIT-VERSION-GEN -rwxr-xr-x 754 bytes
INSTALL -rw-r--r-- 7.4 KB
LGPL-2.1 -rw-r--r-- 26.2 KB
Makefile -rw-r--r-- 73.1 KB
README -rw-r--r-- 2.4 KB
RelNotes l--------- 34 bytes
abspath.c -rw-r--r-- 4.2 KB
aclocal.m4 -rw-r--r-- 1.4 KB
advice.c -rw-r--r-- 1.6 KB
advice.h -rw-r--r-- 513 bytes
alias.c -rw-r--r-- 1.7 KB
alloc.c -rw-r--r-- 1.6 KB
archive-tar.c -rw-r--r-- 9.1 KB
archive-zip.c -rw-r--r-- 7.5 KB
archive.c -rw-r--r-- 11.8 KB
archive.h -rw-r--r-- 1.1 KB
argv-array.c -rw-r--r-- 1.1 KB
argv-array.h -rw-r--r-- 463 bytes
attr.c -rw-r--r-- 18.8 KB
attr.h -rw-r--r-- 1.6 KB
base85.c -rw-r--r-- 2.8 KB
bisect.c -rw-r--r-- 22.9 KB
bisect.h -rw-r--r-- 837 bytes
blob.c -rw-r--r-- 565 bytes
blob.h -rw-r--r-- 664 bytes
branch.c -rw-r--r-- 6.0 KB
branch.h -rw-r--r-- 1.8 KB
builtin.h -rw-r--r-- 8.8 KB
bundle.c -rw-r--r-- 11.1 KB
bundle.h -rw-r--r-- 707 bytes
cache-tree.c -rw-r--r-- 15.7 KB
cache-tree.h -rw-r--r-- 1.4 KB
cache.h -rw-r--r-- 43.7 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-- 5.2 KB
color.h -rw-r--r-- 3.1 KB
combine-diff.c -rw-r--r-- 31.8 KB
command-list.txt -rw-r--r-- 7.8 KB
commit.c -rw-r--r-- 20.3 KB
commit.h -rw-r--r-- 6.0 KB
config.c -rw-r--r-- 35.3 KB
config.mak.in -rw-r--r-- 1.8 KB
configure.ac -rw-r--r-- 28.6 KB
connect.c -rw-r--r-- 14.1 KB
connected.c -rw-r--r-- 1.5 KB
connected.h -rw-r--r-- 651 bytes
convert.c -rw-r--r-- 29.3 KB
convert.h -rw-r--r-- 2.2 KB
copy.c -rw-r--r-- 1.6 KB
csum-file.c -rw-r--r-- 3.6 KB
csum-file.h -rw-r--r-- 832 bytes
ctype.c -rw-r--r-- 941 bytes
daemon.c -rw-r--r-- 29.1 KB
date.c -rw-r--r-- 23.1 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.5 KB
diff-lib.c -rw-r--r-- 13.8 KB
diff-no-index.c -rw-r--r-- 6.1 KB
diff.c -rw-r--r-- 124.4 KB
diff.h -rw-r--r-- 10.5 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-- 6.0 KB
diffcore-rename.c -rw-r--r-- 18.3 KB
diffcore.h -rw-r--r-- 4.4 KB
dir.c -rw-r--r-- 29.9 KB
dir.h -rw-r--r-- 3.4 KB
editor.c -rw-r--r-- 1.1 KB
entry.c -rw-r--r-- 7.7 KB
environment.c -rw-r--r-- 7.3 KB
exec_cmd.c -rw-r--r-- 3.2 KB
exec_cmd.h -rw-r--r-- 487 bytes
fast-import.c -rw-r--r-- 86.4 KB
fetch-pack.h -rw-r--r-- 479 bytes
fixup-builtins -rwxr-xr-x 432 bytes
fsck.c -rw-r--r-- 9.5 KB
fsck.h -rw-r--r-- 1.0 KB
generate-cmdlist.sh -rwxr-xr-x 429 bytes
gettext.c -rw-r--r-- 290 bytes
gettext.h -rw-r--r-- 975 bytes
git-add--interactive.perl -rwxr-xr-x 35.4 KB
git-am.sh -rwxr-xr-x 21.0 KB
git-archimport.perl -rwxr-xr-x 36.0 KB
git-bisect.sh -rwxr-xr-x 11.2 KB
git-compat-util.h -rw-r--r-- 14.3 KB
git-cvsexportcommit.perl -rwxr-xr-x 12.4 KB
git-cvsimport.perl -rwxr-xr-x 29.5 KB
git-cvsserver.perl -rwxr-xr-x 118.0 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.8 KB
git-instaweb.sh -rwxr-xr-x 17.8 KB
git-lost-found.sh -rwxr-xr-x 554 bytes
git-merge-octopus.sh -rwxr-xr-x 2.2 KB
git-merge-one-file.sh -rwxr-xr-x 3.8 KB
git-merge-resolve.sh -rwxr-xr-x 944 bytes
git-mergetool--lib.sh -rw-r--r-- 4.1 KB
git-mergetool.sh -rwxr-xr-x 8.4 KB
git-parse-remote.sh -rw-r--r-- 2.5 KB
git-pull.sh -rwxr-xr-x 7.3 KB
git-quiltimport.sh -rwxr-xr-x 3.3 KB
git-rebase--am.sh -rw-r--r-- 615 bytes
git-rebase--interactive.sh -rw-r--r-- 22.2 KB
git-rebase--merge.sh -rw-r--r-- 3.0 KB
git-rebase.sh -rwxr-xr-x 13.0 KB
git-relink.perl -rwxr-xr-x 4.0 KB
git-remote-testgit.py -rw-r--r-- 5.9 KB
git-repack.sh -rwxr-xr-x 4.5 KB
git-request-pull.sh -rwxr-xr-x 1.6 KB
git-send-email.perl -rwxr-xr-x 39.4 KB
git-sh-i18n.sh -rw-r--r-- 837 bytes
git-sh-setup.sh -rw-r--r-- 4.8 KB
git-stash.sh -rwxr-xr-x 12.6 KB
git-submodule.sh -rwxr-xr-x 21.1 KB
git-svn.perl -rwxr-xr-x 188.1 KB
git-web--browse.sh -rwxr-xr-x 4.1 KB
git.c -rw-r--r-- 16.7 KB
git.spec.in -rw-r--r-- 11.0 KB
graph.c -rw-r--r-- 34.4 KB
graph.h -rw-r--r-- 3.6 KB
grep.c -rw-r--r-- 27.2 KB
grep.h -rw-r--r-- 2.9 KB
hash.c -rw-r--r-- 2.5 KB
hash.h -rw-r--r-- 1.1 KB
help.c -rw-r--r-- 9.9 KB
help.h -rw-r--r-- 906 bytes
hex.c -rw-r--r-- 2.3 KB
http-backend.c -rw-r--r-- 13.2 KB
http-fetch.c -rw-r--r-- 2.2 KB
http-push.c -rw-r--r-- 50.8 KB
http-walker.c -rw-r--r-- 13.9 KB
http.c -rw-r--r-- 33.7 KB
http.h -rw-r--r-- 5.1 KB
ident.c -rw-r--r-- 7.0 KB
imap-send.c -rw-r--r-- 34.8 KB
kwset.c -rw-r--r-- 20.5 KB
kwset.h -rw-r--r-- 2.6 KB
levenshtein.c -rw-r--r-- 2.5 KB
levenshtein.h -rw-r--r-- 203 bytes
list-objects.c -rw-r--r-- 5.5 KB
list-objects.h -rw-r--r-- 429 bytes
ll-merge.c -rw-r--r-- 10.0 KB
ll-merge.h -rw-r--r-- 567 bytes
lockfile.c -rw-r--r-- 6.2 KB
log-tree.c -rw-r--r-- 17.8 KB
log-tree.h -rw-r--r-- 867 bytes
mailmap.c -rw-r--r-- 6.4 KB
mailmap.h -rw-r--r-- 263 bytes
match-trees.c -rw-r--r-- 8.7 KB
merge-file.c -rw-r--r-- 2.6 KB
merge-file.h -rw-r--r-- 175 bytes
merge-recursive.c -rw-r--r-- 57.5 KB
merge-recursive.h -rw-r--r-- 1.7 KB
name-hash.c -rw-r--r-- 4.7 KB
notes-cache.c -rw-r--r-- 2.1 KB
notes-cache.h -rw-r--r-- 500 bytes
notes-merge.c -rw-r--r-- 22.9 KB
notes-merge.h -rw-r--r-- 3.4 KB
notes.c -rw-r--r-- 35.8 KB
notes.h -rw-r--r-- 11.9 KB
object.c -rw-r--r-- 5.8 KB
object.h -rw-r--r-- 2.5 KB
pack-check.c -rw-r--r-- 4.6 KB
pack-refs.c -rw-r--r-- 3.4 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-- 8.9 KB
pack.h -rw-r--r-- 2.7 KB
pager.c -rw-r--r-- 2.1 KB
parse-options-cb.c -rw-r--r-- 2.5 KB
parse-options.c -rw-r--r-- 15.0 KB
parse-options.h -rw-r--r-- 8.4 KB
patch-delta.c -rw-r--r-- 2.2 KB
patch-ids.c -rw-r--r-- 2.5 KB
patch-ids.h -rw-r--r-- 490 bytes
path.c -rw-r--r-- 14.9 KB
pkt-line.c -rw-r--r-- 4.5 KB
pkt-line.h -rw-r--r-- 589 bytes
preload-index.c -rw-r--r-- 2.4 KB
pretty.c -rw-r--r-- 32.4 KB
progress.c -rw-r--r-- 6.5 KB
progress.h -rw-r--r-- 504 bytes
quote.c -rw-r--r-- 11.3 KB
quote.h -rw-r--r-- 2.9 KB
reachable.c -rw-r--r-- 5.5 KB
reachable.h -rw-r--r-- 127 bytes
read-cache.c -rw-r--r-- 46.0 KB
reflog-walk.c -rw-r--r-- 7.6 KB
reflog-walk.h -rw-r--r-- 664 bytes
refs.c -rw-r--r-- 50.6 KB
refs.h -rw-r--r-- 5.7 KB
remote-curl.c -rw-r--r-- 21.0 KB
remote.c -rw-r--r-- 41.0 KB
remote.h -rw-r--r-- 4.2 KB
replace_object.c -rw-r--r-- 2.7 KB
rerere.c -rw-r--r-- 17.9 KB
rerere.h -rw-r--r-- 829 bytes
resolve-undo.c -rw-r--r-- 3.9 KB
resolve-undo.h -rw-r--r-- 546 bytes
revision.c -rw-r--r-- 63.7 KB
revision.h -rw-r--r-- 5.6 KB
run-command.c -rw-r--r-- 13.3 KB
run-command.h -rw-r--r-- 2.8 KB
send-pack.h -rw-r--r-- 403 bytes
sequencer.c -rw-r--r-- 271 bytes
sequencer.h -rw-r--r-- 261 bytes
server-info.c -rw-r--r-- 5.1 KB
setup.c -rw-r--r-- 20.1 KB
sh-i18n--envsubst.c -rw-r--r-- 10.7 KB
sha1-array.c -rw-r--r-- 1.2 KB
sha1-array.h -rw-r--r-- 631 bytes
sha1-lookup.c -rw-r--r-- 7.8 KB
sha1-lookup.h -rw-r--r-- 403 bytes
sha1_file.c -rw-r--r-- 72.0 KB
sha1_name.c -rw-r--r-- 26.5 KB
shallow.c -rw-r--r-- 2.3 KB
shell.c -rw-r--r-- 5.1 KB
shortlog.h -rw-r--r-- 463 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-- 7.9 KB
strbuf.h -rw-r--r-- 4.1 KB
streaming.c -rw-r--r-- 10.4 KB
streaming.h -rw-r--r-- 404 bytes
string-list.c -rw-r--r-- 4.7 KB
string-list.h -rw-r--r-- 2.1 KB
submodule.c -rw-r--r-- 25.3 KB
submodule.h -rw-r--r-- 1.4 KB
symlinks.c -rw-r--r-- 8.4 KB
tag.c -rw-r--r-- 3.5 KB
tag.h -rw-r--r-- 517 bytes
tar.h -rw-r--r-- 644 bytes
test-chmtime.c -rw-r--r-- 2.6 KB
test-ctype.c -rw-r--r-- 918 bytes
test-date.c -rw-r--r-- 1.4 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-line-buffer.c -rw-r--r-- 2.1 KB
test-match-trees.c -rw-r--r-- 588 bytes
test-mktemp.c -rw-r--r-- 269 bytes
test-obj-pool.c -rw-r--r-- 2.5 KB
test-parse-options.c -rw-r--r-- 3.2 KB
test-path-utils.c -rw-r--r-- 1.3 KB
test-run-command.c -rw-r--r-- 840 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
test-string-pool.c -rw-r--r-- 654 bytes
test-subprocess.c -rw-r--r-- 387 bytes
test-svn-fe.c -rw-r--r-- 312 bytes
test-treap.c -rw-r--r-- 1.7 KB
thread-utils.c -rw-r--r-- 1.3 KB
thread-utils.h -rw-r--r-- 209 bytes
trace.c -rw-r--r-- 4.7 KB
transport-helper.c -rw-r--r-- 29.0 KB
transport.c -rw-r--r-- 30.8 KB
transport.h -rw-r--r-- 5.7 KB
tree-diff.c -rw-r--r-- 8.6 KB
tree-walk.c -rw-r--r-- 15.4 KB
tree-walk.h -rw-r--r-- 2.2 KB
tree.c -rw-r--r-- 6.1 KB
tree.h -rw-r--r-- 897 bytes
unimplemented.sh -rw-r--r-- 100 bytes
unpack-trees.c -rw-r--r-- 47.0 KB
unpack-trees.h -rw-r--r-- 2.2 KB
upload-pack.c -rw-r--r-- 19.6 KB
url.c -rw-r--r-- 2.8 KB
url.h -rw-r--r-- 492 bytes
usage.c -rw-r--r-- 2.9 KB
userdiff.c -rw-r--r-- 9.2 KB
userdiff.h -rw-r--r-- 646 bytes
utf8.c -rw-r--r-- 13.0 KB
utf8.h -rw-r--r-- 658 bytes
walker.c -rw-r--r-- 7.2 KB
walker.h -rw-r--r-- 1.1 KB
wrap-for-bin.sh -rw-r--r-- 610 bytes
wrapper.c -rw-r--r-- 8.1 KB
write_or_die.c -rw-r--r-- 2.0 KB
ws.c -rw-r--r-- 9.6 KB
wt-status.c -rw-r--r-- 25.8 KB
wt-status.h -rw-r--r-- 2.1 KB
xdiff-interface.c -rw-r--r-- 8.2 KB
xdiff-interface.h -rw-r--r-- 1.1 KB
zlib.c -rw-r--r-- 5.7 KB

README

back to top