Skip to content

Commit

Permalink
object-name: re-use "struct strbuf" in show_ambiguous_object()
Browse files Browse the repository at this point in the history
Reduce the allocations done by show_ambiguous_object() by moving the
"desc" strbuf into the "struct ambiguous_output" introduced in the
preceding commit.

This doesn't matter for optimization purposes, but since we're
accumulating a "struct strbuf advice" anyway let's follow that pattern
and add a "struct strbuf sb", we can then strbuf_reset() it rather
than calling strbuf_release() for each call to
show_ambiguous_object().

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
avar authored and gitster committed Jan 27, 2022
1 parent d2ef3cb commit 3a73c1d
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions object-name.c
Original file line number Diff line number Diff line change
Expand Up @@ -354,14 +354,15 @@ static int init_object_disambiguation(struct repository *r,
struct ambiguous_output {
const struct disambiguate_state *ds;
struct strbuf advice;
struct strbuf sb;
};

static int show_ambiguous_object(const struct object_id *oid, void *data)
{
struct ambiguous_output *state = data;
const struct disambiguate_state *ds = state->ds;
struct strbuf *advice = &state->advice;
struct strbuf desc = STRBUF_INIT;
struct strbuf *sb = &state->sb;
int type;
const char *hash;

Expand All @@ -377,7 +378,7 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
* output shown when we cannot look up or parse the
* object in question. E.g. "deadbeef [bad object]".
*/
strbuf_addf(&desc, _("%s [bad object]"), hash);
strbuf_addf(sb, _("%s [bad object]"), hash);
goto out;
}

Expand All @@ -402,8 +403,8 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
*
* "deadbeef commit 2021-01-01 - Some Commit Message"
*/
strbuf_addf(&desc, _("%s commit %s - %s"),
hash, date.buf, msg.buf);
strbuf_addf(sb, _("%s commit %s - %s"), hash, date.buf,
msg.buf);

strbuf_release(&date);
strbuf_release(&msg);
Expand All @@ -423,7 +424,7 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
* The third argument is the "tag" string
* from object.c.
*/
strbuf_addf(&desc, _("%s tag %s - %s"), hash,
strbuf_addf(sb, _("%s tag %s - %s"), hash,
show_date(tag->date, 0, DATE_MODE(SHORT)),
tag->tag);
} else {
Expand All @@ -434,21 +435,21 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
*
* "deadbeef [bad tag, could not parse it]"
*/
strbuf_addf(&desc, _("%s [bad tag, could not parse it]"),
strbuf_addf(sb, _("%s [bad tag, could not parse it]"),
hash);
}
} else if (type == OBJ_TREE) {
/*
* TRANSLATORS: This is a line of ambiguous <type>
* object output. E.g. "deadbeef tree".
*/
strbuf_addf(&desc, _("%s tree"), hash);
strbuf_addf(sb, _("%s tree"), hash);
} else if (type == OBJ_BLOB) {
/*
* TRANSLATORS: This is a line of ambiguous <type>
* object output. E.g. "deadbeef blob".
*/
strbuf_addf(&desc, _("%s blob"), hash);
strbuf_addf(sb, _("%s blob"), hash);
}


Expand All @@ -459,9 +460,9 @@ static int show_ambiguous_object(const struct object_id *oid, void *data)
* you'll probably want to swap the "%s" and leading " " space
* around.
*/
strbuf_addf(advice, _(" %s\n"), desc.buf);
strbuf_addf(advice, _(" %s\n"), sb->buf);

strbuf_release(&desc);
strbuf_reset(sb);
return 0;
}

Expand Down Expand Up @@ -560,6 +561,7 @@ static enum get_oid_result get_short_oid(struct repository *r,
struct oid_array collect = OID_ARRAY_INIT;
struct ambiguous_output out = {
.ds = &ds,
.sb = STRBUF_INIT,
.advice = STRBUF_INIT,
};

Expand Down Expand Up @@ -589,6 +591,7 @@ static enum get_oid_result get_short_oid(struct repository *r,

oid_array_clear(&collect);
strbuf_release(&out.advice);
strbuf_release(&out.sb);
}

return status;
Expand Down

0 comments on commit 3a73c1d

Please sign in to comment.