Message ID | 20201227205835.502556-2-seth@eseth.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | mergetool: add automerge configuration | expand |
Seth House <seth@eseth.com> writes: > ... > See Seth House's blog post [1] for the idea, and the rationale. > > [1] https://www.eseth.org/2020/mergetools.html > > Original-idea-by: Seth House <seth@eseth.com> > Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> > --- Missing Sign-off as a relayer. > diff --git a/t/t7610-mergetool.sh b/t/t7610-mergetool.sh > index 70afdd06fa..b75c91199b 100755 > --- a/t/t7610-mergetool.sh > +++ b/t/t7610-mergetool.sh > @@ -828,4 +828,22 @@ test_expect_success 'mergetool -Oorder-file is honored' ' > test_cmp expect actual > ' > > +test_expect_success 'mergetool automerge' ' > + test_config mergetool.automerge true && > + test_when_finished "git reset --hard" && > + git checkout -b test${test_count}_b master && > + echo -e "base\n\na" >file1 && These do not seem to be taken from the version that has been improved by reviwer comments after v3. > + git commit -a -m "base" && > + echo -e "base\n\nc" >file1 && > + git commit -a -m "remote update" && > + git checkout -b test${test_count}_a HEAD~ && > + echo -e "local\n\nb" >file1 && > + git commit -a -m "local update" && > + test_must_fail git merge test${test_count}_b && > + yes "" | git mergetool file1 && > + echo -e "local\n\nc" >expect && > + test_cmp expect file1 && > + git commit -m "test resolved with mergetool" > +' > + > test_done
On Sun, Dec 27, 2020 at 02:06:58PM -0800, Junio C Hamano wrote: > Missing Sign-off as a relayer. I haven't come across that in the docs on contributing to Git and my Google searches aren't helping. Do you mind pointing me to what to add? > These do not seem to be taken from the version that has been > improved by reviwer comments after v3. Whoops! Thanks for the catch. Seems I fished the wrong version out of my email. Created a new v7 based off the correct v5.
Seth House <seth@eseth.com> writes: > On Sun, Dec 27, 2020 at 02:06:58PM -0800, Junio C Hamano wrote: >> Missing Sign-off as a relayer. > > I haven't come across that in the docs on contributing to Git and my > Google searches aren't helping. Do you mind pointing me to what to add? Documentation/SubmittingPatches#sign-off === Certify your work by adding your `Signed-off-by` trailer To improve tracking of who did what, we ask you to certify that you wrote the patch or have the right to pass it on under the same license as ours, by "signing off" your patch. Without sign-off, we cannot accept your patches. If you can certify the below D-C-O: [[dco]] .Developer's Certificate of Origin 1.1 ____ By making a contribution to this project, I certify that: a. The contribution was created in whole or in part by me and I have the right to submit it under the open source license indicated in the file; or b. The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the same open source license (unless I am permitted to submit under a different license), as indicated in the file; or c. The contribution was provided directly to me by some other person who certified (a), (b) or (c) and I have not modified it. d. I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with this project or the open source license(s) involved. ____ you add a "Signed-off-by" trailer to your commit, that looks like this: .... Signed-off-by: Random J Developer <random@developer.example.org> .... So, you'd add your own signed-off-by trailer at the end of the trailer list. https://lore.kernel.org/git/pull.805.git.1607091741254.gitgitgadget@gmail.com/ for an example where Johannes Schindelin picked up a patch written by Dennis Ameling and relayed it to the list. Thanks.
diff --git a/Documentation/config/mergetool.txt b/Documentation/config/mergetool.txt index 16a27443a3..43af7a96f9 100644 --- a/Documentation/config/mergetool.txt +++ b/Documentation/config/mergetool.txt @@ -61,3 +61,6 @@ mergetool.writeToTemp:: mergetool.prompt:: Prompt before each invocation of the merge resolution program. + +mergetool.autoMerge:: + Automatically resolve conflicts that don't require user intervention. diff --git a/git-mergetool.sh b/git-mergetool.sh index e3f6d543fb..6e86d3b492 100755 --- a/git-mergetool.sh +++ b/git-mergetool.sh @@ -274,6 +274,7 @@ merge_file () { BASE=${BASE##*/} fi + DIFF3="$MERGETOOL_TMPDIR/${BASE}_DIFF3_$$$ext" BACKUP="$MERGETOOL_TMPDIR/${BASE}_BACKUP_$$$ext" LOCAL="$MERGETOOL_TMPDIR/${BASE}_LOCAL_$$$ext" REMOTE="$MERGETOOL_TMPDIR/${BASE}_REMOTE_$$$ext" @@ -322,6 +323,15 @@ merge_file () { checkout_staged_file 2 "$MERGED" "$LOCAL" checkout_staged_file 3 "$MERGED" "$REMOTE" + if test "$(git config --bool mergetool.autoMerge)" = "true" + then + git merge-file --diff3 -q -p "$LOCAL" "$BASE" "$REMOTE" >"$DIFF3" + sed -e '/^<<<<<<< /,/^||||||| /d' -e '/^=======\r\?$/,/^>>>>>>> /d' "$DIFF3" >"$BASE" + sed -e '/^||||||| /,/^>>>>>>> /d' -e '/^<<<<<<< /d' "$DIFF3" >"$LOCAL" + sed -e '/^<<<<<<< /,/^=======\r\?$/d' -e '/^>>>>>>> /d' "$DIFF3" >"$REMOTE" + rm -- "$DIFF3" + fi + if test -z "$local_mode" || test -z "$remote_mode" then echo "Deleted merge conflict for '$MERGED':" diff --git a/t/t7610-mergetool.sh b/t/t7610-mergetool.sh index 70afdd06fa..b75c91199b 100755 --- a/t/t7610-mergetool.sh +++ b/t/t7610-mergetool.sh @@ -828,4 +828,22 @@ test_expect_success 'mergetool -Oorder-file is honored' ' test_cmp expect actual ' +test_expect_success 'mergetool automerge' ' + test_config mergetool.automerge true && + test_when_finished "git reset --hard" && + git checkout -b test${test_count}_b master && + echo -e "base\n\na" >file1 && + git commit -a -m "base" && + echo -e "base\n\nc" >file1 && + git commit -a -m "remote update" && + git checkout -b test${test_count}_a HEAD~ && + echo -e "local\n\nb" >file1 && + git commit -a -m "local update" && + test_must_fail git merge test${test_count}_b && + yes "" | git mergetool file1 && + echo -e "local\n\nc" >expect && + test_cmp expect file1 && + git commit -m "test resolved with mergetool" +' + test_done