diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/refdb.c | 7 | ||||
-rw-r--r-- | src/refdb.h | 1 | ||||
-rw-r--r-- | src/refdb_fs.c | 12 | ||||
-rw-r--r-- | src/refs.c | 19 |
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) |