* [PATCH] t7800: don't rely on reuse_worktree_file()
@ 2020-01-16 18:19 Jeff King
2020-01-16 21:08 ` Johannes Schindelin
2020-01-16 22:48 ` Junio C Hamano
0 siblings, 2 replies; 3+ messages in thread
From: Jeff King @ 2020-01-16 18:19 UTC (permalink / raw)
To: git
A test in t7800 tries to make sure that when git-difftool runs an
external tool that fails, it stops looking at files. Our fake failing
tool prints the file name it was asked to diff before exiting non-zero,
and then we confirm the output contains only that file.
However, this subtly relies on our internal reuse_worktree_file().
Because we're diffing between branches, the command run by difftool
might see:
- the git-stored filename (e.g., "file"), if we decided that the
working tree contents were up-to-date with the object in the index
and HEAD, and we could reuse them
- a temporary filename (e.g. "/tmp/abc123_file") if we had to dump the
contents from the object database
If the latter case happens, then the test fails, because it's expecting
the string "file". I discovered this when debugging something unrelated
with reuse_worktree_file(). I _thought_ it should be able to be
triggered by a racy-git situation, but running:
./t7800-difftool.sh --stress --run=2,13
never seems to fail. However, by my reading of reuse_worktree_file(),
this would probably always fail under Cygwin, because it sets
NO_FAST_WORKING_DIRECTORY. At any rate, since reuse_worktree_file()
is meant to be an optimization that may or may not trigger, our test
should be robust either way.
Instead of checking the filename, let's just make sure we got a single
line of output (which would not be true if we continued after the first
failure).
Signed-off-by: Jeff King <peff@peff.net>
---
t/t7800-difftool.sh | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
index 6bac9ed180..29b92907e2 100755
--- a/t/t7800-difftool.sh
+++ b/t/t7800-difftool.sh
@@ -125,15 +125,14 @@ test_expect_success 'difftool stops on error with --trust-exit-code' '
test_when_finished "rm -f for-diff .git/fail-right-file" &&
test_when_finished "git reset -- for-diff" &&
write_script .git/fail-right-file <<-\EOF &&
- echo "$2"
+ echo failed
exit 1
EOF
>for-diff &&
git add for-diff &&
- echo file >expect &&
test_must_fail git difftool -y --trust-exit-code \
--extcmd .git/fail-right-file branch >actual &&
- test_cmp expect actual
+ test_line_count = 1 actual
'
test_expect_success 'difftool honors exit status if command not found' '
--
2.25.0.318.gee4019ba55
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] t7800: don't rely on reuse_worktree_file()
2020-01-16 18:19 [PATCH] t7800: don't rely on reuse_worktree_file() Jeff King
@ 2020-01-16 21:08 ` Johannes Schindelin
2020-01-16 22:48 ` Junio C Hamano
1 sibling, 0 replies; 3+ messages in thread
From: Johannes Schindelin @ 2020-01-16 21:08 UTC (permalink / raw)
To: Jeff King; +Cc: git
Hi Peff,
On Thu, 16 Jan 2020, Jeff King wrote:
> A test in t7800 tries to make sure that when git-difftool runs an
> external tool that fails, it stops looking at files. Our fake failing
> tool prints the file name it was asked to diff before exiting non-zero,
> and then we confirm the output contains only that file.
>
> However, this subtly relies on our internal reuse_worktree_file().
> Because we're diffing between branches, the command run by difftool
> might see:
>
> - the git-stored filename (e.g., "file"), if we decided that the
> working tree contents were up-to-date with the object in the index
> and HEAD, and we could reuse them
>
> - a temporary filename (e.g. "/tmp/abc123_file") if we had to dump the
> contents from the object database
>
> If the latter case happens, then the test fails, because it's expecting
> the string "file". I discovered this when debugging something unrelated
> with reuse_worktree_file(). I _thought_ it should be able to be
> triggered by a racy-git situation, but running:
>
> ./t7800-difftool.sh --stress --run=2,13
>
> never seems to fail. However, by my reading of reuse_worktree_file(),
> this would probably always fail under Cygwin, because it sets
> NO_FAST_WORKING_DIRECTORY. At any rate, since reuse_worktree_file()
> is meant to be an optimization that may or may not trigger, our test
> should be robust either way.
>
> Instead of checking the filename, let's just make sure we got a single
> line of output (which would not be true if we continued after the first
> failure).
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
The reasoning and the patch seem sound to me.
Thanks,
Dscho
> t/t7800-difftool.sh | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
> index 6bac9ed180..29b92907e2 100755
> --- a/t/t7800-difftool.sh
> +++ b/t/t7800-difftool.sh
> @@ -125,15 +125,14 @@ test_expect_success 'difftool stops on error with --trust-exit-code' '
> test_when_finished "rm -f for-diff .git/fail-right-file" &&
> test_when_finished "git reset -- for-diff" &&
> write_script .git/fail-right-file <<-\EOF &&
> - echo "$2"
> + echo failed
> exit 1
> EOF
> >for-diff &&
> git add for-diff &&
> - echo file >expect &&
> test_must_fail git difftool -y --trust-exit-code \
> --extcmd .git/fail-right-file branch >actual &&
> - test_cmp expect actual
> + test_line_count = 1 actual
> '
>
> test_expect_success 'difftool honors exit status if command not found' '
> --
> 2.25.0.318.gee4019ba55
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] t7800: don't rely on reuse_worktree_file()
2020-01-16 18:19 [PATCH] t7800: don't rely on reuse_worktree_file() Jeff King
2020-01-16 21:08 ` Johannes Schindelin
@ 2020-01-16 22:48 ` Junio C Hamano
1 sibling, 0 replies; 3+ messages in thread
From: Junio C Hamano @ 2020-01-16 22:48 UTC (permalink / raw)
To: Jeff King; +Cc: git
Jeff King <peff@peff.net> writes:
> ... At any rate, since reuse_worktree_file()
> is meant to be an optimization that may or may not trigger, our test
> should be robust either way.
>
> Instead of checking the filename, let's just make sure we got a single
> line of output (which would not be true if we continued after the first
> failure).
Makes sense. Thanks for spotting.
> Signed-off-by: Jeff King <peff@peff.net>
> ---
> t/t7800-difftool.sh | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
> index 6bac9ed180..29b92907e2 100755
> --- a/t/t7800-difftool.sh
> +++ b/t/t7800-difftool.sh
> @@ -125,15 +125,14 @@ test_expect_success 'difftool stops on error with --trust-exit-code' '
> test_when_finished "rm -f for-diff .git/fail-right-file" &&
> test_when_finished "git reset -- for-diff" &&
> write_script .git/fail-right-file <<-\EOF &&
> - echo "$2"
> + echo failed
> exit 1
> EOF
> >for-diff &&
> git add for-diff &&
> - echo file >expect &&
> test_must_fail git difftool -y --trust-exit-code \
> --extcmd .git/fail-right-file branch >actual &&
> - test_cmp expect actual
> + test_line_count = 1 actual
> '
>
> test_expect_success 'difftool honors exit status if command not found' '
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-01-16 22:48 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-16 18:19 [PATCH] t7800: don't rely on reuse_worktree_file() Jeff King
2020-01-16 21:08 ` Johannes Schindelin
2020-01-16 22:48 ` Junio C Hamano
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).