diff options
| author | nulltoken <emeric.fermas@gmail.com> | 2012-07-20 16:27:56 +0200 |
|---|---|---|
| committer | nulltoken <emeric.fermas@gmail.com> | 2012-07-24 16:09:45 +0200 |
| commit | 88bcd5153f6dc9e0c7ebc73a1e87c0da17e8df28 (patch) | |
| tree | b0277fc5af49421c445a55764c4cfd8485dc7947 | |
| parent | eed378b66960414942ac78840afbcb19bfffbf15 (diff) | |
| download | libgit2-88bcd5153f6dc9e0c7ebc73a1e87c0da17e8df28.tar.gz | |
branch: introduce git_reference_is_branch()
| -rw-r--r-- | include/git2/refs.h | 10 | ||||
| -rw-r--r-- | src/refs.c | 7 | ||||
| -rw-r--r-- | tests-clar/refs/read.c | 16 |
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); +} |
