archive-tar: report filter start error only once

A missing tar filter is reported by start_command() using error(), but
also by its caller, write_tar_filter_archive(), using die():

   $ git -c tar.invalid.command=foo archive --format=invalid HEAD
   error: cannot run foo: No such file or directory
   fatal: unable to start 'foo' filter: No such file or directory

The second message contains all relevant information and even says that
the failed command was intended to be used as a filter.  Silence the
first one because it's redundant.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
This commit is contained in:
René Scharfe 2022-10-29 12:06:06 +02:00 committed by Taylor Blau
parent 63bba4fdd8
commit 1e4ea950f7
2 changed files with 8 additions and 0 deletions

View File

@ -498,6 +498,7 @@ static int write_tar_filter_archive(const struct archiver *ar,
strvec_push(&filter.args, cmd.buf); strvec_push(&filter.args, cmd.buf);
filter.use_shell = 1; filter.use_shell = 1;
filter.in = -1; filter.in = -1;
filter.silent_exec_failure = 1;
if (start_command(&filter) < 0) if (start_command(&filter) < 0)
die_errno(_("unable to start '%s' filter"), cmd.buf); die_errno(_("unable to start '%s' filter"), cmd.buf);

View File

@ -342,6 +342,13 @@ test_expect_success 'only enabled filters are available remotely' '
test_cmp_bin remote.bar config.bar test_cmp_bin remote.bar config.bar
' '
test_expect_success 'invalid filter is reported only once' '
test_must_fail git -c tar.invalid.command= archive --format=invalid \
HEAD >out 2>err &&
test_must_be_empty out &&
test_line_count = 1 err
'
test_expect_success 'git archive --format=tgz' ' test_expect_success 'git archive --format=tgz' '
git archive --format=tgz HEAD >j.tgz git archive --format=tgz HEAD >j.tgz
' '