Re: [Discussion] t1006: testing %(rest) with object names containing whitespace
- From
Jeff King <peff@peff.net>
- Date
- Oct 26, 2026, 01:32 UTC
- Message-ID
- <20261026013254.GB3575069@coredump.intra.peff.net>
- In-Reply-To
- <CAGjZMyRqv5RsLF4Vo439zy4urfr+R=CTwuDzmYjiemauuZan0Q@mail.gmail.com>
On Sat, Oct 24, 2026 at 12:17:53PM +0530, jyotish kumar wrote:
Show 20 quoted lines
> While exploring t/t1006-cat-file.sh, I came across the test for the > %(rest) format atom in git cat-file --batch-check. > > The test currently contains a FIXME explaining that %(rest) is > incompatible with object names containing whitespace, such as > HEAD:path/to/a/file with spaces. It uses test_expect_failure for that > case and mentions using the resolved object ID as input instead of the > original object name. > > I investigated this test and noticed that the run_tests() helper > already has access to the resolved object ID through $oid. I tried > using $oid as the input to the %(rest) test rather than $object_name. > > With this change, the focused t1006-cat-file.sh test passed all 423 > tests locally. > > Before preparing a patch, I wanted to ask whether this is the intended > approach for testing %(rest) here, and whether removing the > conditional expected-failure logic and using the resolved object ID > would be a worthwhile improvement.
There's a similar discussion here:
https://lore.kernel.org/git/20260219152407.12160-1-deveshigurgaon@gmail.com/
I didn't participate there, but I was the person who implemented this crappy %(rest) behavior in the first place. ;)
I think what Junio noted at the end of the thread is important. The limitation of %(rest) is documented and how it's "supposed" to work. And the reason that is the case is because %(rest) was added much later than --batch-check, and was stuck with the existing semantics.
So IMHO everything is working as designed, and there is nothing to fix in the code. But using test_expect_failure seems weird to me. It avoids the test suite announcing a failure, but it is not really a breakage to be fixed. A test with %(rest) and an object name with space should probably just be skipped. We _could_ run just those cases with the resolved id, but the point of that test is checking how %(rest) works with the name, so I don't know that it would be testing anything useful.
-Peff