mirror of
https://github.com/git/git.git
synced 2026-10-09 00:49:37 +02:00
Add a function for adding the full hexadecimal hash value of an object
ID to a strbuf. It's thread-safe and slightly more efficient than using
strbuf_addstr() with oid_to_hex() because it doesn't have to determine
the length of the string or copy it from the intermediate static buffer.
Add and apply a semantic patch to use it throughout the code base.
I get a tiny speedup for git log showing a single hash per commit:
Benchmark 1: ./git_main log --format=%H
Time (mean ± σ): 91.2 ms ± 0.7 ms [User: 51.9 ms, System: 38.6 ms]
Range (min … max): 89.8 ms … 92.6 ms 31 runs
Benchmark 2: ./git log --format=%H
Time (mean ± σ): 90.5 ms ± 0.7 ms [User: 51.0 ms, System: 38.8 ms]
Range (min … max): 89.2 ms … 92.3 ms 32 runs
Summary
./git log --format=%H ran
1.01 ± 0.01 times faster than ./git_main log --format=%H
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
87 lines
1.1 KiB
Plaintext
87 lines
1.1 KiB
Plaintext
@@
|
|
expression E;
|
|
constant fmt !~ "%";
|
|
@@
|
|
- strbuf_addf
|
|
+ strbuf_addstr
|
|
(E,
|
|
(
|
|
fmt
|
|
|
|
|
_(fmt)
|
|
)
|
|
);
|
|
|
|
@@
|
|
expression E;
|
|
struct strbuf SB;
|
|
format F =~ "^s$";
|
|
@@
|
|
- strbuf_addf(E, "%@F@", SB.buf);
|
|
+ strbuf_addbuf(E, &SB);
|
|
|
|
@@
|
|
expression E;
|
|
struct strbuf *SBP;
|
|
format F =~ "^s$";
|
|
@@
|
|
- strbuf_addf(E, "%@F@", SBP->buf);
|
|
+ strbuf_addbuf(E, SBP);
|
|
|
|
@@
|
|
expression E;
|
|
struct strbuf SB;
|
|
@@
|
|
- strbuf_addstr(E, SB.buf);
|
|
+ strbuf_addbuf(E, &SB);
|
|
|
|
@@
|
|
expression E;
|
|
struct strbuf *SBP;
|
|
@@
|
|
- strbuf_addstr(E, SBP->buf);
|
|
+ strbuf_addbuf(E, SBP);
|
|
|
|
@@
|
|
expression E1, E2;
|
|
format F =~ "^s$";
|
|
@@
|
|
- strbuf_addf(E1, "%@F@", E2);
|
|
+ strbuf_addstr(E1, E2);
|
|
|
|
@@
|
|
expression E1, E2, E3;
|
|
@@
|
|
- strbuf_addstr(E1, find_unique_abbrev(E2, E3));
|
|
+ strbuf_add_unique_abbrev(E1, E2, E3);
|
|
|
|
@@
|
|
expression E1, E2;
|
|
@@
|
|
- strbuf_addstr(E1, real_path(E2));
|
|
+ strbuf_add_real_path(E1, E2);
|
|
|
|
@@
|
|
identifier fn, param;
|
|
@@
|
|
fn(...,
|
|
- struct strbuf param
|
|
+ struct strbuf *param
|
|
,...)
|
|
{
|
|
...
|
|
}
|
|
|
|
// In modern codebase, .buf member of an empty strbuf is not NULL.
|
|
@@
|
|
struct strbuf SB;
|
|
@@
|
|
- SB.buf ? SB.buf : ""
|
|
+ SB.buf
|
|
|
|
@@
|
|
expression SB, OID;
|
|
@@
|
|
- strbuf_addstr(SB, oid_to_hex(OID))
|
|
+ strbuf_add_oid_hex(SB, OID)
|