Skip to content

Commit 89294d1

Browse files
peffgitster
authored andcommitted
run_external_diff: clean up error handling
When the external diff reports an error, we try to clean up and die. However, we can make this process a bit simpler: 1. We do not need to bother freeing memory, since we are about to exit. Nor do we need to clean up our tempfiles, since the atexit() handler will do it for us. So we can die as soon as we see the error. 3. We can just call die() rather than fprintf/exit. This does technically change our exit code, but the exit code of "1" is not meaningful here. In fact, it is probably wrong, since "1" from diff usually means "completed successfully, but there were differences". And while we're there, we can mark the error message for translation, and drop the full stop at the end to make it more like our other messages. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent ae049c9 commit 89294d1

File tree

2 files changed

+4
-7
lines changed

2 files changed

+4
-7
lines changed

diff.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2909,7 +2909,6 @@ static void run_external_diff(const char *pgm,
29092909
{
29102910
struct argv_array argv = ARGV_ARRAY_INIT;
29112911
struct argv_array env = ARGV_ARRAY_INIT;
2912-
int retval;
29132912
struct diff_queue_struct *q = &diff_queued_diff;
29142913

29152914
if (one && two) {
@@ -2938,14 +2937,12 @@ static void run_external_diff(const char *pgm,
29382937
argv_array_pushf(&env, "GIT_DIFF_PATH_COUNTER=%d", ++o->diff_path_counter);
29392938
argv_array_pushf(&env, "GIT_DIFF_PATH_TOTAL=%d", q->nr);
29402939

2941-
retval = run_command_v_opt_cd_env(argv.argv, RUN_USING_SHELL, NULL, env.argv);
2940+
if (run_command_v_opt_cd_env(argv.argv, RUN_USING_SHELL, NULL, env.argv))
2941+
die(_("external diff died, stopping at %s"), name);
2942+
29422943
remove_tempfile();
29432944
argv_array_clear(&argv);
29442945
argv_array_clear(&env);
2945-
if (retval) {
2946-
fprintf(stderr, "external diff died, stopping at %s.\n", name);
2947-
exit(1);
2948-
}
29492946
}
29502947

29512948
static int similarity_index(struct diff_filepair *p)

t/t7800-difftool.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ test_expect_success PERL 'custom tool commands override built-ins' '
5858

5959
test_expect_success PERL 'difftool ignores bad --tool values' '
6060
: >expect &&
61-
test_expect_code 1 \
61+
test_must_fail \
6262
git difftool --no-prompt --tool=bad-tool branch >actual &&
6363
test_cmp expect actual
6464
'

0 commit comments

Comments
 (0)