summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornulltoken <emeric.fermas@gmail.com>2012-07-20 16:27:56 +0200
committernulltoken <emeric.fermas@gmail.com>2012-07-24 16:09:45 +0200
commit88bcd5153f6dc9e0c7ebc73a1e87c0da17e8df28 (patch)
treeb0277fc5af49421c445a55764c4cfd8485dc7947
parenteed378b66960414942ac78840afbcb19bfffbf15 (diff)
downloadlibgit2-88bcd5153f6dc9e0c7ebc73a1e87c0da17e8df28.tar.gz
branch: introduce git_reference_is_branch()
-rw-r--r--include/git2/refs.h10
-rw-r--r--src/refs.c7
-rw-r--r--tests-clar/refs/read.c16
3 files changed, 33 insertions, 0 deletions
diff --git a/include/git2/refs.h b/include/git2/refs.h
index b119e90b1..ac876ebb0 100644
--- a/include/git2/refs.h
+++ b/include/git2/refs.h
@@ -384,6 +384,16 @@ GIT_EXTERN(int) git_reference_remote_tracking_from_branch(
git_reference *branch_ref
);
+/**
+ * Check if a reference is a local branch.
+ *
+ * @param ref A git reference
+ *
+ * @return 1 when the reference lives in the refs/heads
+ * namespace; 0 otherwise.
+ */
+GIT_EXTERN(int) git_reference_is_branch(git_reference *ref);
+
/** @} */
GIT_END_DECL
#endif
diff --git a/src/refs.c b/src/refs.c
index b3c140bec..d08ea9604 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -1888,3 +1888,10 @@ cleanup:
git_buf_free(&buf);
return error;
}
+
+int git_reference_is_branch(git_reference *ref)
+{
+ assert(ref);
+
+ return git__prefixcmp(ref->name, GIT_REFS_HEADS_DIR) == 0;
+}
diff --git a/tests-clar/refs/read.c b/tests-clar/refs/read.c
index ce4eefeba..1948e0a56 100644
--- a/tests-clar/refs/read.c
+++ b/tests-clar/refs/read.c
@@ -202,3 +202,19 @@ void test_refs_read__unfound_return_ENOTFOUND(void)
cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&reference, g_repo, "refs/tags/test/master"));
cl_assert_equal_i(GIT_ENOTFOUND, git_reference_lookup(&reference, g_repo, "refs/tags/test/farther/master"));
}
+
+static void assert_is_branch(const char *name, bool expected_branchness)
+{
+ git_reference *reference;
+ cl_git_pass(git_reference_lookup(&reference, g_repo, name));
+ cl_assert_equal_i(expected_branchness, git_reference_is_branch(reference));
+ git_reference_free(reference);
+}
+
+void test_refs_read__can_determine_if_a_reference_is_a_local_branch(void)
+{
+ assert_is_branch("refs/heads/master", true);
+ assert_is_branch("refs/heads/packed", true);
+ assert_is_branch("refs/remotes/test/master", false);
+ assert_is_branch("refs/tags/e90810b", false);
+}