summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Schreiber <schreiber.arthur@googlemail.com>2014-02-02 18:20:06 +0100
committerArthur Schreiber <schreiber.arthur@googlemail.com>2014-02-02 18:20:38 +0100
commit50ad7cc2089798f65f8fcc49d94ab515f64dd160 (patch)
treefef9c3030ccb41f3133c6eef889daf6a81133bc1
parent40e10630cfbdddd878a6347c1751092bab7f7a28 (diff)
downloadlibgit2-50ad7cc2089798f65f8fcc49d94ab515f64dd160.tar.gz
Add `git_reference_is_note`.
-rw-r--r--include/git2/refs.h10
-rw-r--r--src/refs.c11
-rw-r--r--tests/refs/read.c15
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;