summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2013-11-23 14:39:53 +0100
committerCarlos Martín Nieto <cmn@dwim.me>2013-12-09 15:55:11 +0100
commitf21051297cc698644ea0dc9c7122ec944dba2863 (patch)
treeb94a20b868860f84c5a674bbada254e789f4e43a /src
parent8d5ec9106afbca346a8def84ef20de0a7ba2240a (diff)
downloadlibgit2-f21051297cc698644ea0dc9c7122ec944dba2863.tar.gz
refs: expose has_log() on the backend
The frontend used to look at the file directly, but that's obviously not the right thing to do. Expose it on the backend and use that function instead.
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)