@@ -40,21 +40,33 @@ void test_merge_workdir_analysis__cleanup(void)
4040static void analysis_from_branch (
4141 git_merge_analysis_t * merge_analysis ,
4242 git_merge_preference_t * merge_pref ,
43- const char * branchname )
43+ const char * our_branchname ,
44+ const char * their_branchname )
4445{
45- git_buf refname = GIT_BUF_INIT ;
46+ git_buf our_refname = GIT_BUF_INIT ;
47+ git_buf their_refname = GIT_BUF_INIT ;
48+ git_reference * our_ref ;
4649 git_reference * their_ref ;
4750 git_annotated_commit * their_head ;
4851
49- git_buf_printf (& refname , "%s%s" , GIT_REFS_HEADS_DIR , branchname );
52+ if (our_branchname != NULL ) {
53+ cl_git_pass (git_buf_printf (& our_refname , "%s%s" , GIT_REFS_HEADS_DIR , our_branchname ));
54+ cl_git_pass (git_reference_lookup (& our_ref , repo , git_buf_cstr (& our_refname )));
55+ } else {
56+ cl_git_pass (git_reference_lookup (& our_ref , repo , GIT_HEAD_FILE ));
57+ }
5058
51- cl_git_pass (git_reference_lookup (& their_ref , repo , git_buf_cstr (& refname )));
59+ cl_git_pass (git_buf_printf (& their_refname , "%s%s" , GIT_REFS_HEADS_DIR , their_branchname ));
60+
61+ cl_git_pass (git_reference_lookup (& their_ref , repo , git_buf_cstr (& their_refname )));
5262 cl_git_pass (git_annotated_commit_from_ref (& their_head , repo , their_ref ));
5363
54- cl_git_pass (git_merge_analysis (merge_analysis , merge_pref , repo , (const git_annotated_commit * * )& their_head , 1 ));
64+ cl_git_pass (git_merge_analysis_for_ref (merge_analysis , merge_pref , repo , our_ref , (const git_annotated_commit * * )& their_head , 1 ));
5565
56- git_buf_dispose (& refname );
66+ git_buf_dispose (& our_refname );
67+ git_buf_dispose (& their_refname );
5768 git_annotated_commit_free (their_head );
69+ git_reference_free (our_ref );
5870 git_reference_free (their_ref );
5971}
6072
@@ -63,17 +75,16 @@ void test_merge_workdir_analysis__fastforward(void)
6375 git_merge_analysis_t merge_analysis ;
6476 git_merge_preference_t merge_pref ;
6577
66- analysis_from_branch (& merge_analysis , & merge_pref , FASTFORWARD_BRANCH );
67- cl_assert_equal_i (GIT_MERGE_ANALYSIS_FASTFORWARD , (merge_analysis & GIT_MERGE_ANALYSIS_FASTFORWARD ));
68- cl_assert_equal_i (GIT_MERGE_ANALYSIS_NORMAL , (merge_analysis & GIT_MERGE_ANALYSIS_NORMAL ));
78+ analysis_from_branch (& merge_analysis , & merge_pref , NULL , FASTFORWARD_BRANCH );
79+ cl_assert_equal_i (GIT_MERGE_ANALYSIS_NORMAL |GIT_MERGE_ANALYSIS_FASTFORWARD , merge_analysis );
6980}
7081
7182void test_merge_workdir_analysis__no_fastforward (void )
7283{
7384 git_merge_analysis_t merge_analysis ;
7485 git_merge_preference_t merge_pref ;
7586
76- analysis_from_branch (& merge_analysis , & merge_pref , NOFASTFORWARD_BRANCH );
87+ analysis_from_branch (& merge_analysis , & merge_pref , NULL , NOFASTFORWARD_BRANCH );
7788 cl_assert_equal_i (GIT_MERGE_ANALYSIS_NORMAL , merge_analysis );
7889}
7990
@@ -82,7 +93,7 @@ void test_merge_workdir_analysis__uptodate(void)
8293 git_merge_analysis_t merge_analysis ;
8394 git_merge_preference_t merge_pref ;
8495
85- analysis_from_branch (& merge_analysis , & merge_pref , UPTODATE_BRANCH );
96+ analysis_from_branch (& merge_analysis , & merge_pref , NULL , UPTODATE_BRANCH );
8697 cl_assert_equal_i (GIT_MERGE_ANALYSIS_UP_TO_DATE , merge_analysis );
8798}
8899
@@ -91,7 +102,7 @@ void test_merge_workdir_analysis__uptodate_merging_prev_commit(void)
91102 git_merge_analysis_t merge_analysis ;
92103 git_merge_preference_t merge_pref ;
93104
94- analysis_from_branch (& merge_analysis , & merge_pref , PREVIOUS_BRANCH );
105+ analysis_from_branch (& merge_analysis , & merge_pref , NULL , PREVIOUS_BRANCH );
95106 cl_assert_equal_i (GIT_MERGE_ANALYSIS_UP_TO_DATE , merge_analysis );
96107}
97108
@@ -104,9 +115,8 @@ void test_merge_workdir_analysis__unborn(void)
104115 git_buf_joinpath (& master , git_repository_path (repo ), "refs/heads/master" );
105116 p_unlink (git_buf_cstr (& master ));
106117
107- analysis_from_branch (& merge_analysis , & merge_pref , NOFASTFORWARD_BRANCH );
108- cl_assert_equal_i (GIT_MERGE_ANALYSIS_FASTFORWARD , (merge_analysis & GIT_MERGE_ANALYSIS_FASTFORWARD ));
109- cl_assert_equal_i (GIT_MERGE_ANALYSIS_UNBORN , (merge_analysis & GIT_MERGE_ANALYSIS_UNBORN ));
118+ analysis_from_branch (& merge_analysis , & merge_pref , NULL , NOFASTFORWARD_BRANCH );
119+ cl_assert_equal_i (GIT_MERGE_ANALYSIS_FASTFORWARD |GIT_MERGE_ANALYSIS_UNBORN , merge_analysis );
110120
111121 git_buf_dispose (& master );
112122}
@@ -120,9 +130,9 @@ void test_merge_workdir_analysis__fastforward_with_config_noff(void)
120130 git_repository_config (& config , repo );
121131 git_config_set_string (config , "merge.ff" , "false" );
122132
123- analysis_from_branch (& merge_analysis , & merge_pref , FASTFORWARD_BRANCH );
124- cl_assert_equal_i (GIT_MERGE_ANALYSIS_FASTFORWARD , ( merge_analysis & GIT_MERGE_ANALYSIS_FASTFORWARD ) );
125- cl_assert_equal_i ( GIT_MERGE_ANALYSIS_NORMAL , ( merge_analysis & GIT_MERGE_ANALYSIS_NORMAL ));
133+ analysis_from_branch (& merge_analysis , & merge_pref , NULL , FASTFORWARD_BRANCH );
134+ cl_assert_equal_i (GIT_MERGE_ANALYSIS_NORMAL | GIT_MERGE_ANALYSIS_FASTFORWARD , merge_analysis );
135+
126136 cl_assert_equal_i (GIT_MERGE_PREFERENCE_NO_FASTFORWARD , (merge_pref & GIT_MERGE_PREFERENCE_NO_FASTFORWARD ));
127137}
128138
@@ -135,7 +145,26 @@ void test_merge_workdir_analysis__no_fastforward_with_config_ffonly(void)
135145 git_repository_config (& config , repo );
136146 git_config_set_string (config , "merge.ff" , "only" );
137147
138- analysis_from_branch (& merge_analysis , & merge_pref , NOFASTFORWARD_BRANCH );
139- cl_assert_equal_i (GIT_MERGE_ANALYSIS_NORMAL , (merge_analysis & GIT_MERGE_ANALYSIS_NORMAL ));
148+ analysis_from_branch (& merge_analysis , & merge_pref , NULL , NOFASTFORWARD_BRANCH );
149+ cl_assert_equal_i (GIT_MERGE_ANALYSIS_NORMAL , merge_analysis );
150+
140151 cl_assert_equal_i (GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY , (merge_pref & GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY ));
141152}
153+
154+ void test_merge_workdir_analysis__between_uptodate_refs (void )
155+ {
156+ git_merge_analysis_t merge_analysis ;
157+ git_merge_preference_t merge_pref ;
158+
159+ analysis_from_branch (& merge_analysis , & merge_pref , NOFASTFORWARD_BRANCH , PREVIOUS_BRANCH );
160+ cl_assert_equal_i (GIT_MERGE_ANALYSIS_UP_TO_DATE , merge_analysis );
161+ }
162+
163+ void test_merge_workdir_analysis__between_noff_refs (void )
164+ {
165+ git_merge_analysis_t merge_analysis ;
166+ git_merge_preference_t merge_pref ;
167+
168+ analysis_from_branch (& merge_analysis , & merge_pref , "branch" , FASTFORWARD_BRANCH );
169+ cl_assert_equal_i (GIT_MERGE_ANALYSIS_NORMAL , merge_analysis );
170+ }
0 commit comments