]>
git.proxmox.com Git - libgit2.git/blob - tests/refs/setter.c
b34c71eb529433d4b4f1d3e85397c44c58d7ad47
1 #include "clar_libgit2.h"
3 #include "repository.h"
4 #include "git2/reflog.h"
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";
12 static git_repository
*g_repo
;
14 void test_refs_setter__initialize(void)
16 g_repo
= cl_git_sandbox_init("testrepo");
19 void test_refs_setter__cleanup(void)
21 cl_git_sandbox_cleanup();
24 void test_refs_setter__update_direct(void)
26 git_reference
*ref
, *test_ref
, *new_ref
;
29 cl_git_pass(git_reference_lookup(&ref
, g_repo
, ref_master_name
));
30 cl_assert(git_reference_type(ref
) == GIT_REFERENCE_DIRECT
);
31 git_oid_cpy(&id
, git_reference_target(ref
));
32 git_reference_free(ref
);
34 cl_git_pass(git_reference_lookup(&test_ref
, g_repo
, ref_test_name
));
35 cl_assert(git_reference_type(test_ref
) == GIT_REFERENCE_DIRECT
);
37 cl_git_pass(git_reference_set_target(&new_ref
, test_ref
, &id
, NULL
));
39 git_reference_free(test_ref
);
40 git_reference_free(new_ref
);
42 cl_git_pass(git_reference_lookup(&test_ref
, g_repo
, ref_test_name
));
43 cl_assert(git_reference_type(test_ref
) == GIT_REFERENCE_DIRECT
);
44 cl_assert_equal_oid(&id
, git_reference_target(test_ref
));
45 git_reference_free(test_ref
);
48 void test_refs_setter__update_symbolic(void)
50 git_reference
*head
, *new_head
;
52 cl_git_pass(git_reference_lookup(&head
, g_repo
, "HEAD"));
53 cl_assert(git_reference_type(head
) == GIT_REFERENCE_SYMBOLIC
);
54 cl_assert(strcmp(git_reference_symbolic_target(head
), ref_master_name
) == 0);
56 cl_git_pass(git_reference_symbolic_set_target(&new_head
, head
, ref_test_name
, NULL
));
57 git_reference_free(new_head
);
58 git_reference_free(head
);
60 cl_git_pass(git_reference_lookup(&head
, g_repo
, "HEAD"));
61 cl_assert(git_reference_type(head
) == GIT_REFERENCE_SYMBOLIC
);
62 cl_assert(strcmp(git_reference_symbolic_target(head
), ref_test_name
) == 0);
63 git_reference_free(head
);
66 void test_refs_setter__cant_update_direct_with_symbolic(void)
68 /* Overwrite an existing object id reference with a symbolic one */
69 git_reference
*ref
, *new;
72 cl_git_pass(git_reference_lookup(&ref
, g_repo
, ref_master_name
));
73 cl_assert(git_reference_type(ref
) == GIT_REFERENCE_DIRECT
);
74 git_oid_cpy(&id
, git_reference_target(ref
));
76 cl_git_fail(git_reference_symbolic_set_target(&new, ref
, ref_name
, NULL
));
78 git_reference_free(ref
);
81 void test_refs_setter__cant_update_symbolic_with_direct(void)
83 /* Overwrite an existing symbolic reference with an object id one */
84 git_reference
*ref
, *new;
87 cl_git_pass(git_reference_lookup(&ref
, g_repo
, ref_master_name
));
88 cl_assert(git_reference_type(ref
) == GIT_REFERENCE_DIRECT
);
89 git_oid_cpy(&id
, git_reference_target(ref
));
90 git_reference_free(ref
);
92 /* Create the symbolic ref */
93 cl_git_pass(git_reference_symbolic_create(&ref
, g_repo
, ref_name
, ref_master_name
, 0, NULL
));
95 /* Can't set an OID on a direct ref */
96 cl_git_fail(git_reference_set_target(&new, ref
, &id
, NULL
));
98 git_reference_free(ref
);