@@ -35,6 +35,19 @@ static void fetchhead_test_clone(void)
3535 cl_git_pass (git_clone (& g_repo , LIVE_REPO_URL , "./foo" , & g_options ));
3636}
3737
38+ static int count_references (void )
39+ {
40+ git_strarray array ;
41+ int refs ;
42+
43+ cl_git_pass (git_reference_list (& array , g_repo ));
44+ refs = array .count ;
45+
46+ git_strarray_free (& array );
47+
48+ return refs ;
49+ }
50+
3851static void fetchhead_test_fetch (const char * fetchspec , const char * expected_fetchhead )
3952{
4053 git_remote * remote ;
@@ -101,3 +114,41 @@ void test_online_fetchhead__no_merges(void)
101114 cl_git_pass (git_tag_delete (g_repo , "commit_tree" ));
102115 fetchhead_test_fetch (NULL , FETCH_HEAD_NO_MERGE_DATA3 );
103116}
117+
118+ void test_online_fetchhead__explicit_dst_refspec_creates_branch (void )
119+ {
120+ git_reference * ref ;
121+ int refs ;
122+
123+ fetchhead_test_clone ();
124+ refs = count_references ();
125+ fetchhead_test_fetch ("refs/heads/first-merge:refs/heads/explicit-refspec" , FETCH_HEAD_EXPLICIT_DATA );
126+
127+ cl_git_pass (git_branch_lookup (& ref , g_repo , "explicit-refspec" , GIT_BRANCH_ALL ));
128+ cl_assert_equal_i (refs + 1 , count_references ());
129+ }
130+
131+ void test_online_fetchhead__empty_dst_refspec_creates_no_branch (void )
132+ {
133+ git_reference * ref ;
134+ int refs ;
135+
136+ fetchhead_test_clone ();
137+ refs = count_references ();
138+
139+ fetchhead_test_fetch ("refs/heads/first-merge" , FETCH_HEAD_EXPLICIT_DATA );
140+ cl_git_fail (git_branch_lookup (& ref , g_repo , "first-merge" , GIT_BRANCH_ALL ));
141+
142+ cl_assert_equal_i (refs , count_references ());
143+ }
144+
145+ void test_online_fetchhead__colon_only_dst_refspec_creates_no_branch (void )
146+ {
147+ int refs ;
148+
149+ fetchhead_test_clone ();
150+ refs = count_references ();
151+ fetchhead_test_fetch ("refs/heads/first-merge:" , FETCH_HEAD_EXPLICIT_DATA );
152+
153+ cl_assert_equal_i (refs , count_references ());
154+ }
0 commit comments