On Fri, Dec 03, 2021 at 09:10:16AM -0800, Junio C Hamano wrote: > * TRASH_DIRECTORY is originally set to "trash directory." with a > suffix to make it unique across test scripts, but it immediately > gets turned into an absolute path by doing this: > > test -n "$root" && TRASH_DIRECTORY="$root/$TRASH_DIRECTORY" > case "$TRASH_DIRECTORY" in > /*) ;; # absolute path is good > *) TRASH_DIRECTORY="$TEST_OUTPUT_DIRECTORY/$TRASH_DIRECTORY" ;; > esac > > I notice that a root that is not absolute is silently lost during > this process. > > TEST_OUTPUT_DIRECTORY is set to TEST_DIRECTORY that comes from > $(pwd) we saw earlier, or TEST_OUTPUT_DIRECTORY_OVERRIDE, which > is also set to $(pwd) elsewhere, so the case statement does make > it absolute in the end. It just loses --root=* without complaint > which is what I found iffy. I don't think it's lost. It becomes part of $TRASH_DIRECTORY in the first line, so the final line which prepends $TEST_OUTPUT_DIRECTORY makes it relative to that. E.g.: $ cd t $ ./t0000-basic.sh --root=foo --debug [...] $ ls foo trash directory.t0000-basic/ I don't recall planning that in particular (there is not much point in using it unless you are pointing outside the repo, though I guess you could use ../../../foo or similar). But I think it has always worked that way, since f423ef5f2b (tests: allow user to specify trash directory location, 2009-08-09). It was perhaps a little easier to see back then when the intermediate "$test" variable was not the final one. -Peff