summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/refdb.c7
-rw-r--r--src/refdb.h1
-rw-r--r--src/refdb_fs.c12
-rw-r--r--src/refs.c19
4 files changed, 27 insertions, 12 deletions
diff --git a/src/refdb.c b/src/refdb.c
index 4f3169f88..411423d57 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -222,6 +222,13 @@ int git_refdb_reflog_read(git_reflog **out, git_refdb *db, const char *name)
return 0;
}
+int git_refdb_has_log(git_refdb *db, const char *refname)
+{
+ assert(db && refname);
+
+ return db->backend->has_log(db->backend, refname);
+}
+
int git_refdb_ensure_log(git_refdb *db, const char *refname)
{
assert(db && refname);
diff --git a/src/refdb.h b/src/refdb.h
index 12c15cb9f..91eecb782 100644
--- a/src/refdb.h
+++ b/src/refdb.h
@@ -48,6 +48,7 @@ int git_refdb_delete(git_refdb *refdb, const char *ref_name);
int git_refdb_reflog_read(git_reflog **out, git_refdb *db, const char *name);
int git_refdb_reflog_write(git_reflog *reflog);
+int git_refdb_has_log(git_refdb *db, const char *refname);
int git_refdb_ensure_log(git_refdb *refdb, const char *refname);
diff --git a/src/refdb_fs.c b/src/refdb_fs.c
index 2cdea8274..e9ce648e1 100644
--- a/src/refdb_fs.c
+++ b/src/refdb_fs.c
@@ -1278,6 +1278,17 @@ cleanup:
return ret;
}
+static int refdb_reflog_fs__has_log(git_refdb_backend *_backend, const char *name)
+{
+ refdb_fs_backend *backend;
+
+ assert(_backend && name);
+
+ backend = (refdb_fs_backend *) _backend;
+
+ return has_reflog(backend->repo, name);
+}
+
static int refdb_reflog_fs__read(git_reflog **out, git_refdb_backend *_backend, const char *name)
{
int error = -1;
@@ -1608,6 +1619,7 @@ int git_refdb_backend_fs(
backend->parent.del = &refdb_fs_backend__delete;
backend->parent.rename = &refdb_fs_backend__rename;
backend->parent.compress = &refdb_fs_backend__compress;
+ backend->parent.has_log = &refdb_reflog_fs__has_log;
backend->parent.ensure_log = &refdb_reflog_fs__ensure_log;
backend->parent.free = &refdb_fs_backend__free;
backend->parent.reflog_read = &refdb_reflog_fs__read;
diff --git a/src/refs.c b/src/refs.c
index 902a17cfc..519770d2d 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -1050,22 +1050,17 @@ int git_reference__update_terminal(
return reference__update_terminal(repo, ref_name, oid, 0);
}
-int git_reference_has_log(
- git_reference *ref)
+int git_reference_has_log(git_repository *repo, const char *refname)
{
- git_buf path = GIT_BUF_INIT;
- int result;
-
- assert(ref);
+ int error;
+ git_refdb *refdb;
- if (git_buf_join_n(&path, '/', 3, ref->db->repo->path_repository,
- GIT_REFLOG_DIR, ref->name) < 0)
- return -1;
+ assert(repo && refname);
- result = git_path_isfile(git_buf_cstr(&path));
- git_buf_free(&path);
+ if ((error = git_repository_refdb__weakptr(&refdb, repo)) < 0)
+ return error;
- return result;
+ return git_refdb_has_log(refdb, refname);
}
int git_reference_ensure_log(git_repository *repo, const char *refname)