avoid strlen via strbuf_addstr in link_alt_odb_entry

We can save a few milliseconds (across 100K odbs) by using
strbuf_addbuf() instead of strbuf_addstr() by passing `entry' as
a strbuf pointer rather than a "const char *".

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Eric Wong 2021-07-07 23:10:16 +00:00 committed by Junio C Hamano
parent cf2dc1c238
commit 407532f82d

View File

@ -567,18 +567,18 @@ static int alt_odb_usable(struct raw_object_store *o,
static void read_info_alternates(struct repository *r, static void read_info_alternates(struct repository *r,
const char *relative_base, const char *relative_base,
int depth); int depth);
static int link_alt_odb_entry(struct repository *r, const char *entry, static int link_alt_odb_entry(struct repository *r, const struct strbuf *entry,
const char *relative_base, int depth, const char *normalized_objdir) const char *relative_base, int depth, const char *normalized_objdir)
{ {
struct object_directory *ent; struct object_directory *ent;
struct strbuf pathbuf = STRBUF_INIT; struct strbuf pathbuf = STRBUF_INIT;
khiter_t pos; khiter_t pos;
if (!is_absolute_path(entry) && relative_base) { if (!is_absolute_path(entry->buf) && relative_base) {
strbuf_realpath(&pathbuf, relative_base, 1); strbuf_realpath(&pathbuf, relative_base, 1);
strbuf_addch(&pathbuf, '/'); strbuf_addch(&pathbuf, '/');
} }
strbuf_addstr(&pathbuf, entry); strbuf_addbuf(&pathbuf, entry);
if (strbuf_normalize_path(&pathbuf) < 0 && relative_base) { if (strbuf_normalize_path(&pathbuf) < 0 && relative_base) {
error(_("unable to normalize alternate object path: %s"), error(_("unable to normalize alternate object path: %s"),
@ -669,7 +669,7 @@ static void link_alt_odb_entries(struct repository *r, const char *alt,
alt = parse_alt_odb_entry(alt, sep, &entry); alt = parse_alt_odb_entry(alt, sep, &entry);
if (!entry.len) if (!entry.len)
continue; continue;
link_alt_odb_entry(r, entry.buf, link_alt_odb_entry(r, &entry,
relative_base, depth, objdirbuf.buf); relative_base, depth, objdirbuf.buf);
} }
strbuf_release(&entry); strbuf_release(&entry);