aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Haggerty <mhagger@alum.mit.edu>2016-09-04 18:08:26 +0200
committerJunio C Hamano <gitster@pobox.com>2016-09-09 15:28:13 -0700
commit62665823d2ddbe69abdac4a9db399769c3e278b4 (patch)
treec1260f3c82d3cab09858512a55020743bbc53e9f
parente1e33b722c50c26546335fd5a709f89726c2ea2a (diff)
downloadgit-62665823d2ddbe69abdac4a9db399769c3e278b4.tar.gz
git-62665823d2ddbe69abdac4a9db399769c3e278b4.tar.xz
refs: make verify_refname_available() virtual
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--refs.c10
-rw-r--r--refs/files-backend.c14
-rw-r--r--refs/refs-internal.h7
3 files changed, 25 insertions, 6 deletions
diff --git a/refs.c b/refs.c
index 775c54eb4..a5c11088f 100644
--- a/refs.c
+++ b/refs.c
@@ -1428,3 +1428,13 @@ int ref_transaction_commit(struct ref_transaction *transaction,
return refs->be->transaction_commit(refs, transaction, err);
}
+
+int verify_refname_available(const char *refname,
+ const struct string_list *extra,
+ const struct string_list *skip,
+ struct strbuf *err)
+{
+ struct ref_store *refs = get_ref_store(NULL);
+
+ return refs->be->verify_refname_available(refs, refname, extra, skip, err);
+}
diff --git a/refs/files-backend.c b/refs/files-backend.c
index 9cf2f82f7..44eef1cec 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -2549,13 +2549,14 @@ out:
return ret;
}
-int verify_refname_available(const char *newname,
- const struct string_list *extras,
- const struct string_list *skip,
- struct strbuf *err)
+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 =
- get_files_ref_store(NULL, "verify_refname_available");
+ files_downcast(ref_store, 1, "verify_refname_available");
struct ref_dir *packed_refs = get_packed_refs(refs);
struct ref_dir *loose_refs = get_loose_refs(refs);
@@ -4021,5 +4022,6 @@ struct ref_storage_be refs_be_files = {
files_ref_store_create,
files_transaction_commit,
- files_read_raw_ref
+ files_read_raw_ref,
+ files_verify_refname_available
};
diff --git a/refs/refs-internal.h b/refs/refs-internal.h
index 19cb6e11a..6c698f442 100644
--- a/refs/refs-internal.h
+++ b/refs/refs-internal.h
@@ -542,6 +542,12 @@ typedef int read_raw_ref_fn(struct ref_store *ref_store,
const char *refname, unsigned char *sha1,
struct strbuf *referent, unsigned int *type);
+typedef int verify_refname_available_fn(struct ref_store *ref_store,
+ const char *newname,
+ const struct string_list *extras,
+ const struct string_list *skip,
+ struct strbuf *err);
+
struct ref_storage_be {
struct ref_storage_be *next;
const char *name;
@@ -549,6 +555,7 @@ struct ref_storage_be {
ref_transaction_commit_fn *transaction_commit;
read_raw_ref_fn *read_raw_ref;
+ verify_refname_available_fn *verify_refname_available;
};
extern struct ref_storage_be refs_be_files;