Merge branch 'rs/strbuf-add-oid-hex'

Formatting object name in full hexadecimal form has been optimized
by using a new strbuf_add_oid_hex() helper function.

* rs/strbuf-add-oid-hex:
  hex: add and use strbuf_add_oid_hex()
main
Junio C Hamano 2026-06-09 10:04:50 +09:00
commit 2fd113ae07
14 changed files with 37 additions and 17 deletions

View File

@ -512,7 +512,7 @@ static char *join_oid_array_hex(struct oid_array *array, char delim)
int i;

for (i = 0; i < array->nr; i++) {
strbuf_addstr(&joined_hexs, oid_to_hex(array->oid + i));
strbuf_add_oid_hex(&joined_hexs, array->oid + i);
if (i + 1 < array->nr)
strbuf_addch(&joined_hexs, delim);
}

View File

@ -836,7 +836,7 @@ static enum bisect_error bisect_start(struct bisect_terms *terms, int argc,
if (!repo_get_oid(the_repository, head, &head_oid) &&
!starts_with(head, "refs/heads/")) {
strbuf_reset(&start_head);
strbuf_addstr(&start_head, oid_to_hex(&head_oid));
strbuf_add_oid_hex(&start_head, &head_oid);
} else if (!repo_get_oid(the_repository, head, &head_oid) &&
skip_prefix(head, "refs/heads/", &head)) {
strbuf_addstr(&start_head, head);

View File

@ -334,7 +334,7 @@ static int expand_atom(struct strbuf *sb, const char *atom, int len,
{
if (is_atom("objectname", atom, len)) {
if (!data->mark_query)
strbuf_addstr(sb, oid_to_hex(&data->oid));
strbuf_add_oid_hex(sb, &data->oid);
} else if (is_atom("objecttype", atom, len)) {
if (data->mark_query)
data->info.typep = &data->type;
@ -359,8 +359,7 @@ static int expand_atom(struct strbuf *sb, const char *atom, int len,
if (data->mark_query)
data->info.delta_base_oid = &data->delta_base_oid;
else
strbuf_addstr(sb,
oid_to_hex(&data->delta_base_oid));
strbuf_add_oid_hex(sb, &data->delta_base_oid);
} else if (is_atom("objectmode", atom, len)) {
if (!data->mark_query && !(S_IFINVALID == data->mode))
strbuf_addf(sb, "%06o", data->mode);

View File

@ -127,7 +127,7 @@ static int for_each_replace_name(const char **argv, each_replace_name_fn fn)
}

strbuf_setlen(&ref, base_len);
strbuf_addstr(&ref, oid_to_hex(&oid));
strbuf_add_oid_hex(&ref, &oid);
full_hex = ref.buf + base_len;

if (refs_read_ref(get_main_ref_store(the_repository), ref.buf, &oid)) {

View File

@ -1239,7 +1239,7 @@ static int ident_to_worktree(const char *src, size_t len,

/* step 4: substitute */
strbuf_addstr(buf, "Id: ");
strbuf_addstr(buf, oid_to_hex(&oid));
strbuf_add_oid_hex(buf, &oid);
strbuf_addstr(buf, " $");
}
strbuf_add(buf, src, len);

2
fsck.c
View File

@ -344,7 +344,7 @@ const char *fsck_describe_object(struct fsck_options *options,
buf = bufs + b;
b = (b + 1) % ARRAY_SIZE(bufs);
strbuf_reset(buf);
strbuf_addstr(buf, oid_to_hex(oid));
strbuf_add_oid_hex(buf, oid);
if (name)
strbuf_addf(buf, " (%s)", name);


10
hex.c
View File

@ -3,6 +3,7 @@
#include "git-compat-util.h"
#include "hash.h"
#include "hex.h"
#include "strbuf.h"

static int get_hash_hex_algop(const char *hex, unsigned char *hash,
const struct git_hash_algo *algop)
@ -122,3 +123,12 @@ char *oid_to_hex(const struct object_id *oid)
{
return hash_to_hex_algop(oid->hash, &hash_algos[oid->algo]);
}

void strbuf_add_oid_hex(struct strbuf *sb, const struct object_id *oid)
{
const struct git_hash_algo *algop = oid->algo ?
&hash_algos[oid->algo] : the_hash_algo;
strbuf_grow(sb, algop->hexsz);
hash_to_hex_algop_r(sb->buf + sb->len, oid->hash, algop);
strbuf_setlen(sb, sb->len + algop->hexsz);
}

5
hex.h
View File

@ -33,6 +33,11 @@ char *oid_to_hex_r(char *out, const struct object_id *oid);
char *hash_to_hex_algop(const unsigned char *hash, const struct git_hash_algo *); /* static buffer result! */
char *oid_to_hex(const struct object_id *oid); /* same static buffer */

struct strbuf;

/* Apply oid_to_hex_r() to a strbuf to append the hexadecimal hash. */
void strbuf_add_oid_hex(struct strbuf *sb, const struct object_id *oid);

/*
* Parse a 40-character hexadecimal object ID starting from hex, updating the
* pointer specified by end when parsing stops. The resulting object ID is

View File

@ -661,7 +661,7 @@ static void add_merge_info(const struct pretty_print_context *pp,
if (pp->abbrev)
strbuf_add_unique_abbrev(sb, oidp, pp->abbrev);
else
strbuf_addstr(sb, oid_to_hex(oidp));
strbuf_add_oid_hex(sb, oidp);
parent = parent->next;
}
strbuf_addch(sb, '\n');
@ -1566,7 +1566,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
switch (placeholder[0]) {
case 'H': /* commit hash */
strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_COMMIT));
strbuf_addstr(sb, oid_to_hex(&commit->object.oid));
strbuf_add_oid_hex(sb, &commit->object.oid);
strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_RESET));
return 1;
case 'h': /* abbreviated commit hash */
@ -1576,7 +1576,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
strbuf_addstr(sb, diff_get_color(c->auto_color, DIFF_RESET));
return 1;
case 'T': /* tree hash */
strbuf_addstr(sb, oid_to_hex(get_commit_tree_oid(commit)));
strbuf_add_oid_hex(sb, get_commit_tree_oid(commit));
return 1;
case 't': /* abbreviated tree hash */
strbuf_add_unique_abbrev(sb,
@ -1587,7 +1587,7 @@ static size_t format_commit_one(struct strbuf *sb, /* in UTF-8 */
for (p = commit->parents; p; p = p->next) {
if (p != commit->parents)
strbuf_addch(sb, ' ');
strbuf_addstr(sb, oid_to_hex(&p->item->object.oid));
strbuf_add_oid_hex(sb, &p->item->object.oid);
}
return 1;
case 'p': /* abbreviated parent hashes */

2
refs.c
View File

@ -2532,7 +2532,7 @@ int refs_update_symref_extended(struct ref_store *refs, const char *ref,
if (referent && refs_read_symbolic_ref(refs, ref, referent) == NOT_A_SYMREF) {
struct object_id oid;
if (!refs_read_ref(refs, ref, &oid)) {
strbuf_addstr(referent, oid_to_hex(&oid));
strbuf_add_oid_hex(referent, &oid);
ret = NOT_A_SYMREF;
}
}

View File

@ -2223,7 +2223,7 @@ static void refer_to_commit(struct repository *r, struct strbuf *msgbuf,
repo_format_commit_message(r, commit,
"%h (%s, %ad)", msgbuf, &ctx);
} else {
strbuf_addstr(msgbuf, oid_to_hex(&commit->object.oid));
strbuf_add_oid_hex(msgbuf, &commit->object.oid);
}
}

@ -2395,7 +2395,7 @@ static int do_pick_commit(struct repository *r,
if (!has_conforming_footer(&ctx->message, NULL, 0))
strbuf_addch(&ctx->message, '\n');
strbuf_addstr(&ctx->message, cherry_picked_prefix);
strbuf_addstr(&ctx->message, oid_to_hex(&commit->object.oid));
strbuf_add_oid_hex(&ctx->message, &commit->object.oid);
strbuf_addstr(&ctx->message, ")\n");
}
if (!is_fixup(command))

View File

@ -399,7 +399,7 @@ static int write_shallow_commits_1(struct strbuf *out, int use_pack_protocol,
if (!extra)
return data.count;
for (size_t i = 0; i < extra->nr; i++) {
strbuf_addstr(out, oid_to_hex(extra->oid + i));
strbuf_add_oid_hex(out, extra->oid + i);
strbuf_addch(out, '\n');
data.count++;
}

View File

@ -78,3 +78,9 @@ 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)

View File

@ -1069,7 +1069,7 @@ static int push_refs_with_push(struct transport *transport,
if (ref->peer_ref)
strbuf_addstr(&buf, ref->peer_ref->name);
else
strbuf_addstr(&buf, oid_to_hex(&ref->new_oid));
strbuf_add_oid_hex(&buf, &ref->new_oid);
}
strbuf_addch(&buf, ':');
strbuf_addstr(&buf, ref->name);