]>
Commit | Line | Data |
---|---|---|
d00d5464 ET |
1 | #include "clar_libgit2.h" |
2 | ||
3 | #include "repository.h" | |
4 | #include "git2/reflog.h" | |
5 | #include "reflog.h" | |
6 | #include "git2/refs.h" | |
7 | ||
8 | static const char *ref_name = "refs/heads/other"; | |
9 | static const char *ref_master_name = "refs/heads/master"; | |
10 | static const char *ref_test_name = "refs/heads/test"; | |
11 | ||
12 | static git_repository *g_repo; | |
13 | ||
14 | void test_refs_setter__initialize(void) | |
15 | { | |
16 | g_repo = cl_git_sandbox_init("testrepo"); | |
17 | } | |
18 | ||
19 | void test_refs_setter__cleanup(void) | |
20 | { | |
21 | cl_git_sandbox_cleanup(); | |
22 | } | |
23 | ||
24 | void test_refs_setter__update_direct(void) | |
25 | { | |
26 | git_reference *ref, *test_ref, *new_ref; | |
27 | git_oid id; | |
1fed6b07 | 28 | |
d00d5464 | 29 | cl_git_pass(git_reference_lookup(&ref, g_repo, ref_master_name)); |
ac3d33df | 30 | cl_assert(git_reference_type(ref) == GIT_REFERENCE_DIRECT); |
d00d5464 ET |
31 | git_oid_cpy(&id, git_reference_target(ref)); |
32 | git_reference_free(ref); | |
33 | ||
34 | cl_git_pass(git_reference_lookup(&test_ref, g_repo, ref_test_name)); | |
ac3d33df | 35 | cl_assert(git_reference_type(test_ref) == GIT_REFERENCE_DIRECT); |
d00d5464 | 36 | |
659cf202 | 37 | cl_git_pass(git_reference_set_target(&new_ref, test_ref, &id, NULL)); |
d00d5464 ET |
38 | |
39 | git_reference_free(test_ref); | |
40 | git_reference_free(new_ref); | |
41 | ||
42 | cl_git_pass(git_reference_lookup(&test_ref, g_repo, ref_test_name)); | |
ac3d33df | 43 | cl_assert(git_reference_type(test_ref) == GIT_REFERENCE_DIRECT); |
0cee70eb | 44 | cl_assert_equal_oid(&id, git_reference_target(test_ref)); |
d00d5464 ET |
45 | git_reference_free(test_ref); |
46 | } | |
47 | ||
48 | void test_refs_setter__update_symbolic(void) | |
49 | { | |
50 | git_reference *head, *new_head; | |
1fed6b07 | 51 | |
d00d5464 | 52 | cl_git_pass(git_reference_lookup(&head, g_repo, "HEAD")); |
ac3d33df | 53 | cl_assert(git_reference_type(head) == GIT_REFERENCE_SYMBOLIC); |
d00d5464 ET |
54 | cl_assert(strcmp(git_reference_symbolic_target(head), ref_master_name) == 0); |
55 | ||
659cf202 | 56 | cl_git_pass(git_reference_symbolic_set_target(&new_head, head, ref_test_name, NULL)); |
d00d5464 ET |
57 | git_reference_free(new_head); |
58 | git_reference_free(head); | |
1fed6b07 | 59 | |
d00d5464 | 60 | cl_git_pass(git_reference_lookup(&head, g_repo, "HEAD")); |
ac3d33df | 61 | cl_assert(git_reference_type(head) == GIT_REFERENCE_SYMBOLIC); |
d00d5464 ET |
62 | cl_assert(strcmp(git_reference_symbolic_target(head), ref_test_name) == 0); |
63 | git_reference_free(head); | |
64 | } | |
65 | ||
66 | void test_refs_setter__cant_update_direct_with_symbolic(void) | |
67 | { | |
ac3d33df | 68 | /* Overwrite an existing object id reference with a symbolic one */ |
d00d5464 ET |
69 | git_reference *ref, *new; |
70 | git_oid id; | |
1fed6b07 | 71 | |
d00d5464 | 72 | cl_git_pass(git_reference_lookup(&ref, g_repo, ref_master_name)); |
ac3d33df | 73 | cl_assert(git_reference_type(ref) == GIT_REFERENCE_DIRECT); |
d00d5464 | 74 | git_oid_cpy(&id, git_reference_target(ref)); |
1fed6b07 | 75 | |
659cf202 | 76 | cl_git_fail(git_reference_symbolic_set_target(&new, ref, ref_name, NULL)); |
1fed6b07 | 77 | |
d00d5464 ET |
78 | git_reference_free(ref); |
79 | } | |
80 | ||
81 | void test_refs_setter__cant_update_symbolic_with_direct(void) | |
82 | { | |
ac3d33df | 83 | /* Overwrite an existing symbolic reference with an object id one */ |
d00d5464 ET |
84 | git_reference *ref, *new; |
85 | git_oid id; | |
1fed6b07 | 86 | |
d00d5464 | 87 | cl_git_pass(git_reference_lookup(&ref, g_repo, ref_master_name)); |
ac3d33df | 88 | cl_assert(git_reference_type(ref) == GIT_REFERENCE_DIRECT); |
d00d5464 ET |
89 | git_oid_cpy(&id, git_reference_target(ref)); |
90 | git_reference_free(ref); | |
91 | ||
92 | /* Create the symbolic ref */ | |
659cf202 | 93 | cl_git_pass(git_reference_symbolic_create(&ref, g_repo, ref_name, ref_master_name, 0, NULL)); |
d00d5464 ET |
94 | |
95 | /* Can't set an OID on a direct ref */ | |
659cf202 | 96 | cl_git_fail(git_reference_set_target(&new, ref, &id, NULL)); |
1fed6b07 | 97 | |
d00d5464 ET |
98 | git_reference_free(ref); |
99 | } |