refs: convert read_raw_ref backends to struct object_id

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@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
brian m. carlson 2017-10-15 22:07:11 +00:00 committed by Junio C Hamano
parent ac2ed0d7d5
commit 99afe91a6c
4 changed files with 18 additions and 17 deletions

8
refs.c
View File

@ -1382,10 +1382,10 @@ int for_each_rawref(each_ref_fn fn, void *cb_data)
} }


int refs_read_raw_ref(struct ref_store *ref_store, 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) 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 */ /* This function needs to return a meaningful errno on failure */
@ -1428,7 +1428,7 @@ const char *refs_resolve_ref_unsafe(struct ref_store *refs,
unsigned int read_flags = 0; unsigned int read_flags = 0;


if (refs_read_raw_ref(refs, refname, if (refs_read_raw_ref(refs, refname,
oid->hash, &sb_refname, &read_flags)) { oid, &sb_refname, &read_flags)) {
*flags |= read_flags; *flags |= read_flags;


/* In reading mode, refs must eventually resolve */ /* In reading mode, refs must eventually resolve */
@ -1879,7 +1879,7 @@ int refs_verify_refname_available(struct ref_store *refs,
if (skip && string_list_has_string(skip, dirname.buf)) if (skip && string_list_has_string(skip, dirname.buf))
continue; 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'", strbuf_addf(err, "'%s' exists; cannot create '%s'",
dirname.buf, refname); dirname.buf, refname);
goto cleanup; goto cleanup;

View File

@ -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, 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 strbuf *referent, unsigned int *type)
{ {
struct files_ref_store *refs = 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; struct strbuf sb_path = STRBUF_INIT;
const char *path; const char *path;
const char *buf; const char *buf;
const char *p;
struct stat st; struct stat st;
int fd; int fd;
int ret = -1; int ret = -1;
@ -304,7 +305,7 @@ stat_ref:
if (errno != ENOENT) if (errno != ENOENT)
goto out; goto out;
if (refs_read_raw_ref(refs->packed_ref_store, refname, if (refs_read_raw_ref(refs->packed_ref_store, refname,
sha1, referent, type)) { oid, referent, type)) {
errno = ENOENT; errno = ENOENT;
goto out; goto out;
} }
@ -344,7 +345,7 @@ stat_ref:
* packed ref: * packed ref:
*/ */
if (refs_read_raw_ref(refs->packed_ref_store, refname, if (refs_read_raw_ref(refs->packed_ref_store, refname,
sha1, referent, type)) { oid, referent, type)) {
errno = EISDIR; errno = EISDIR;
goto out; goto out;
} }
@ -390,8 +391,8 @@ stat_ref:
* Please note that FETCH_HEAD has additional * Please note that FETCH_HEAD has additional
* data after the sha. * data after the sha.
*/ */
if (get_sha1_hex(buf, sha1) || if (parse_oid_hex(buf, oid, &p) ||
(buf[40] != '\0' && !isspace(buf[40]))) { (*p != '\0' && !isspace(*p))) {
*type |= REF_ISBROKEN; *type |= REF_ISBROKEN;
errno = EINVAL; errno = EINVAL;
goto out; goto out;
@ -545,7 +546,7 @@ retry:
*/ */


if (files_read_raw_ref(&refs->base, refname, if (files_read_raw_ref(&refs->base, refname,
lock->old_oid.hash, referent, type)) { &lock->old_oid, referent, type)) {
if (errno == ENOENT) { if (errno == ENOENT) {
if (mustexist) { if (mustexist) {
/* Garden variety missing reference. */ /* Garden variety missing reference. */

View File

@ -716,7 +716,7 @@ static struct snapshot *get_snapshot(struct packed_ref_store *refs)
} }


static int packed_read_raw_ref(struct ref_store *ref_store, 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 strbuf *referent, unsigned int *type)
{ {
struct packed_ref_store *refs = struct packed_ref_store *refs =
@ -734,7 +734,7 @@ static int packed_read_raw_ref(struct ref_store *ref_store,
return -1; return -1;
} }


if (get_sha1_hex(rec, sha1)) if (get_oid_hex(rec, oid))
die_invalid_line(refs->path, rec, snapshot->eof - rec); die_invalid_line(refs->path, rec, snapshot->eof - rec);


*type = REF_ISPACKED; *type = REF_ISPACKED;

View File

@ -181,7 +181,7 @@ struct ref_update {
}; };


int refs_read_raw_ref(struct ref_store *ref_store, 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); struct strbuf *referent, unsigned int *type);


/* /*
@ -619,13 +619,13 @@ typedef int reflog_expire_fn(struct ref_store *ref_store,
* Read a reference from the specified reference store, non-recursively. * Read a reference from the specified reference store, non-recursively.
* Set type to describe the reference, and: * 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). * (leaving referent unchanged).
* *
* - If refname is the name of a symbolic reference, write the full * - If refname is the name of a symbolic reference, write the full
* name of the reference to which it refers (e.g. * name of the reference to which it refers (e.g.
* "refs/heads/master") to referent and set the REF_ISSYMREF bit in * "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. * validating that referent is a valid reference name.
* *
* WARNING: refname might be used as part of a filename, so it is * WARNING: refname might be used as part of a filename, so it is
@ -637,7 +637,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 * 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 * 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, * EINVAL, and return -1. If there is another error reading the ref,
* set errno appropriately and return -1. * set errno appropriately and return -1.
* *
@ -654,7 +654,7 @@ typedef int reflog_expire_fn(struct ref_store *ref_store,
* refname will still be valid and unchanged. * refname will still be valid and unchanged.
*/ */
typedef int read_raw_ref_fn(struct ref_store *ref_store, 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 strbuf *referent, unsigned int *type);


struct ref_storage_be { struct ref_storage_be {