find_unique_abbrev: use 4-buffer ring
Some code paths want to format multiple abbreviated sha1s in the same output line. Because we use a single static buffer for our return value, they have to either break their output into several calls or allocate their own arrays and use find_unique_abbrev_r(). Intead, let's mimic sha1_to_hex() and use a ring of several buffers, so that the return value stays valid through multiple calls. This shortens some of the callers, and makes it harder to for them to make a silly mistake. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
4ce742fc9c
commit
ef2ed5013c
@ -1163,10 +1163,6 @@ static void check_aliased_update(struct command *cmd, struct string_list *list)
|
||||
struct string_list_item *item;
|
||||
struct command *dst_cmd;
|
||||
unsigned char sha1[GIT_SHA1_RAWSZ];
|
||||
char cmd_oldh[GIT_SHA1_HEXSZ + 1],
|
||||
cmd_newh[GIT_SHA1_HEXSZ + 1],
|
||||
dst_oldh[GIT_SHA1_HEXSZ + 1],
|
||||
dst_newh[GIT_SHA1_HEXSZ + 1];
|
||||
int flag;
|
||||
|
||||
strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
|
||||
@ -1197,14 +1193,14 @@ static void check_aliased_update(struct command *cmd, struct string_list *list)
|
||||
|
||||
dst_cmd->skip_update = 1;
|
||||
|
||||
find_unique_abbrev_r(cmd_oldh, cmd->old_sha1, DEFAULT_ABBREV);
|
||||
find_unique_abbrev_r(cmd_newh, cmd->new_sha1, DEFAULT_ABBREV);
|
||||
find_unique_abbrev_r(dst_oldh, dst_cmd->old_sha1, DEFAULT_ABBREV);
|
||||
find_unique_abbrev_r(dst_newh, dst_cmd->new_sha1, DEFAULT_ABBREV);
|
||||
rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
|
||||
" its target '%s' (%s..%s)",
|
||||
cmd->ref_name, cmd_oldh, cmd_newh,
|
||||
dst_cmd->ref_name, dst_oldh, dst_newh);
|
||||
cmd->ref_name,
|
||||
find_unique_abbrev(cmd->old_sha1, DEFAULT_ABBREV),
|
||||
find_unique_abbrev(cmd->new_sha1, DEFAULT_ABBREV),
|
||||
dst_cmd->ref_name,
|
||||
find_unique_abbrev(dst_cmd->old_sha1, DEFAULT_ABBREV),
|
||||
find_unique_abbrev(dst_cmd->new_sha1, DEFAULT_ABBREV));
|
||||
|
||||
cmd->error_string = dst_cmd->error_string =
|
||||
"inconsistent aliased update";
|
||||
|
Reference in New Issue
Block a user