diff options
author | Etienne Samson <samson.etienne@gmail.com> | 2018-08-25 01:47:39 +0000 |
---|---|---|
committer | Etienne Samson <samson.etienne@gmail.com> | 2018-10-19 20:39:17 +0200 |
commit | 6e9fb040d9ea521f855257736369f42463cc45e8 (patch) | |
tree | 1e794e315f0242ae8560e0093cbf6ab677baf80f /tests/merge | |
parent | 5c0c8fdd39112eb28402313105b3cc047b2400c0 (diff) | |
download | libgit2-6e9fb040d9ea521f855257736369f42463cc45e8.tar.gz |
merge: make analysis possible against a non-HEAD reference
This moves the current merge analysis code into a more generic version
that can work against any reference.
Also change the tests to check returned analysis values exactly.
Diffstat (limited to 'tests/merge')
-rw-r--r-- | tests/merge/workdir/analysis.c | 69 |
1 files changed, 49 insertions, 20 deletions
diff --git a/tests/merge/workdir/analysis.c b/tests/merge/workdir/analysis.c index f87fc58b0..27d7dba84 100644 --- a/tests/merge/workdir/analysis.c +++ b/tests/merge/workdir/analysis.c @@ -40,21 +40,33 @@ void test_merge_workdir_analysis__cleanup(void) static void analysis_from_branch( git_merge_analysis_t *merge_analysis, git_merge_preference_t *merge_pref, - const char *branchname) + const char *our_branchname, + const char *their_branchname) { - git_buf refname = GIT_BUF_INIT; + git_buf our_refname = GIT_BUF_INIT; + git_buf their_refname = GIT_BUF_INIT; + git_reference *our_ref; git_reference *their_ref; git_annotated_commit *their_head; - git_buf_printf(&refname, "%s%s", GIT_REFS_HEADS_DIR, branchname); + if (our_branchname != NULL) { + cl_git_pass(git_buf_printf(&our_refname, "%s%s", GIT_REFS_HEADS_DIR, our_branchname)); + cl_git_pass(git_reference_lookup(&our_ref, repo, git_buf_cstr(&our_refname))); + } else { + cl_git_pass(git_reference_lookup(&our_ref, repo, GIT_HEAD_FILE)); + } - cl_git_pass(git_reference_lookup(&their_ref, repo, git_buf_cstr(&refname))); + cl_git_pass(git_buf_printf(&their_refname, "%s%s", GIT_REFS_HEADS_DIR, their_branchname)); + + cl_git_pass(git_reference_lookup(&their_ref, repo, git_buf_cstr(&their_refname))); cl_git_pass(git_annotated_commit_from_ref(&their_head, repo, their_ref)); - cl_git_pass(git_merge_analysis(merge_analysis, merge_pref, repo, (const git_annotated_commit **)&their_head, 1)); + cl_git_pass(git_merge_analysis_for_ref(merge_analysis, merge_pref, repo, our_ref, (const git_annotated_commit **)&their_head, 1)); - git_buf_dispose(&refname); + git_buf_dispose(&our_refname); + git_buf_dispose(&their_refname); git_annotated_commit_free(their_head); + git_reference_free(our_ref); git_reference_free(their_ref); } @@ -63,9 +75,8 @@ void test_merge_workdir_analysis__fastforward(void) git_merge_analysis_t merge_analysis; git_merge_preference_t merge_pref; - analysis_from_branch(&merge_analysis, &merge_pref, FASTFORWARD_BRANCH); - cl_assert_equal_i(GIT_MERGE_ANALYSIS_FASTFORWARD, (merge_analysis & GIT_MERGE_ANALYSIS_FASTFORWARD)); - cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL, (merge_analysis & GIT_MERGE_ANALYSIS_NORMAL)); + analysis_from_branch(&merge_analysis, &merge_pref, NULL, FASTFORWARD_BRANCH); + cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL|GIT_MERGE_ANALYSIS_FASTFORWARD, merge_analysis); } void test_merge_workdir_analysis__no_fastforward(void) @@ -73,7 +84,7 @@ void test_merge_workdir_analysis__no_fastforward(void) git_merge_analysis_t merge_analysis; git_merge_preference_t merge_pref; - analysis_from_branch(&merge_analysis, &merge_pref, NOFASTFORWARD_BRANCH); + analysis_from_branch(&merge_analysis, &merge_pref, NULL, NOFASTFORWARD_BRANCH); cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL, merge_analysis); } @@ -82,7 +93,7 @@ void test_merge_workdir_analysis__uptodate(void) git_merge_analysis_t merge_analysis; git_merge_preference_t merge_pref; - analysis_from_branch(&merge_analysis, &merge_pref, UPTODATE_BRANCH); + analysis_from_branch(&merge_analysis, &merge_pref, NULL, UPTODATE_BRANCH); cl_assert_equal_i(GIT_MERGE_ANALYSIS_UP_TO_DATE, merge_analysis); } @@ -91,7 +102,7 @@ void test_merge_workdir_analysis__uptodate_merging_prev_commit(void) git_merge_analysis_t merge_analysis; git_merge_preference_t merge_pref; - analysis_from_branch(&merge_analysis, &merge_pref, PREVIOUS_BRANCH); + analysis_from_branch(&merge_analysis, &merge_pref, NULL, PREVIOUS_BRANCH); cl_assert_equal_i(GIT_MERGE_ANALYSIS_UP_TO_DATE, merge_analysis); } @@ -104,9 +115,8 @@ void test_merge_workdir_analysis__unborn(void) git_buf_joinpath(&master, git_repository_path(repo), "refs/heads/master"); p_unlink(git_buf_cstr(&master)); - analysis_from_branch(&merge_analysis, &merge_pref, NOFASTFORWARD_BRANCH); - cl_assert_equal_i(GIT_MERGE_ANALYSIS_FASTFORWARD, (merge_analysis & GIT_MERGE_ANALYSIS_FASTFORWARD)); - cl_assert_equal_i(GIT_MERGE_ANALYSIS_UNBORN, (merge_analysis & GIT_MERGE_ANALYSIS_UNBORN)); + analysis_from_branch(&merge_analysis, &merge_pref, NULL, NOFASTFORWARD_BRANCH); + cl_assert_equal_i(GIT_MERGE_ANALYSIS_FASTFORWARD|GIT_MERGE_ANALYSIS_UNBORN, merge_analysis); git_buf_dispose(&master); } @@ -120,9 +130,9 @@ void test_merge_workdir_analysis__fastforward_with_config_noff(void) git_repository_config(&config, repo); git_config_set_string(config, "merge.ff", "false"); - analysis_from_branch(&merge_analysis, &merge_pref, FASTFORWARD_BRANCH); - cl_assert_equal_i(GIT_MERGE_ANALYSIS_FASTFORWARD, (merge_analysis & GIT_MERGE_ANALYSIS_FASTFORWARD)); - cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL, (merge_analysis & GIT_MERGE_ANALYSIS_NORMAL)); + analysis_from_branch(&merge_analysis, &merge_pref, NULL, FASTFORWARD_BRANCH); + cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL|GIT_MERGE_ANALYSIS_FASTFORWARD, merge_analysis); + cl_assert_equal_i(GIT_MERGE_PREFERENCE_NO_FASTFORWARD, (merge_pref & GIT_MERGE_PREFERENCE_NO_FASTFORWARD)); } @@ -135,7 +145,26 @@ void test_merge_workdir_analysis__no_fastforward_with_config_ffonly(void) git_repository_config(&config, repo); git_config_set_string(config, "merge.ff", "only"); - analysis_from_branch(&merge_analysis, &merge_pref, NOFASTFORWARD_BRANCH); - cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL, (merge_analysis & GIT_MERGE_ANALYSIS_NORMAL)); + analysis_from_branch(&merge_analysis, &merge_pref, NULL, NOFASTFORWARD_BRANCH); + cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL, merge_analysis); + cl_assert_equal_i(GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY, (merge_pref & GIT_MERGE_PREFERENCE_FASTFORWARD_ONLY)); } + +void test_merge_workdir_analysis__between_uptodate_refs(void) +{ + git_merge_analysis_t merge_analysis; + git_merge_preference_t merge_pref; + + analysis_from_branch(&merge_analysis, &merge_pref, NOFASTFORWARD_BRANCH, PREVIOUS_BRANCH); + cl_assert_equal_i(GIT_MERGE_ANALYSIS_UP_TO_DATE, merge_analysis); +} + +void test_merge_workdir_analysis__between_noff_refs(void) +{ + git_merge_analysis_t merge_analysis; + git_merge_preference_t merge_pref; + + analysis_from_branch(&merge_analysis, &merge_pref, "branch", FASTFORWARD_BRANCH); + cl_assert_equal_i(GIT_MERGE_ANALYSIS_NORMAL, merge_analysis); +} |