]>
Commit | Line | Data |
---|---|---|
ac250c56 BS |
1 | #include "clar_libgit2.h" |
2 | ||
3 | #include "git2/revparse.h" | |
4 | ||
5 | static git_repository *g_repo; | |
6 | static git_object *g_obj; | |
763b8381 | 7 | static char g_orig_tz[16] = {0}; |
ac250c56 BS |
8 | |
9 | ||
10 | ||
387d01b8 | 11 | /* Helpers */ |
27ee8483 | 12 | static void test_object(const char *spec, const char *expected_oid) |
ac250c56 | 13 | { |
e28dd29b | 14 | char objstr[64] = {0}; |
27ee8483 | 15 | |
e28dd29b | 16 | cl_git_pass(git_revparse_single(&g_obj, g_repo, spec)); |
17 | git_oid_fmt(objstr, git_object_id(g_obj)); | |
18 | cl_assert_equal_s(objstr, expected_oid); | |
27ee8483 | 19 | |
e28dd29b | 20 | git_object_free(g_obj); |
21 | g_obj = NULL; | |
ac250c56 BS |
22 | } |
23 | ||
24 | ||
25 | void test_refs_revparse__initialize(void) | |
26 | { | |
e28dd29b | 27 | char *tz = cl_getenv("TZ"); |
28 | if (tz) | |
29 | strcpy(g_orig_tz, tz); | |
30 | cl_setenv("TZ", "UTC"); | |
31 | g_repo = cl_git_sandbox_init("testrepo.git"); | |
ac250c56 BS |
32 | } |
33 | ||
34 | void test_refs_revparse__cleanup(void) | |
35 | { | |
e28dd29b | 36 | cl_git_sandbox_cleanup(); |
37 | g_obj = NULL; | |
38 | cl_setenv("TZ", g_orig_tz); | |
ac250c56 BS |
39 | } |
40 | ||
41 | ||
9d7bdf71 BS |
42 | void test_refs_revparse__nonexistant_object(void) |
43 | { | |
e28dd29b | 44 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "this doesn't exist")); |
45 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "this doesn't exist^1")); | |
46 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "this doesn't exist~2")); | |
9d7bdf71 BS |
47 | } |
48 | ||
ac250c56 BS |
49 | void test_refs_revparse__shas(void) |
50 | { | |
e28dd29b | 51 | test_object("c47800c7266a2be04c571c04d5a6614691ea99bd", "c47800c7266a2be04c571c04d5a6614691ea99bd"); |
52 | test_object("c47800c", "c47800c7266a2be04c571c04d5a6614691ea99bd"); | |
ac250c56 BS |
53 | } |
54 | ||
55 | void test_refs_revparse__head(void) | |
56 | { | |
e28dd29b | 57 | test_object("HEAD", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); |
ac250c56 BS |
58 | } |
59 | ||
60 | void test_refs_revparse__full_refs(void) | |
61 | { | |
e28dd29b | 62 | test_object("refs/heads/master", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); |
63 | test_object("refs/heads/test", "e90810b8df3e80c413d903f631643c716887138d"); | |
64 | test_object("refs/tags/test", "b25fa35b38051e4ae45d4222e795f9df2e43f1d1"); | |
ac250c56 BS |
65 | } |
66 | ||
67 | void test_refs_revparse__partial_refs(void) | |
68 | { | |
e28dd29b | 69 | test_object("point_to_blob", "1385f264afb75a56a5bec74243be9b367ba4ca08"); |
70 | test_object("packed-test", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045"); | |
71 | test_object("br2", "a4a7dce85cf63874e984719f4fdd239f5145052f"); | |
ac250c56 BS |
72 | } |
73 | ||
74 | void test_refs_revparse__describe_output(void) | |
75 | { | |
e28dd29b | 76 | test_object("blah-7-gc47800c", "c47800c7266a2be04c571c04d5a6614691ea99bd"); |
77 | test_object("not-good", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); | |
ac250c56 BS |
78 | } |
79 | ||
023c6f69 BS |
80 | void test_refs_revparse__nth_parent(void) |
81 | { | |
e28dd29b | 82 | test_object("be3563a^1", "9fd738e8f7967c078dceed8190330fc8648ee56a"); |
83 | test_object("be3563a^", "9fd738e8f7967c078dceed8190330fc8648ee56a"); | |
84 | test_object("be3563a^2", "c47800c7266a2be04c571c04d5a6614691ea99bd"); | |
85 | test_object("be3563a^1^1", "4a202b346bb0fb0db7eff3cffeb3c70babbd2045"); | |
86 | test_object("be3563a^2^1", "5b5b025afb0b4c913b4c338a42934a3863bf3644"); | |
87 | test_object("be3563a^0", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); | |
9d7bdf71 BS |
88 | } |
89 | ||
90 | void test_refs_revparse__not_tag(void) | |
91 | { | |
e28dd29b | 92 | test_object("point_to_blob^{}", "1385f264afb75a56a5bec74243be9b367ba4ca08"); |
93 | test_object("wrapped_tag^{}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); | |
9d7bdf71 BS |
94 | } |
95 | ||
96 | void test_refs_revparse__to_type(void) | |
97 | { | |
e28dd29b | 98 | test_object("wrapped_tag^{commit}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); |
99 | test_object("wrapped_tag^{tree}", "944c0f6e4dfa41595e6eb3ceecdb14f50fe18162"); | |
100 | test_object("point_to_blob^{blob}", "1385f264afb75a56a5bec74243be9b367ba4ca08"); | |
7149a625 | 101 | |
e28dd29b | 102 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "wrapped_tag^{blob}")); |
023c6f69 BS |
103 | } |
104 | ||
38533d5a BS |
105 | void test_refs_revparse__linear_history(void) |
106 | { | |
e28dd29b | 107 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "foo~bar")); |
108 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "master~bar")); | |
eb6bc45f | 109 | |
e28dd29b | 110 | test_object("master~0", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); |
111 | test_object("master~1", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); | |
112 | test_object("master~2", "9fd738e8f7967c078dceed8190330fc8648ee56a"); | |
113 | test_object("master~1~1", "9fd738e8f7967c078dceed8190330fc8648ee56a"); | |
38533d5a BS |
114 | } |
115 | ||
116 | void test_refs_revparse__chaining(void) | |
117 | { | |
e28dd29b | 118 | test_object("master~1^1", "9fd738e8f7967c078dceed8190330fc8648ee56a"); |
119 | test_object("master~1^2", "c47800c7266a2be04c571c04d5a6614691ea99bd"); | |
120 | test_object("master^1^2~1", "5b5b025afb0b4c913b4c338a42934a3863bf3644"); | |
121 | test_object("master^1^1^1^1^1", "8496071c1b46c854b31185ea97743be6a8774479"); | |
38533d5a BS |
122 | } |
123 | ||
023c6f69 BS |
124 | void test_refs_revparse__reflog(void) |
125 | { | |
e28dd29b | 126 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "@{-xyz}")); |
127 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "@{-0}")); | |
128 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "@{1000}")); | |
a51bdbcf | 129 | |
e28dd29b | 130 | test_object("@{-2}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); |
131 | test_object("@{-1}", "a4a7dce85cf63874e984719f4fdd239f5145052f"); | |
132 | test_object("master@{0}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); | |
133 | test_object("master@{1}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); | |
134 | test_object("@{0}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); | |
135 | test_object("@{1}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); | |
136 | test_object("master@{upstream}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); | |
137 | test_object("master@{u}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); | |
886f183a BS |
138 | } |
139 | ||
140 | void test_refs_revparse__revwalk(void) | |
141 | { | |
e28dd29b | 142 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "master^{/not found in any commit}")); |
143 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "master^{/merge}")); | |
144 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "master^{/((}")); | |
886f183a | 145 | |
e28dd29b | 146 | test_object("master^{/anoth}", "5b5b025afb0b4c913b4c338a42934a3863bf3644"); |
147 | test_object("master^{/Merge}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); | |
148 | test_object("br2^{/Merge}", "a4a7dce85cf63874e984719f4fdd239f5145052f"); | |
149 | test_object("master^{/fo.rth}", "9fd738e8f7967c078dceed8190330fc8648ee56a"); | |
886f183a BS |
150 | } |
151 | ||
152 | void test_refs_revparse__date(void) | |
153 | { | |
e28dd29b | 154 | test_object("HEAD@{10 years ago}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); |
155 | test_object("HEAD@{1 second}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); | |
156 | test_object("master@{2012-4-30 10:23:20 -0800}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); | |
157 | test_object("master@{2012-4-30 18:24 -0800}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); | |
158 | test_object("master@{2012-4-30 23:24 -0300}", "a65fedf39aefe402d3bb6e24df4d4f5fe4547750"); | |
a346992f | 159 | |
e28dd29b | 160 | /* Core git gives a65fedf, because they don't take time zones into account. */ |
161 | test_object("master@{1335806640}", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644"); | |
023c6f69 | 162 | } |
244d2f6b BS |
163 | |
164 | void test_refs_revparse__colon(void) | |
165 | { | |
e28dd29b | 166 | cl_git_fail(git_revparse_single(&g_obj, g_repo, ":/")); |
167 | cl_git_fail(git_revparse_single(&g_obj, g_repo, ":/not found in any commit")); | |
168 | cl_git_fail(git_revparse_single(&g_obj, g_repo, ":2:README")); | |
169 | cl_git_fail(git_revparse_single(&g_obj, g_repo, "master:")); | |
170 | ||
171 | test_object("subtrees:ab/4.txt", "d6c93164c249c8000205dd4ec5cbca1b516d487f"); | |
172 | test_object("subtrees:ab/de/fgh/1.txt", "1f67fc4386b2d171e0d21be1c447e12660561f9b"); | |
173 | test_object("master:README", "a8233120f6ad708f843d861ce2b7228ec4e3dec6"); | |
174 | test_object("master:new.txt", "a71586c1dfe8a71c6cbf6c129f404c5642ff31bd"); | |
175 | test_object(":/Merge", "a4a7dce85cf63874e984719f4fdd239f5145052f"); | |
176 | test_object(":/one", "c47800c7266a2be04c571c04d5a6614691ea99bd"); | |
177 | test_object(":/packed commit t", "41bc8c69075bbdb46c5c6f0566cc8cc5b46e8bd9"); | |
244d2f6b | 178 | } |