]> git.proxmox.com Git - libgit2.git/blame - tests/libgit2/refs/setter.c
Merge https://salsa.debian.org/debian/libgit2 into proxmox/bullseye
[libgit2.git] / tests / libgit2 / refs / setter.c
CommitLineData
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
8static const char *ref_name = "refs/heads/other";
9static const char *ref_master_name = "refs/heads/master";
10static const char *ref_test_name = "refs/heads/test";
11
12static git_repository *g_repo;
13
14void test_refs_setter__initialize(void)
15{
16 g_repo = cl_git_sandbox_init("testrepo");
17}
18
19void test_refs_setter__cleanup(void)
20{
21 cl_git_sandbox_cleanup();
22}
23
24void 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
48void 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
66void 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
81void 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}