refs_verify_refname_available(): implement once for all backends
It turns out that we can now implement `refs_verify_refname_available()` based on the other virtual functions, so there is no need for it to be defined at the backend level. Instead, define it once in `refs.c` and remove the `files_backend` definition. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
e121b9cb5f
commit
b05855b5bc
@ -1724,10 +1724,9 @@ retry:
|
||||
goto error_return;
|
||||
} else if (remove_dir_recursively(&ref_file,
|
||||
REMOVE_DIR_EMPTY_ONLY)) {
|
||||
if (verify_refname_available_dir(
|
||||
refname, extras, skip,
|
||||
get_loose_refs(refs),
|
||||
err)) {
|
||||
if (refs_verify_refname_available(
|
||||
&refs->base, refname,
|
||||
extras, skip, err)) {
|
||||
/*
|
||||
* The error message set by
|
||||
* verify_refname_available() is OK.
|
||||
@ -2094,9 +2093,9 @@ static struct ref_lock *lock_ref_sha1_basic(struct files_ref_store *refs,
|
||||
*/
|
||||
if (remove_empty_directories(&ref_file)) {
|
||||
last_errno = errno;
|
||||
if (!verify_refname_available_dir(
|
||||
refname, extras, skip,
|
||||
get_loose_refs(refs), err))
|
||||
if (!refs_verify_refname_available(
|
||||
&refs->base,
|
||||
refname, extras, skip, err))
|
||||
strbuf_addf(err, "there are still refs under '%s'",
|
||||
refname);
|
||||
goto error_return;
|
||||
@ -2108,9 +2107,8 @@ static struct ref_lock *lock_ref_sha1_basic(struct files_ref_store *refs,
|
||||
if (!resolved) {
|
||||
last_errno = errno;
|
||||
if (last_errno != ENOTDIR ||
|
||||
!verify_refname_available_dir(
|
||||
refname, extras, skip,
|
||||
get_loose_refs(refs), err))
|
||||
!refs_verify_refname_available(&refs->base, refname,
|
||||
extras, skip, err))
|
||||
strbuf_addf(err, "unable to resolve reference '%s': %s",
|
||||
refname, strerror(last_errno));
|
||||
|
||||
@ -2606,26 +2604,6 @@ static int rename_tmp_log(struct files_ref_store *refs, const char *newrefname)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int files_verify_refname_available(struct ref_store *ref_store,
|
||||
const char *newname,
|
||||
const struct string_list *extras,
|
||||
const struct string_list *skip,
|
||||
struct strbuf *err)
|
||||
{
|
||||
struct files_ref_store *refs =
|
||||
files_downcast(ref_store, REF_STORE_READ, "verify_refname_available");
|
||||
struct ref_dir *packed_refs = get_packed_refs(refs);
|
||||
struct ref_dir *loose_refs = get_loose_refs(refs);
|
||||
|
||||
if (verify_refname_available_dir(newname, extras, skip,
|
||||
packed_refs, err) ||
|
||||
verify_refname_available_dir(newname, extras, skip,
|
||||
loose_refs, err))
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int write_ref_to_lockfile(struct ref_lock *lock,
|
||||
const unsigned char *sha1, struct strbuf *err);
|
||||
static int commit_ref_update(struct files_ref_store *refs,
|
||||
@ -4288,7 +4266,6 @@ struct ref_storage_be refs_be_files = {
|
||||
|
||||
files_ref_iterator_begin,
|
||||
files_read_raw_ref,
|
||||
files_verify_refname_available,
|
||||
|
||||
files_reflog_iterator_begin,
|
||||
files_for_each_reflog_ent,
|
||||
|
||||
Reference in New Issue
Block a user