On Sun, Aug 09, 2020 at 01:42:09PM -0400, Eric Sunshine wrote: > Under normal circumstances, if a test author misspells a filename passed > to test_cmp(), the error is quickly discovered when the test fails > unexpectedly due to test_cmp() being unable to find the file. However, > if the test is expected to fail, as with test_expect_failure(), a > misspelled filename as argument to test_cmp() will go unnoticed since > the test will indeed fail, but for the wrong reason. Make it easier for > test authors to discover such problems early by sanity-checking the > arguments to test_cmp(). To avoid penalizing all clients of test_cmp() > in the general case, only check for missing files if the comparison > fails. This patch caused some interesting confusion for me today. I was looking at the patch from [1] which causes a test failure (and I wanted to see where it failed, etc). And I got: $ ./t5601-clone.sh ok 1 - setup ok 2 - clone with excess parameters (1) ok 3 - clone with excess parameters (2) ok 4 - output from clone ok 5 - clone does not keep pack ok 6 - clone checks out files ok 7 - clone respects GIT_WORK_TREE error: bug in the test script: test_cmp 'r2/.git/HEAD' missing which was somewhat unhelpful (or at least less helpful than a regular test failure). The test in question does this: test_cmp r0/.git/HEAD r2/.git/HEAD && and expects to fail if an earlier step didn't correctly create r2. Is it a bug or misuse of test_cmp for it to do so? I could see an argument that it is, but I'm also not sure if there's a convenient alternative. The best I could come up with is: test_path_is_file r2/.git/HEAD && test_cmp r0/.git/HEAD r2/.git/HEAD which isn't that great. -Peff [1] https://lore.kernel.org/git/20200130102933.GE840531@xxxxxxxxxxxxxxxxxxxxxxx/