diff options
author | Arthur Schreiber <schreiber.arthur@googlemail.com> | 2014-02-02 18:20:06 +0100 |
---|---|---|
committer | Arthur Schreiber <schreiber.arthur@googlemail.com> | 2014-02-02 18:20:38 +0100 |
commit | 50ad7cc2089798f65f8fcc49d94ab515f64dd160 (patch) | |
tree | fef9c3030ccb41f3133c6eef889daf6a81133bc1 | |
parent | 40e10630cfbdddd878a6347c1751092bab7f7a28 (diff) | |
download | libgit2-50ad7cc2089798f65f8fcc49d94ab515f64dd160.tar.gz |
Add `git_reference_is_note`.
-rw-r--r-- | include/git2/refs.h | 10 | ||||
-rw-r--r-- | src/refs.c | 11 | ||||
-rw-r--r-- | tests/refs/read.c | 15 |
3 files changed, 36 insertions, 0 deletions
diff --git a/include/git2/refs.h b/include/git2/refs.h index 976b7496b..f9aaea827 100644 --- a/include/git2/refs.h +++ b/include/git2/refs.h @@ -510,6 +510,16 @@ GIT_EXTERN(int) git_reference_is_remote(git_reference *ref); */ GIT_EXTERN(int) git_reference_is_tag(git_reference *ref); +/** + * Check if a reference is a note + * + * @param ref A git reference + * + * @return 1 when the reference lives in the refs/notes + * namespace; 0 otherwise. + */ +GIT_EXTERN(int) git_reference_is_note(git_reference *ref); + typedef enum { GIT_REF_FORMAT_NORMAL = 0u, diff --git a/src/refs.c b/src/refs.c index eb2c34211..ca5f24ea2 100644 --- a/src/refs.c +++ b/src/refs.c @@ -1113,6 +1113,17 @@ int git_reference_is_tag(git_reference *ref) return git_reference__is_tag(ref->name); } +int git_reference__is_note(const char *ref_name) +{ + return git__prefixcmp(ref_name, GIT_REFS_NOTES_DIR) == 0; +} + +int git_reference_is_note(git_reference *ref) +{ + assert(ref); + return git_reference__is_note(ref->name); +} + static int peel_error(int error, git_reference *ref, const char* msg) { giterr_set( diff --git a/tests/refs/read.c b/tests/refs/read.c index 35cf17e9e..52c307eb0 100644 --- a/tests/refs/read.c +++ b/tests/refs/read.c @@ -271,6 +271,21 @@ void test_refs_read__can_determine_if_a_reference_is_a_tag(void) assert_is_tag("refs/remotes/test/master", false); } +static void assert_is_note(const char *name, bool expected_noteness) +{ + git_reference *reference; + cl_git_pass(git_reference_lookup(&reference, g_repo, name)); + cl_assert_equal_i(expected_noteness, git_reference_is_note(reference)); + git_reference_free(reference); +} + +void test_refs_read__can_determine_if_a_reference_is_a_note(void) +{ + assert_is_note("refs/notes/fanout", true); + assert_is_note("refs/heads/packed", false); + assert_is_note("refs/remotes/test/master", false); +} + void test_refs_read__invalid_name_returns_EINVALIDSPEC(void) { git_reference *reference; |