Message ID | 20200116181940.GA2945961@coredump.intra.peff.net (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | t7800: don't rely on reuse_worktree_file() | expand |
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 >
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' '
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' '
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(-)