зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
ac2ed0d7d5
Коммит
99afe91a6c
8
refs.c
8
refs.c
|
@ -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,
|
||||
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 */
|
||||
|
@ -1428,7 +1428,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;
|
||||
|
||||
/* 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))
|
||||
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;
|
||||
|
|
|
@ -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 @@ stat_ref:
|
|||
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 @@ stat_ref:
|
|||
* 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 @@ stat_ref:
|
|||
* 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 @@ retry:
|
|||
*/
|
||||
|
||||
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. */
|
||||
|
|
|
@ -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,
|
||||
const char *refname, unsigned char *sha1,
|
||||
const char *refname, struct object_id *oid,
|
||||
struct strbuf *referent, unsigned int *type)
|
||||
{
|
||||
struct packed_ref_store *refs =
|
||||
|
@ -734,7 +734,7 @@ static int packed_read_raw_ref(struct ref_store *ref_store,
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (get_sha1_hex(rec, sha1))
|
||||
if (get_oid_hex(rec, oid))
|
||||
die_invalid_line(refs->path, rec, snapshot->eof - rec);
|
||||
|
||||
*type = REF_ISPACKED;
|
||||
|
|
|
@ -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);
|
||||
|
||||
/*
|
||||
|
@ -619,13 +619,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
|
||||
|
@ -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
|
||||
* 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.
|
||||
*
|
||||
|
@ -654,7 +654,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 {
|
||||
|
|
Загрузка…
Ссылка в новой задаче