summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornulltoken <emeric.fermas@gmail.com>2012-07-04 11:58:04 +0200
committernulltoken <emeric.fermas@gmail.com>2012-07-07 12:15:28 +0200
commit75261421ec00b6dc0a72931ed7640743a4998c7d (patch)
tree87c013f55be20c3fe17169189e6ffb38bdc1b456
parentb6bfd96fdd0cffc37c843cbf0f7c43efdbe96ef9 (diff)
downloadlibgit2-75261421ec00b6dc0a72931ed7640743a4998c7d.tar.gz
refs: add git_reference_has_log()
-rw-r--r--include/git2/refs.h10
-rw-r--r--src/refs.c17
-rw-r--r--tests-clar/refs/reflog.c17
3 files changed, 44 insertions, 0 deletions
diff --git a/include/git2/refs.h b/include/git2/refs.h
index 2aa0ac267..7f6eb0e9b 100644
--- a/include/git2/refs.h
+++ b/include/git2/refs.h
@@ -353,6 +353,16 @@ GIT_EXTERN(int) git_reference_foreach_glob(
void *payload
);
+/**
+ * Check if a reflog exists for the specified reference.
+ *
+ * @param ref A git reference
+ *
+ * @return 0 when no reflog can be found, 1 when it exists;
+ * otherwise an error code.
+ */
+GIT_EXTERN(int) git_reference_has_log(git_reference *ref);
+
/** @} */
GIT_END_DECL
#endif
diff --git a/src/refs.c b/src/refs.c
index 80349b710..2aba83ef5 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -1802,3 +1802,20 @@ int git_reference_foreach_glob(
return git_reference_foreach(
repo, list_flags, fromglob_cb, &data);
}
+
+int git_reference_has_log(
+ git_reference *ref)
+{
+ git_buf path = GIT_BUF_INIT;
+ int result;
+
+ assert(ref);
+
+ if (git_buf_join_n(&path, '/', 3, ref->owner->path_repository, GIT_REFLOG_DIR, ref->name) < 0)
+ return -1;
+
+ result = git_path_isfile(git_buf_cstr(&path));
+ git_buf_free(&path);
+
+ return result;
+}
diff --git a/tests-clar/refs/reflog.c b/tests-clar/refs/reflog.c
index a945b4789..05f3786bb 100644
--- a/tests-clar/refs/reflog.c
+++ b/tests-clar/refs/reflog.c
@@ -145,3 +145,20 @@ void test_refs_reflog__renaming_the_reference_moves_the_reflog(void)
git_buf_free(&moved_log_path);
git_buf_free(&master_log_path);
}
+static void assert_has_reflog(bool expected_result, const char *name)
+{
+ git_reference *ref;
+
+ cl_git_pass(git_reference_lookup(&ref, g_repo, name));
+
+ cl_assert_equal_i(expected_result, git_reference_has_log(ref));
+
+ git_reference_free(ref);
+}
+
+void test_refs_reflog__reference_has_reflog(void)
+{
+ assert_has_reflog(true, "HEAD");
+ assert_has_reflog(true, "refs/heads/master");
+ assert_has_reflog(false, "refs/heads/subtrees");
+}