Re: [PATCH v2] test_cmp: diagnose incorrect arguments
From: Jeff King <hidden>
Date: 2020-10-16 00:17:07
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@coredump.intra.peff.net/ (local)