git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] test: set the realpath of CWD as TRASH_DIRECTORY

From
Michael Haggerty <mhagger@alum.mit.edu>
Date
Aug 29, 2012, 04:14 UTC
Message-ID
<503D973D.8040402@alum.mit.edu>
In-Reply-To
<7vk3wktiph.fsf@alter.siamese.dyndns.org>
On 08/27/2012 06:15 PM, Junio C Hamano wrote:
Show 24 quoted lines
> Jiang Xin <worldhello.net@gmail.com> writes:
> 
>> Some testcases will fail if current work directory is on a symlink.
>>
>>     symlink$ sh ./t4035-diff-quiet.sh
>>     $ sh ./t4035-diff-quiet.sh --root=/symlink
>>     $ TEST_OUTPUT_DIRECTORY=/symlink sh ./t4035-diff-quiet.sh
>>
>> This is because the realpath of ".git" directory will be returned when
>> running the command 'git rev-parse --git-dir' in a subdir of the work
>> tree, and the realpath may not equal to "$TRASH_DIRECTORY".
>>
>> In this fix, "$TRASH_DIRECTORY" is determined right after the realpath
>> of CWD is resolved.
>>
>> Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
>> Reported-by: Michael Haggerty <mhagger@alum.mit.edu>
>> Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
>> ---
> 
> I think this is in line with what was discussed in the other thread
> Michael brought this up.  Thanks for following it through.
> 
> Michael, this looks good to me; anything I missed?

I can confirm that this patch eliminates the test failures that I was seeing in t4035 and t9903.

But it also changes almost 600 *other* tests from "succeed even in the presence of symlinks" to "never tested in the presence of symlinks", and I think that is surrendering more ground than necessary. I would rather see one of the following approaches:

*If* the official policy is that GIT_CEILING_DIRECTORIES is not reliable in the presence of symlinks, then (a) that limitation should be mentioned in the documentation; (b) the affected tests should either be skipped in the case of symlinked directories or they (alone!) should take measures to work around the problem.

*If* the official policy is that GIT_CEILING_DIRECTORIES should work in the presence of symlinks, then (a) we should add a failing test case that specifically documents this bug; (b) other tests that fail as a side effect of this bug even though they are trying to test something else should either be skipped in the case of symlinked directories or they (alone!) should take measures to work around the problem; (c) the bug should be fixed as soon as possible.

In fact, we could even go further:
* The "cd -P" in test-lib.sh could be changed to "cd -L", to avoid
masking other problems related to symlinks.  If I make that change, I
get test failures in 10 files when using --root=/symlinkeddir, and not
all of them are obviously related to GIT_CEILING_DIRECTORIES.  Some of
these might simply be sloppiness in how the test scripts are written,
but others might be bugs in git proper.
* We could *intentionally* access the trash directories via a symlink on
systems that support symlinks (much like the trash directory names
intentionally include a space) to get *systematic* test coverage of
symlink issues, rather than occasional testing and mysterious failures
when somebody happens to have a symlink in his build path or root.
(But it is still the case that I don't have time to work on this.)
Michael
-- 
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
Previous: Junio C HamanoNext: Junio C Hamano
Message 13 of 38 in “test: some testcases failed if cwd is on a symlink”
  1. test: some testcases failed if cwd is on a symlinkJiang Xin, Jul 24, 2012
  2. Stefano LattariniJul 24, 2012
  3. Pete WyckoffJul 24, 2012
  4. Junio C HamanoJul 24, 2012
  5. Jiang XinJul 24, 2012
  6. Michael HaggertyAug 18, 2012
  7. Junio C HamanoAug 18, 2012
  8. Michael HaggertyAug 19, 2012
  9. Junio C HamanoAug 19, 2012
  10. Michael HaggertyAug 21, 2012
  11. test: set the realpath of CWD as TRASH_DIRECTORYJiang Xin, Aug 27, 2012
  12. Junio C HamanoAug 27, 2012
  13. Michael HaggertyAug 29, 2012
  14. Junio C HamanoAug 29, 2012
  15. Michael HaggertyAug 29, 2012
  16. Junio C HamanoAug 29, 2012
  17. Michael HaggertyAug 30, 2012
  18. Junio C HamanoAug 30, 2012
  19. Michael HaggertyAug 31, 2012
  20. 0/8 Fix GIT_CEILING_DIRECTORIES that contain symlinksMichael Haggerty, Sep 26, 2012
  21. 1/8 Introduce new static function real_path_internal()Michael Haggerty, Sep 26, 2012
  22. Junio C HamanoSep 27, 2012
  23. Michael HaggertySep 29, 2012
  24. Junio C HamanoSep 29, 2012
  25. 2/8 Introduce new function real_path_if_valid()Michael Haggerty, Sep 26, 2012
  26. 3/8 longest_ancestor_length(): use string_list_split()Michael Haggerty, Sep 26, 2012
  27. Junio C HamanoSep 27, 2012
  28. Michael HaggertySep 29, 2012
  29. Junio C HamanoSep 29, 2012
  30. 4/8 longest_ancestor_length(): explicitly filter list before loopMichael Haggerty, Sep 26, 2012
  31. Junio C HamanoSep 27, 2012
  32. 5/8 longest_ancestor_length(): always add a slash to the end of prefixesMichael Haggerty, Sep 26, 2012
  33. 6/8 longest_ancestor_length(): use string_list_longest_prefix()Michael Haggerty, Sep 26, 2012
  34. 7/8 longest_ancestor_length(): resolve symlinks before comparing pathsMichael Haggerty, Sep 26, 2012
  35. Junio C HamanoSep 27, 2012
  36. Michael HaggertySep 29, 2012
  37. 8/8 t1504: stop resolving symlinks in GIT_CEILING_DIRECTORIESMichael Haggerty, Sep 26, 2012
  38. Junio C HamanoSep 27, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.