From: Junio C Hamano <gitster@pobox.com>
To: Felipe Contreras <felipe.contreras@gmail.com>
Cc: git@vger.kernel.org, David Aguilar <davvid@gmail.com>,
Johannes Sixt <j6t@kdbg.org>, Seth House <seth@eseth.com>
Subject: Re: [RFC/PATCH] mergetool: use resolved conflicts in all the views
Date: Wed, 16 Dec 2020 14:24:23 -0800 [thread overview]
Message-ID: <xmqqa6ud2xuw.fsf@gitster.c.googlers.com> (raw)
In-Reply-To: 20201216174345.28146-1-felipe.contreras@gmail.com
Felipe Contreras <felipe.contreras@gmail.com> writes:
> It doesn't make sense to display already-resolved conflicts in the
> different views of all mergetools.
>
> We already have the best version in MERGED, with annotations that can
> be used to extract a pruned version of LOCAL and REMOTE. If we are using
> the diff3 conflict-style, we can even extract BASE.
>
> Let's use these annotations instead of using the original files before
> the conflict resolution.
>
> TODO: There may be a better way to extract these files that doesn't rely
> on the user's conflict-style configuration.
>
> See Seth House's blog post [1] for the idea and the rationale.
>
> [1] https://www.eseth.org/2020/mergetools.html
>
> Cc: Seth House <seth@eseth.com>
> Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Hmph, I got what Seth showed, but I do not quite see how the ideas
in the post relate to what this patch does. The patch just avoids
grabbing the contents of each stage out to a file for three stages
using "git checkout-index" and instead does the same by munging the
diff3 output, which ought to have the same information at least for
text files, using "sed", or is there something I am not seeing?
If there is none, then what is the benefit of doing the same thing
without running 3 checkout-index? Performance?
Also using checkout-index to grab the raw contents without relying
on the textual context marker would mean that a custom mergetool
backend could be used to merge non-text files. So if this
optimization (I am still assuming this is "doing the same without
running three checkout-index to gain performance" I read out of the
patch text) is worth doing, there needs a knob to allow users to opt
out of it somehow to avoid regressing on the feature front.
If the mergetool were in control to (re)start the merge process that
would result in the conflicted state, we could override the end-user
preference on the conflict style (either 'GNU merge'-style or
'diff3'-style) and conflict-marker-length to be used in showing
textual conflicts, but as I understand "mergetool" is handed an
already conflicted state and asked to resolve it, it would not be
possible without at least looking at the stage #1 to recover the
base for folks who do not use diff3 style.
> ---
> git-mergetool.sh | 19 ++++---------------
> 1 file changed, 4 insertions(+), 15 deletions(-)
>
> diff --git a/git-mergetool.sh b/git-mergetool.sh
> index e3f6d543fb..4759433d46 100755
> --- a/git-mergetool.sh
> +++ b/git-mergetool.sh
> @@ -227,18 +227,6 @@ stage_submodule () {
> git update-index --add --replace --cacheinfo 160000 "$submodule_sha1" "${work_rel_path%/}" || die
> }
>
> -checkout_staged_file () {
> - tmpfile="$(git checkout-index --temp --stage="$1" "$2" 2>/dev/null)" &&
> - tmpfile=${tmpfile%%' '*}
> -
> - if test $? -eq 0 && test -n "$tmpfile"
> - then
> - mv -- "$(git rev-parse --show-cdup)$tmpfile" "$3"
> - else
> - >"$3"
> - fi
> -}
> -
> merge_file () {
> MERGED="$1"
>
> @@ -318,9 +306,10 @@ merge_file () {
> # where the base's directory no longer exists.
> mkdir -p "$(dirname "$MERGED")"
>
> - checkout_staged_file 1 "$MERGED" "$BASE"
> - checkout_staged_file 2 "$MERGED" "$LOCAL"
> - checkout_staged_file 3 "$MERGED" "$REMOTE"
> + # TODO: How do we get $MERGED always with diff3?
> + sed -e '/^<<<<<<< /,/^||||||| /d' -e '/^=======$/,/^>>>>>>> /d' "$MERGED" > "$BASE"
> + sed -e '/^<<<<<<< /,/^=======$/d' -e '/^>>>>>>> /d' "$MERGED" > "$LOCAL"
> + sed -e '/^||||||| /,/^>>>>>>> /d' -e '/^<<<<<<< /d' "$MERGED" > "$REMOTE"
>
Style (lose SP after '>' redirection; I looked at the existing code
and spotted one existing violation but that is not an excuse to make
things even less consistent).
Also, conflict-marker-size=<N> attributes can change the length, so
hardcoding these patterns would not work for everybody.
> if test -z "$local_mode" || test -z "$remote_mode"
> then
Thanks.
next prev parent reply other threads:[~2020-12-16 22:25 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-16 17:43 [RFC/PATCH] mergetool: use resolved conflicts in all the views Felipe Contreras
2020-12-16 22:24 ` Junio C Hamano [this message]
2020-12-16 22:53 ` Seth House
2020-12-17 5:18 ` Junio C Hamano
2020-12-17 5:41 ` Felipe Contreras
2020-12-17 7:35 ` Johannes Sixt
2020-12-17 8:27 ` Felipe Contreras
2020-12-17 19:23 ` Johannes Sixt
2020-12-18 2:30 ` Felipe Contreras
2020-12-17 9:44 ` Seth House
2020-12-17 10:35 ` Felipe Contreras
2020-12-17 17:50 ` Seth House
2020-12-17 19:28 ` Junio C Hamano
2020-12-18 2:34 ` Felipe Contreras
[not found] ` <CANiSa6jMXTyfo43bUdC8601BvYKiF67HXo+QaiTh_-8KWyBsLg@mail.gmail.com>
2020-12-21 0:31 ` Felipe Contreras
2020-12-18 2:05 ` Felipe Contreras
2020-12-18 2:35 ` Seth House
2020-12-18 2:49 ` Felipe Contreras
2020-12-18 5:49 ` Seth House
2020-12-18 9:46 ` Felipe Contreras
2020-12-19 0:13 ` Seth House
2020-12-19 0:53 ` Felipe Contreras
2020-12-19 11:14 ` Junio C Hamano
2020-12-19 12:08 ` Felipe Contreras
2020-12-19 18:26 ` Junio C Hamano
2020-12-19 20:18 ` Felipe Contreras
2020-12-21 4:25 ` Seth House
2020-12-21 5:34 ` Felipe Contreras
2020-12-21 7:36 ` Seth House
2020-12-21 11:17 ` Felipe Contreras
2020-12-21 22:15 ` David Aguilar
2020-12-21 23:51 ` Code of conduct violation? Felipe Contreras
2020-12-22 7:13 ` Junio C Hamano
2020-12-22 9:58 ` Felipe Contreras
2020-12-22 15:01 ` Pratyush Yadav
2020-12-23 4:23 ` Felipe Contreras
2020-12-23 5:02 ` Junio C Hamano
2020-12-23 5:41 ` Felipe Contreras
2020-12-23 15:04 ` Nobody is THE one making contribution Junio C Hamano
2020-12-23 15:51 ` Felipe Contreras
2020-12-23 20:56 ` Junio C Hamano
2020-12-24 1:09 ` Felipe Contreras
2020-12-24 2:01 ` Ævar Arnfjörð Bjarmason
2020-12-24 5:19 ` Felipe Contreras
2020-12-24 12:30 ` Ævar Arnfjörð Bjarmason
2020-12-24 15:26 ` Felipe Contreras
2020-12-24 22:57 ` Junio C Hamano
2020-12-27 17:29 ` Felipe Contreras
2020-12-27 18:30 ` Junio C Hamano
2020-12-27 18:47 ` Felipe Contreras
2020-12-28 10:39 ` Junio C Hamano
2020-12-28 14:27 ` Felipe Contreras
2020-12-24 15:09 ` Randall S. Becker
2020-12-24 15:37 ` Felipe Contreras
2020-12-24 22:40 ` Junio C Hamano
2020-12-24 21:00 ` Code of conduct violation? David Aguilar
2020-12-24 22:32 ` Felipe Contreras
2020-12-18 10:04 ` [RFC/PATCH] mergetool: use resolved conflicts in all the views Junio C Hamano
2020-12-18 11:58 ` Felipe Contreras
2020-12-19 18:52 ` Junio C Hamano
2020-12-19 20:59 ` Felipe Contreras
2020-12-20 6:44 ` David Aguilar
2020-12-20 7:53 ` Felipe Contreras
2020-12-20 22:22 ` David Aguilar
2020-12-21 1:46 ` Felipe Contreras
2020-12-19 0:18 ` Seth House
2020-12-16 23:41 ` Felipe Contreras
2020-12-17 5:19 ` Junio C Hamano
2020-12-17 5:43 ` Felipe Contreras
2020-12-17 2:35 ` [RFC/PATCH v2] " Felipe Contreras
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqa6ud2xuw.fsf@gitster.c.googlers.com \
--to=gitster@pobox.com \
--cc=davvid@gmail.com \
--cc=felipe.contreras@gmail.com \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
--cc=seth@eseth.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).