mirror of
https://github.com/git/git.git
synced 2026-08-03 22:51:13 +00:00
cat-file: speed up default format
eb54a3391b (cat-file: skip expanding default format, 2022-03-15) added
special handling for the default batch format. In the meantime it has
fallen behind the code path for handling arbitrary formats. Bring it up
to speed by using the new and more efficient strbuf_add_oid_hex() and
strbuf_add_uint() instead of strbuf_addf():
Benchmark 1: ./git_main cat-file --batch-all-objects --batch-check='%(objectname) %(objecttype) %(objectsize)'
Time (mean ± σ): 1.051 s ± 0.003 s [User: 1.027 s, System: 0.023 s]
Range (min … max): 1.049 s … 1.058 s 10 runs
Benchmark 2: ./git_main cat-file --batch-all-objects --batch-check='%(objectname)-%(objecttype)-%(objectsize)'
Time (mean ± σ): 1.012 s ± 0.002 s [User: 0.988 s, System: 0.023 s]
Range (min … max): 1.010 s … 1.018 s 10 runs
Benchmark 3: ./git cat-file --batch-all-objects --batch-check='%(objectname) %(objecttype) %(objectsize)'
Time (mean ± σ): 979.0 ms ± 1.1 ms [User: 954.1 ms, System: 23.2 ms]
Range (min … max): 977.7 ms … 980.8 ms 10 runs
Summary
./git cat-file --batch-all-objects --batch-check='%(objectname) %(objecttype) %(objectsize)' ran
1.03 ± 0.00 times faster than ./git_main cat-file --batch-all-objects --batch-check='%(objectname)-%(objecttype)-%(objectsize)'
1.07 ± 0.00 times faster than ./git_main cat-file --batch-all-objects --batch-check='%(objectname) %(objecttype) %(objectsize)'
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
700432b2ba
commit
800581cd44
@@ -461,9 +461,12 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d
|
||||
static void print_default_format(struct strbuf *scratch, struct expand_data *data,
|
||||
struct batch_options *opt)
|
||||
{
|
||||
strbuf_addf(scratch, "%s %s %"PRIuMAX"%c", oid_to_hex(&data->oid),
|
||||
type_name(data->type),
|
||||
(uintmax_t)data->size, opt->output_delim);
|
||||
strbuf_add_oid_hex(scratch, &data->oid);
|
||||
strbuf_addch(scratch, ' ');
|
||||
strbuf_addstr(scratch, type_name(data->type));
|
||||
strbuf_addch(scratch, ' ');
|
||||
strbuf_add_uint(scratch, data->size);
|
||||
strbuf_addch(scratch, opt->output_delim);
|
||||
}
|
||||
|
||||
static void report_object_status(struct batch_options *opt,
|
||||
|
||||
Reference in New Issue
Block a user