Convert many resolve_ref() calls to read_ref*() and ref_exists()
resolve_ref() may return a pointer to a static buffer, which is not safe for long-term use because if another resolve_ref() call happens, the buffer may be changed. Many call sites though do not care about this buffer. They simply check if the return value is NULL or not. Convert all these call sites to new wrappers to reduce resolve_ref() calls from 57 to 34. If we change resolve_ref() prototype later on to avoid passing static buffer out, this helps reduce changes. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
bc1bbe0c19
commit
c689332391
@ -343,8 +343,7 @@ static int get_ref_states(const struct ref *remote_refs, struct ref_states *stat
|
||||
states->tracked.strdup_strings = 1;
|
||||
states->stale.strdup_strings = 1;
|
||||
for (ref = fetch_map; ref; ref = ref->next) {
|
||||
unsigned char sha1[20];
|
||||
if (!ref->peer_ref || read_ref(ref->peer_ref->name, sha1))
|
||||
if (!ref->peer_ref || !ref_exists(ref->peer_ref->name))
|
||||
string_list_append(&states->new, abbrev_branch(ref->name));
|
||||
else
|
||||
string_list_append(&states->tracked, abbrev_branch(ref->name));
|
||||
@ -710,7 +709,7 @@ static int mv(int argc, const char **argv)
|
||||
int flag = 0;
|
||||
unsigned char sha1[20];
|
||||
|
||||
resolve_ref(item->string, sha1, 1, &flag);
|
||||
read_ref_full(item->string, sha1, 1, &flag);
|
||||
if (!(flag & REF_ISSYMREF))
|
||||
continue;
|
||||
if (delete_ref(item->string, NULL, REF_NODEREF))
|
||||
@ -1220,10 +1219,9 @@ static int set_head(int argc, const char **argv)
|
||||
usage_with_options(builtin_remote_sethead_usage, options);
|
||||
|
||||
if (head_name) {
|
||||
unsigned char sha1[20];
|
||||
strbuf_addf(&buf2, "refs/remotes/%s/%s", argv[0], head_name);
|
||||
/* make sure it's valid */
|
||||
if (!resolve_ref(buf2.buf, sha1, 1, NULL))
|
||||
if (!ref_exists(buf2.buf))
|
||||
result |= error("Not a valid ref: %s", buf2.buf);
|
||||
else if (create_symref(buf.buf, buf2.buf, "remote set-head"))
|
||||
result |= error("Could not setup %s", buf.buf);
|
||||
|
Reference in New Issue
Block a user