summaryrefslogtreecommitdiff
path: root/src/refdb.c
diff options
context:
space:
mode:
authorEtienne Samson <samson.etienne@gmail.com>2019-02-02 19:00:45 +0100
committerEtienne Samson <samson.etienne@gmail.com>2019-09-05 10:26:41 +0200
commitbaf411e701abb5f89e175b24c2f61c45c9d5e59a (patch)
tree6cd7e857e30f7cf1bb83828e0b5bb1f1c6b6cddf /src/refdb.c
parentc2cf9844a2b936880df021101f7ecd26e87d0a04 (diff)
downloadlibgit2-baf411e701abb5f89e175b24c2f61c45c9d5e59a.tar.gz
refdb: ensure all mandatory functions are provided at setup time
Diffstat (limited to 'src/refdb.c')
-rw-r--r--src/refdb.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/refdb.c b/src/refdb.c
index e0c044f1e..fbbf5193c 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -68,6 +68,16 @@ int git_refdb_set_backend(git_refdb *db, git_refdb_backend *backend)
{
GIT_ERROR_CHECK_VERSION(backend, GIT_REFDB_BACKEND_VERSION, "git_refdb_backend");
+ if (!backend->exists || !backend->lookup || !backend->iterator ||
+ !backend->write || !backend->rename || !backend->del ||
+ !backend->has_log || !backend->ensure_log || !backend->free ||
+ !backend->reflog_read || !backend->reflog_write ||
+ !backend->reflog_rename || !backend->reflog_delete ||
+ (backend->lock && !backend->unlock)) {
+ git_error_set(GIT_ERROR_REFERENCE, "incomplete refdb backend implementation");
+ return GIT_EINVALID;
+ }
+
refdb_free_backend(db);
db->backend = backend;