@@ -12,19 +12,20 @@ static git_repository *g_repo;
1212
1313void test_refs_create__initialize (void )
1414{
15- g_repo = cl_git_sandbox_init ("testrepo" );
15+ g_repo = cl_git_sandbox_init ("testrepo" );
1616}
1717
1818void test_refs_create__cleanup (void )
1919{
20- cl_git_sandbox_cleanup ();
20+ cl_git_sandbox_cleanup ();
2121
2222 cl_git_pass (git_libgit2_opts (GIT_OPT_ENABLE_STRICT_OBJECT_CREATION , 1 ));
23+ cl_git_pass (git_libgit2_opts (GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION , 1 ));
2324}
2425
2526void test_refs_create__symbolic (void )
2627{
27- // create a new symbolic reference
28+ /* create a new symbolic reference */
2829 git_reference * new_reference , * looked_up_ref , * resolved_ref ;
2930 git_repository * repo2 ;
3031 git_oid id ;
@@ -65,9 +66,57 @@ void test_refs_create__symbolic(void)
6566 git_reference_free (resolved_ref );
6667}
6768
69+ void test_refs_create__symbolic_with_arbitrary_content (void )
70+ {
71+ git_reference * new_reference , * looked_up_ref ;
72+ git_repository * repo2 ;
73+ git_oid id ;
74+
75+ const char * new_head_tracker = "ANOTHER_HEAD_TRACKER" ;
76+ const char * arbitrary_target = "ARBITRARY DATA" ;
77+
78+ git_oid_fromstr (& id , current_master_tip );
79+
80+ /* Attempt to create symbolic ref with arbitrary data in target
81+ * fails by default
82+ */
83+ cl_git_fail (git_reference_symbolic_create (& new_reference , g_repo , new_head_tracker , arbitrary_target , 0 , NULL ));
84+
85+ git_libgit2_opts (GIT_OPT_ENABLE_STRICT_SYMBOLIC_REF_CREATION , 0 );
86+
87+ /* With strict target validation disabled, ref creation succeeds */
88+ cl_git_pass (git_reference_symbolic_create (& new_reference , g_repo , new_head_tracker , arbitrary_target , 0 , NULL ));
89+
90+ /* Ensure the reference can be looked-up... */
91+ cl_git_pass (git_reference_lookup (& looked_up_ref , g_repo , new_head_tracker ));
92+ cl_assert (git_reference_type (looked_up_ref ) & GIT_REF_SYMBOLIC );
93+ cl_assert (reference_is_packed (looked_up_ref ) == 0 );
94+ cl_assert_equal_s (looked_up_ref -> name , new_head_tracker );
95+
96+ /* Ensure the target is what we expect it to be */
97+ cl_assert_equal_s (git_reference_symbolic_target (new_reference ), arbitrary_target );
98+
99+ /* Similar test with a fresh new repository object */
100+ cl_git_pass (git_repository_open (& repo2 , "testrepo" ));
101+
102+ /* Ensure the reference can be looked-up... */
103+ cl_git_pass (git_reference_lookup (& looked_up_ref , repo2 , new_head_tracker ));
104+ cl_assert (git_reference_type (looked_up_ref ) & GIT_REF_SYMBOLIC );
105+ cl_assert (reference_is_packed (looked_up_ref ) == 0 );
106+ cl_assert_equal_s (looked_up_ref -> name , new_head_tracker );
107+
108+ /* Ensure the target is what we expect it to be */
109+ cl_assert_equal_s (git_reference_symbolic_target (new_reference ), arbitrary_target );
110+
111+ git_repository_free (repo2 );
112+ git_reference_free (new_reference );
113+ git_reference_free (looked_up_ref );
114+
115+ }
116+
68117void test_refs_create__deep_symbolic (void )
69118{
70- // create a deep symbolic reference
119+ /* create a deep symbolic reference */
71120 git_reference * new_reference , * looked_up_ref , * resolved_ref ;
72121 git_oid id ;
73122
@@ -87,7 +136,7 @@ void test_refs_create__deep_symbolic(void)
87136
88137void test_refs_create__oid (void )
89138{
90- // create a new OID reference
139+ /* create a new OID reference */
91140 git_reference * new_reference , * looked_up_ref ;
92141 git_repository * repo2 ;
93142 git_oid id ;
0 commit comments