Convert the unsigned char * parameter to struct object_id * for files_read_raw_ref and packed_read_raw-ref. Update the documentation. Switch from using get_sha1_hex and a hard-coded 40 to using parse_oid_hex. Signed-off-by: brian m. carlson <sandals@xxxxxxxxxxxxxxxxxxxx> --- refs.c | 8 ++++---- refs/files-backend.c | 13 +++++++------ refs/packed-backend.c | 4 ++-- refs/refs-internal.h | 10 +++++----- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/refs.c b/refs.c index e014d8aa71..eebd7cb263 100644 --- a/refs.c +++ b/refs.c @@ -1375,10 +1375,10 @@ int for_each_rawref(each_ref_fn fn, void *cb_data) } int refs_read_raw_ref(struct ref_store *ref_store, - const char *refname, unsigned char *sha1, + const char *refname, struct object_id *oid, struct strbuf *referent, unsigned int *type) { - return ref_store->be->read_raw_ref(ref_store, refname, sha1, referent, type); + return ref_store->be->read_raw_ref(ref_store, refname, oid, referent, type); } /* This function needs to return a meaningful errno on failure */ @@ -1421,7 +1421,7 @@ const char *refs_resolve_ref_unsafe(struct ref_store *refs, unsigned int read_flags = 0; if (refs_read_raw_ref(refs, refname, - oid->hash, &sb_refname, &read_flags)) { + oid, &sb_refname, &read_flags)) { *flags |= read_flags; if (errno != ENOENT || (resolve_flags & RESOLVE_REF_READING)) return NULL; @@ -1843,7 +1843,7 @@ int refs_verify_refname_available(struct ref_store *refs, if (skip && string_list_has_string(skip, dirname.buf)) continue; - if (!refs_read_raw_ref(refs, dirname.buf, oid.hash, &referent, &type)) { + if (!refs_read_raw_ref(refs, dirname.buf, &oid, &referent, &type)) { strbuf_addf(err, "'%s' exists; cannot create '%s'", dirname.buf, refname); goto cleanup; diff --git a/refs/files-backend.c b/refs/files-backend.c index 417c662d5d..7281f27f62 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -261,7 +261,7 @@ static struct ref_cache *get_loose_ref_cache(struct files_ref_store *refs) } static int files_read_raw_ref(struct ref_store *ref_store, - const char *refname, unsigned char *sha1, + const char *refname, struct object_id *oid, struct strbuf *referent, unsigned int *type) { struct files_ref_store *refs = @@ -270,6 +270,7 @@ static int files_read_raw_ref(struct ref_store *ref_store, struct strbuf sb_path = STRBUF_INIT; const char *path; const char *buf; + const char *p; struct stat st; int fd; int ret = -1; @@ -304,7 +305,7 @@ static int files_read_raw_ref(struct ref_store *ref_store, if (errno != ENOENT) goto out; if (refs_read_raw_ref(refs->packed_ref_store, refname, - sha1, referent, type)) { + oid, referent, type)) { errno = ENOENT; goto out; } @@ -344,7 +345,7 @@ static int files_read_raw_ref(struct ref_store *ref_store, * packed ref: */ if (refs_read_raw_ref(refs->packed_ref_store, refname, - sha1, referent, type)) { + oid, referent, type)) { errno = EISDIR; goto out; } @@ -390,8 +391,8 @@ static int files_read_raw_ref(struct ref_store *ref_store, * Please note that FETCH_HEAD has additional * data after the sha. */ - if (get_sha1_hex(buf, sha1) || - (buf[40] != '\0' && !isspace(buf[40]))) { + if (parse_oid_hex(buf, oid, &p) || + (*p != '\0' && !isspace(*p))) { *type |= REF_ISBROKEN; errno = EINVAL; goto out; @@ -545,7 +546,7 @@ static int lock_raw_ref(struct files_ref_store *refs, */ if (files_read_raw_ref(&refs->base, refname, - lock->old_oid.hash, referent, type)) { + &lock->old_oid, referent, type)) { if (errno == ENOENT) { if (mustexist) { /* Garden variety missing reference. */ diff --git a/refs/packed-backend.c b/refs/packed-backend.c index 25e6fc4ffe..c1960c4cfa 100644 --- a/refs/packed-backend.c +++ b/refs/packed-backend.c @@ -319,7 +319,7 @@ static struct ref_entry *get_packed_ref(struct packed_ref_store *refs, } static int packed_read_raw_ref(struct ref_store *ref_store, - const char *refname, unsigned char *sha1, + const char *refname, struct object_id *oid, struct strbuf *referent, unsigned int *type) { struct packed_ref_store *refs = @@ -335,7 +335,7 @@ static int packed_read_raw_ref(struct ref_store *ref_store, return -1; } - hashcpy(sha1, entry->u.value.oid.hash); + oidcpy(oid, &entry->u.value.oid); *type = REF_ISPACKED; return 0; } diff --git a/refs/refs-internal.h b/refs/refs-internal.h index cf84da33d5..d2bcaef321 100644 --- a/refs/refs-internal.h +++ b/refs/refs-internal.h @@ -181,7 +181,7 @@ struct ref_update { }; int refs_read_raw_ref(struct ref_store *ref_store, - const char *refname, unsigned char *sha1, + const char *refname, struct object_id *oid, struct strbuf *referent, unsigned int *type); /* @@ -603,13 +603,13 @@ typedef int reflog_expire_fn(struct ref_store *ref_store, * Read a reference from the specified reference store, non-recursively. * Set type to describe the reference, and: * - * - If refname is the name of a normal reference, fill in sha1 + * - If refname is the name of a normal reference, fill in oid * (leaving referent unchanged). * * - If refname is the name of a symbolic reference, write the full * name of the reference to which it refers (e.g. * "refs/heads/master") to referent and set the REF_ISSYMREF bit in - * type (leaving sha1 unchanged). The caller is responsible for + * type (leaving oid unchanged). The caller is responsible for * validating that referent is a valid reference name. * * WARNING: refname might be used as part of a filename, so it is @@ -621,7 +621,7 @@ typedef int reflog_expire_fn(struct ref_store *ref_store, * * Return 0 on success. If the ref doesn't exist, set errno to ENOENT * and return -1. If the ref exists but is neither a symbolic ref nor - * a sha1, it is broken; set REF_ISBROKEN in type, set errno to + * an object ID, it is broken; set REF_ISBROKEN in type, set errno to * EINVAL, and return -1. If there is another error reading the ref, * set errno appropriately and return -1. * @@ -638,7 +638,7 @@ typedef int reflog_expire_fn(struct ref_store *ref_store, * refname will still be valid and unchanged. */ typedef int read_raw_ref_fn(struct ref_store *ref_store, - const char *refname, unsigned char *sha1, + const char *refname, struct object_id *oid, struct strbuf *referent, unsigned int *type); struct ref_storage_be { -- 2.14.2.822.g60be5d43e6