1 #include "clar_libgit2.h"
3 static git_repository
*g_repo
;
4 static git_repository
*g_peel_repo
;
6 void test_refs_peel__initialize(void)
8 cl_git_pass(git_repository_open(&g_repo
, cl_fixture("testrepo.git")));
9 cl_git_pass(git_repository_open(&g_peel_repo
, cl_fixture("peeled.git")));
12 void test_refs_peel__cleanup(void)
14 git_repository_free(g_repo
);
16 git_repository_free(g_peel_repo
);
20 static void assert_peel_generic(
23 git_object_t requested_type
,
24 const char* expected_sha
,
25 git_object_t expected_type
)
31 cl_git_pass(git_reference_lookup(&ref
, repo
, ref_name
));
33 cl_git_pass(git_reference_peel(&peeled
, ref
, requested_type
));
35 cl_git_pass(git_oid_fromstr(&expected_oid
, expected_sha
));
36 cl_assert_equal_oid(&expected_oid
, git_object_id(peeled
));
38 cl_assert_equal_i(expected_type
, git_object_type(peeled
));
40 git_object_free(peeled
);
41 git_reference_free(ref
);
44 static void assert_peel(
46 git_object_t requested_type
,
47 const char* expected_sha
,
48 git_object_t expected_type
)
50 assert_peel_generic(g_repo
, ref_name
, requested_type
,
51 expected_sha
, expected_type
);
54 static void assert_peel_error(int error
, const char *ref_name
, git_object_t requested_type
)
59 cl_git_pass(git_reference_lookup(&ref
, g_repo
, ref_name
));
61 cl_assert_equal_i(error
, git_reference_peel(&peeled
, ref
, requested_type
));
63 git_reference_free(ref
);
66 void test_refs_peel__can_peel_a_tag(void)
68 assert_peel("refs/tags/test", GIT_OBJECT_TAG
,
69 "b25fa35b38051e4ae45d4222e795f9df2e43f1d1", GIT_OBJECT_TAG
);
70 assert_peel("refs/tags/test", GIT_OBJECT_COMMIT
,
71 "e90810b8df3e80c413d903f631643c716887138d", GIT_OBJECT_COMMIT
);
72 assert_peel("refs/tags/test", GIT_OBJECT_TREE
,
73 "53fc32d17276939fc79ed05badaef2db09990016", GIT_OBJECT_TREE
);
74 assert_peel("refs/tags/point_to_blob", GIT_OBJECT_BLOB
,
75 "1385f264afb75a56a5bec74243be9b367ba4ca08", GIT_OBJECT_BLOB
);
78 void test_refs_peel__can_peel_a_branch(void)
80 assert_peel("refs/heads/master", GIT_OBJECT_COMMIT
,
81 "a65fedf39aefe402d3bb6e24df4d4f5fe4547750", GIT_OBJECT_COMMIT
);
82 assert_peel("refs/heads/master", GIT_OBJECT_TREE
,
83 "944c0f6e4dfa41595e6eb3ceecdb14f50fe18162", GIT_OBJECT_TREE
);
86 void test_refs_peel__can_peel_a_symbolic_reference(void)
88 assert_peel("HEAD", GIT_OBJECT_COMMIT
,
89 "a65fedf39aefe402d3bb6e24df4d4f5fe4547750", GIT_OBJECT_COMMIT
);
90 assert_peel("HEAD", GIT_OBJECT_TREE
,
91 "944c0f6e4dfa41595e6eb3ceecdb14f50fe18162", GIT_OBJECT_TREE
);
94 void test_refs_peel__cannot_peel_into_a_non_existing_target(void)
96 assert_peel_error(GIT_EINVALIDSPEC
, "refs/tags/point_to_blob", GIT_OBJECT_TAG
);
99 void test_refs_peel__can_peel_into_any_non_tag_object(void)
101 assert_peel("refs/heads/master", GIT_OBJECT_ANY
,
102 "a65fedf39aefe402d3bb6e24df4d4f5fe4547750", GIT_OBJECT_COMMIT
);
103 assert_peel("refs/tags/point_to_blob", GIT_OBJECT_ANY
,
104 "1385f264afb75a56a5bec74243be9b367ba4ca08", GIT_OBJECT_BLOB
);
105 assert_peel("refs/tags/test", GIT_OBJECT_ANY
,
106 "e90810b8df3e80c413d903f631643c716887138d", GIT_OBJECT_COMMIT
);
109 void test_refs_peel__can_peel_fully_peeled_packed_refs(void)
111 assert_peel_generic(g_peel_repo
,
112 "refs/tags/tag-inside-tags", GIT_OBJECT_ANY
,
113 "0df1a5865c8abfc09f1f2182e6a31be550e99f07",
115 assert_peel_generic(g_peel_repo
,
116 "refs/foo/tag-outside-tags", GIT_OBJECT_ANY
,
117 "0df1a5865c8abfc09f1f2182e6a31be550e99f07",
121 void test_refs_peel__can_peel_fully_peeled_tag_to_tag(void)
123 assert_peel_generic(g_peel_repo
,
124 "refs/tags/tag-inside-tags", GIT_OBJECT_TAG
,
125 "c2596aa0151888587ec5c0187f261e63412d9e11",
127 assert_peel_generic(g_peel_repo
,
128 "refs/foo/tag-outside-tags", GIT_OBJECT_TAG
,
129 "c2596aa0151888587ec5c0187f261e63412d9e11",