Skip to content

merge-ort: add more handling of basic conflict types

Elijah Newren via GitGitGadget git 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest10 patches 7 repliesIn review
  2. v110 patches 8 repliesSuperseded

Changes in v2 from the cover letter

* Wait to remove comment about a die-not-implemented code block until the commit where we actually remove it (spotted by Stollee)

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/10merge-ort: handle D/F conflict where directory disappears due to mergemerge-ort.c+22 -10 replies
2/10merge-ort: handle directory/file conflicts that remainmerge-ort.c+84 -20 replies
3/10merge-ort: implement unique_path() helpermerge-ort.c+24 -10 replies
4/10merge-ort: handle book-keeping around two- and three-way content mergemerge-ort.c+41 -110 replies
5/10merge-ort: flesh out implementation of handle_content_merge()merge-ort.c+143 -65 replies
6/10merge-ort: copy and adapt merge_3way() from merge-recursive.cmerge-ort.c+53 -10 replies
7/10merge-ort: copy and adapt merge_submodule() from merge-recursive.cmerge-ort.c+125 -10 replies
8/10merge-ort: implement format_commit()merge-ort.c+13 -10 replies
9/10merge-ort: copy find_first_merges() implementation from merge-recursive.cmerge-ort.c+56 -10 replies
10/10merge-ort: add handling for different types of files at same pathmerge-ort.c+103 -40 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.

Read the v2 thread

Cover letter [PATCH v2 00/10] merge-ort: add more handling of basic conflict types

This series depends on en/merge-ort-2 (it does not depend on en/merge-ort-3 or en/merge-ort-recursive).

This series adds handling of additional basic conflict types (directory/file conflicts, three-way content merging, very basic submodule divergence reconciliation, and different filetypes). This series drops the number of test failures under GIT_TEST_MERGE_ALGORITHM=ort by 211 (from 1448 to 1237).

Further, if en/merge-tests, en/merge-ort-3, en/merge-ort-recursive, and this series are all merged down (in any order), then collectively they drop the number of test failure under GIT_TEST_MERGE_ALGORITHM=ort from 1448 down to 60.

Changes since v1:

* Wait to remove comment about a die-not-implemented code block until the commit where we actually remove it (spotted by Stollee)

Elijah Newren (10):
merge-ort: handle D/F conflict where directory disappears due to merge
merge-ort: handle directory/file conflicts that remain
merge-ort: implement unique_path() helper
merge-ort: handle book-keeping around two- and three-way content merge
merge-ort: flesh out implementation of handle_content_merge()
merge-ort: copy and adapt merge_3way() from merge-recursive.c
merge-ort: copy and adapt merge_submodule() from merge-recursive.c
merge-ort: implement format_commit()
merge-ort: copy find_first_merges() implementation from
merge-recursive.c
merge-ort: add handling for different types of files at same path

 merge-ort.c | 671 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 653 insertions(+), 18 deletions(-)

base-commit: c5a6f65527aa3b6f5d7cf25437a88d8727ab0646
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-815%2Fnewren%2Fort-conflict-handling-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-815/newren/ort-conflict-handling-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/815

Range-diff vs v1:

  1:  382a009c18e !  1:  1869e497482 merge-ort: handle D/F conflict where directory disappears due to merge
     @@ merge-ort.c: static void process_entry(struct merge_options *opt,
       		die("Not yet implemented.");
       	}

- /*
- * NOTE: Below there is a long switch-like if-elseif-elseif... block
- * which the code goes through even for the df_conflict cases
-- * above. Well, it will once we don't die-not-implemented above.
-+ * above.
- */
- if (ci->match_mask) {
- ci->merged.clean = 1;
2: 46953226ba8 ! 2: 54f9be41a8a merge-ort: handle directory/file conflicts that remain
@@ merge-ort.c: static void process_entry(struct merge_options *opt,
}

/*
+ * NOTE: Below there is a long switch-like if-elseif-elseif... block
+ * which the code goes through even for the df_conflict cases
+- * above. Well, it will once we don't die-not-implemented above.
++ * above.
+ */
+ if (ci->match_mask) {
+ ci->merged.clean = 1;

  3:  6ac555b3c0f =  3:  63fed5e49a7 merge-ort: implement unique_path() helper
  4:  4c641ec19d5 =  4:  d0fab13c78a merge-ort: handle book-keeping around two- and three-way content merge
  5:  0e7321e67f8 =  5:  69129a20edc merge-ort: flesh out implementation of handle_content_merge()
  6:  611141f24af =  6:  d1cc76ac620 merge-ort: copy and adapt merge_3way() from merge-recursive.c
  7:  4696f6c2d95 =  7:  2ddf6ece9d0 merge-ort: copy and adapt merge_submodule() from merge-recursive.c
  8:  a640cc0effc =  8:  b0bfada5d81 merge-ort: implement format_commit()
  9:  b898876b119 =  9:  334cc7c65a6 merge-ort: copy find_first_merges() implementation from merge-recursive.c
 10:  0a5778df253 = 10:  34eb647df40 merge-ort: add handling for different types of files at same path
Signature · 1 line
gitgitgadget