git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: David Aguilar <davvid@gmail.com>
Cc: Git Mailing List <git@vger.kernel.org>
Subject: Re: [PATCH] mergetools/xxdiff: prevent segfaults from stopping difftool
Date: Wed, 13 Oct 2021 11:03:43 -0700	[thread overview]
Message-ID: <xmqqlf2whke8.fsf@gitster.g> (raw)
In-Reply-To: <20211013024539.49612-1-davvid@gmail.com> (David Aguilar's message of "Tue, 12 Oct 2021 19:45:39 -0700")

David Aguilar <davvid@gmail.com> writes:

> Users often use "git difftool HEAD^" to review their work, and have
> "mergetool.prompt" set to false so that difftool does not prompt them
> before diffing each file.
>
> This is very convenient because users can see all their diffs by
> reviewing the xxdiff windows one at a time.
>
> A problem occurs when xxdiff encounters some binary files.
> It can segfault and return exit code 128, which is special-cased
> by git-difftool-helper as being an extraordinary situation that
> aborts the process.
>
> Suppress the exit code from xxdiff in its diff_cmd() implementation
> when we see exit code 128 so that the GIT_EXTERNAL_DIFF loop continues
> on uninterrupted to the next file rather than aborting when it
> encounters the first binary file.

Sounds like a reasonable workaround, but I wonder if this should be
limited to "when xxdiff segfaults" (in other words, if it is common
for other difftool backends to exit with status 128, perhaps a
better workaround might be to teach difftool-helper that 128 is not
all that special?), and if the answer is yes (in other words, no, it
is not common among other backends and 128 from xxdiff is very
special), if we can easily and cheaply avoid running xxdiff on
binaries---that way, other exists from xxdiff with status 128 can
still be treated as an extraordinary situation.

In any case, the above is a thinking-aloud by somebody who does not
use xxdiff himself, and should not be taken as "I think this patch
is not good enough" at all.

Will queue.  Thanks.

> Signed-off-by: David Aguilar <davvid@gmail.com>
> ---
>  mergetools/xxdiff | 7 +++++++
>  1 file changed, 7 insertions(+)
>
> diff --git a/mergetools/xxdiff b/mergetools/xxdiff
> index ce5b8e9f29..d5ce467995 100644
> --- a/mergetools/xxdiff
> +++ b/mergetools/xxdiff
> @@ -3,6 +3,13 @@ diff_cmd () {
>  		-R 'Accel.Search: "Ctrl+F"' \
>  		-R 'Accel.SearchForward: "Ctrl+G"' \
>  		"$LOCAL" "$REMOTE"
> +
> +	# xxdiff can segfault on binary files which are often uninteresting.
> +	# Do not allow segfaults to stop us from continuing on to the next file.
> +	if test $? = 128
> +	then
> +		return 1
> +	fi
>  }
>  
>  merge_cmd () {

  reply	other threads:[~2021-10-13 18:03 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-13  2:45 [PATCH] mergetools/xxdiff: prevent segfaults from stopping difftool David Aguilar
2021-10-13 18:03 ` Junio C Hamano [this message]
2021-10-14 18:50   ` David Aguilar

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqlf2whke8.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=davvid@gmail.com \
    --cc=git@vger.kernel.org \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).