diff --git a/builtin/describe.c b/builtin/describe.c index 29075dbd0f..352f8821fd 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -181,7 +181,7 @@ static int get_name(const char *path, const struct object_id *oid, int flag, voi } /* Is it annotated? */ - if (!peel_ref(path, peeled.hash)) { + if (!peel_ref(path, &peeled)) { is_annotated = !!oidcmp(oid, &peeled); } else { oidcpy(&peeled, oid); diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 9c6b224973..631de28761 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -562,7 +562,7 @@ static int mark_tagged(const char *path, const struct object_id *oid, int flag, if (entry) entry->tagged = 1; - if (!peel_ref(path, peeled.hash)) { + if (!peel_ref(path, &peeled)) { entry = packlist_find(&to_pack, peeled.hash, NULL); if (entry) entry->tagged = 1; @@ -2371,7 +2371,7 @@ static int add_ref_tag(const char *path, const struct object_id *oid, int flag, struct object_id peeled; if (starts_with(path, "refs/tags/") && /* is a tag? */ - !peel_ref(path, peeled.hash) && /* peelable? */ + !peel_ref(path, &peeled) && /* peelable? */ packlist_find(&to_pack, peeled.hash, NULL)) /* object packed? */ add_tag_chain(oid); return 0; diff --git a/builtin/show-ref.c b/builtin/show-ref.c index cbb8cfc7d2..41e5e71cad 100644 --- a/builtin/show-ref.c +++ b/builtin/show-ref.c @@ -38,7 +38,7 @@ static void show_one(const char *refname, const struct object_id *oid) if (!deref_tags) return; - if (!peel_ref(refname, peeled.hash)) { + if (!peel_ref(refname, &peeled)) { hex = find_unique_abbrev(peeled.hash, abbrev); printf("%s %s^{}\n", hex, refname); } diff --git a/refs.c b/refs.c index ecb43a113e..f8a2d98666 100644 --- a/refs.c +++ b/refs.c @@ -1697,7 +1697,7 @@ int refs_pack_refs(struct ref_store *refs, unsigned int flags) } int refs_peel_ref(struct ref_store *refs, const char *refname, - unsigned char *sha1) + struct object_id *oid) { int flag; struct object_id base; @@ -1707,7 +1707,7 @@ int refs_peel_ref(struct ref_store *refs, const char *refname, if (ref_iterator_peel(current_ref_iter, &peeled)) return -1; - hashcpy(sha1, peeled.hash); + oidcpy(oid, &peeled); return 0; } @@ -1715,12 +1715,12 @@ int refs_peel_ref(struct ref_store *refs, const char *refname, RESOLVE_REF_READING, &base, &flag)) return -1; - return peel_object(base.hash, sha1); + return peel_object(base.hash, oid->hash); } -int peel_ref(const char *refname, unsigned char *sha1) +int peel_ref(const char *refname, struct object_id *oid) { - return refs_peel_ref(get_main_ref_store(), refname, sha1); + return refs_peel_ref(get_main_ref_store(), refname, oid); } int refs_create_symref(struct ref_store *refs, diff --git a/refs.h b/refs.h index 9d59c414aa..89f28d482d 100644 --- a/refs.h +++ b/refs.h @@ -114,14 +114,14 @@ extern int refs_init_db(struct strbuf *err); /* * If refname is a non-symbolic reference that refers to a tag object, * and the tag can be (recursively) dereferenced to a non-tag object, - * store the SHA1 of the referred-to object to sha1 and return 0. If - * any of these conditions are not met, return a non-zero value. + * store the object ID of the referred-to object to oid and return 0. + * If any of these conditions are not met, return a non-zero value. * Symbolic references are considered unpeelable, even if they * ultimately resolve to a peelable tag. */ int refs_peel_ref(struct ref_store *refs, const char *refname, - unsigned char *sha1); -int peel_ref(const char *refname, unsigned char *sha1); + struct object_id *oid); +int peel_ref(const char *refname, struct object_id *oid); /** * Resolve refname in the nested "gitlink" repository in the specified diff --git a/t/helper/test-ref-store.c b/t/helper/test-ref-store.c index af8dba9560..cea3285ada 100644 --- a/t/helper/test-ref-store.c +++ b/t/helper/test-ref-store.c @@ -72,12 +72,12 @@ static int cmd_pack_refs(struct ref_store *refs, const char **argv) static int cmd_peel_ref(struct ref_store *refs, const char **argv) { const char *refname = notnull(*argv++, "refname"); - unsigned char sha1[20]; + struct object_id oid; int ret; - ret = refs_peel_ref(refs, refname, sha1); + ret = refs_peel_ref(refs, refname, &oid); if (!ret) - puts(sha1_to_hex(sha1)); + puts(oid_to_hex(&oid)); return ret; } diff --git a/upload-pack.c b/upload-pack.c index 030eba5a0c..6d5f3c0d39 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -955,7 +955,7 @@ static int send_ref(const char *refname, const struct object_id *oid, packet_write_fmt(1, "%s %s\n", oid_to_hex(oid), refname_nons); } capabilities = NULL; - if (!peel_ref(refname, peeled.hash)) + if (!peel_ref(refname, &peeled)) packet_write_fmt(1, "%s %s^{}\n", oid_to_hex(&peeled), refname_nons); return 0; }