git-commit-vandalism/builtin
Jeff King 6a36e1e7bb cat-file: default to --buffer when --batch-all-objects is used
Traditionally cat-file's batch-mode does not do any output
buffering. The reason is that a caller may have pipes
connected to its input and output, and would want to use
cat-file interactively, getting output immediately for each
input it sends.

This may involve a lot of small write() calls, which can be
slow. So we introduced --buffer to improve this, but we
can't turn it on by default, as it would break the
interactive case above.

However, when --batch-all-objects is used, we do not read
stdin at all. We generate the output ourselves as quickly as
possible, and then exit. In this case buffering is a strict
win, and it is simply a hassle for the user to have to
remember to specify --buffer.

This patch makes --buffer the default when --batch-all-objects
is used. Specifying "--buffer" manually is still OK, and you
can even override it with "--no-buffer" if you're a
masochist (or debugging).

For some real numbers, running:

  git cat-file --batch-all-objects --batch-check='%(objectname)'

on torvalds/linux goes from:

  real    0m1.464s
  user    0m1.208s
  sys     0m0.252s

to:

  real    0m1.230s
  user    0m1.172s
  sys     0m0.056s

for a 16% speedup.

Suggested-by: Charles Bailey <charles@hashpling.org>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-05-18 14:17:39 -07:00
..
add.c Merge branch 'jc/add-u-A-default-to-top' into maint 2015-11-05 12:18:12 -08:00
am.c Merge branch 'jc/am-3-fallback-regression-fix' into maint 2015-11-03 15:32:39 -08:00
annotate.c
apply.c Merge branch 'gb/apply-comment-typofix' 2015-09-14 11:44:44 -07:00
archive.c
bisect--helper.c
blame.c Merge branch 'mk/blame-error-message' into maint 2015-11-03 15:32:43 -08:00
branch.c strbuf: make stripspace() part of strbuf 2015-10-16 09:45:15 -07:00
bundle.c
cat-file.c cat-file: default to --buffer when --batch-all-objects is used 2016-05-18 14:17:39 -07:00
check-attr.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
check-ignore.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
check-mailmap.c
check-ref-format.c
checkout-index.c
checkout.c Merge branch 'jc/calloc-pathspec' into maint 2015-09-03 19:18:00 -07:00
clean.c
clone.c Merge branch 'nd/clone-linked-checkout' into maint 2015-11-05 12:18:08 -08:00
column.c
commit-tree.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
commit.c allow hooks to ignore their standard input stream 2015-11-16 08:59:19 -05:00
config.c get_urlmatch: avoid useless strbuf write 2015-08-20 13:16:50 -07:00
count-objects.c prepare_packed_git(): refactor garbage reporting in pack directory 2015-08-17 09:14:59 -07:00
credential.c
describe.c Merge branch 'sg/describe-contains' 2015-08-31 15:39:10 -07:00
diff-files.c
diff-index.c
diff-tree.c
diff.c
fast-export.c
fetch-pack.c
fetch.c Merge branch 'mh/get-remote-group-fix' into maint 2015-09-03 19:17:48 -07:00
fmt-merge-msg.c Merge branch 'rs/pop-commit' into maint 2015-12-11 11:14:13 -08:00
for-each-ref.c
fsck.c Merge branch 'jc/fsck-dropped-errors' into maint 2015-10-16 14:32:50 -07:00
gc.c Merge branch 'dk/gc-idx-wo-pack' into maint 2015-12-04 11:33:08 -08:00
get-tar-commit-id.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
grep.c
hash-object.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
help.c
index-pack.c Merge branch 'jc/finalize-temp-file' 2015-08-19 14:48:55 -07:00
init-db.c write_file(): drop caller-supplied LF from calls to create a one-liner file 2015-08-25 12:49:19 -07:00
interpret-trailers.c
log.c builtin/log.c: minor reformat 2015-08-25 13:11:21 -07:00
ls-files.c ps_matched: xcalloc() takes nmemb and then element size 2015-08-20 09:57:38 -07:00
ls-remote.c ls-remote.txt: delete unsupported option 2015-09-28 11:07:04 -07:00
ls-tree.c
mailinfo.c
mailsplit.c
merge-base.c
merge-file.c Merge branch 'jk/merge-file-exit-code' into maint 2015-11-03 15:32:41 -08:00
merge-index.c
merge-ours.c
merge-recursive.c
merge-tree.c react to errors in xdi_diff 2015-09-28 14:57:10 -07:00
merge.c Merge branch 'rs/pop-commit' into maint 2015-12-11 11:14:13 -08:00
mktag.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
mktree.c
mv.c
name-rev.c
notes.c strbuf: make stripspace() part of strbuf 2015-10-16 09:45:15 -07:00
pack-objects.c Merge branch 'maint-2.5' into maint-2.6 2016-03-17 11:26:18 -07:00
pack-redundant.c
pack-refs.c
patch-id.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
prune-packed.c
prune.c Merge branch 'jk/repository-extension' into maint 2015-11-03 15:32:25 -08:00
pull.c Merge branch 'pt/pull-builtin' into maint 2015-10-16 14:32:32 -07:00
push.c push: add a config option push.gpgSign for default signed pushes 2015-08-19 12:58:58 -07:00
read-tree.c Merge branch 'ah/read-tree-usage-string' 2015-09-01 16:31:16 -07:00
receive-pack.c Merge branch 'jx/do-not-crash-receive-pack-wo-head' into maint 2015-08-19 14:41:26 -07:00
reflog.c Merge branch 'rs/pop-commit' into maint 2015-12-11 11:14:13 -08:00
remote-ext.c
remote-fd.c
remote.c remote.c: drop extraneous local variable from migrate_file 2015-08-10 15:37:12 -07:00
repack.c Merge branch 'jk/repository-extension' into maint 2015-11-03 15:32:25 -08:00
replace.c
rerere.c Sync with v2.5.4 2015-09-28 19:16:54 -07:00
reset.c memoize common git-path "constant" files 2015-08-10 15:37:14 -07:00
rev-list.c Merge branch 'maint-2.4' into maint-2.5 2016-03-17 11:24:14 -07:00
rev-parse.c use pop_commit() for consuming the first entry of a struct commit_list 2015-10-26 14:06:46 -07:00
revert.c
rm.c
send-pack.c push: add a config option push.gpgSign for default signed pushes 2015-08-19 12:58:58 -07:00
shortlog.c
show-branch.c Merge branch 'rs/show-branch-argv-array' into maint 2015-12-11 11:14:14 -08:00
show-ref.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
stripspace.c Merge branch 'jc/usage-stdin' into maint 2015-11-03 15:32:38 -08:00
symbolic-ref.c symbolic-ref: propagate error code from create_symref() 2015-12-21 12:03:03 -08:00
tag.c strbuf: make stripspace() part of strbuf 2015-10-16 09:45:15 -07:00
unpack-file.c
unpack-objects.c usage: do not insist that standard input must come from a file 2015-10-16 15:27:52 -07:00
update-index.c
update-ref.c tag, update-ref: improve description of option "create-reflog" 2015-09-11 09:50:02 -07:00
update-server-info.c
upload-archive.c
var.c
verify-commit.c
verify-pack.c
verify-tag.c
worktree.c Merge branch 'es/worktree-add' into maint 2015-11-04 14:20:44 -08:00
write-tree.c