git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Philippe Blain <levraiphilippeblain@gmail.com>
Cc: Git mailing list <git@vger.kernel.org>,
	Derrick Stolee <dstolee@microsoft.com>
Subject: Re: t7900 failures when $HOME is symlinked
Date: Fri, 03 Dec 2021 09:10:16 -0800	[thread overview]
Message-ID: <xmqq1r2tty13.fsf@gitster.g> (raw)
In-Reply-To: <4cf14040-c8e1-0f75-0ec4-fd8cf6bed0a5@gmail.com> (Philippe Blain's message of "Fri, 3 Dec 2021 09:56:28 -0500")

Philippe Blain <levraiphilippeblain@gmail.com> writes:

> Hi Stolee,
>
> I noticed two failures, t7900.32 and t7900.36, on a system where
> $HOME is symlinked, i.e.
>
>     $ cd $HOME && pwd
>     /home/me
>     $ pwd -P
>     /some/other/path/me
>
> These two tests use 'pfx = $(cd $HOME && pwd)', so $pfx is '/home/me',
> but the actual path that gets written by Git is canonicalized, i.e.
> '/some/other/path/me'. I think a simple fix would be to use 'pwd -P'
> instead, which fixes it for me.

Curious.  Your personal HOME shouldn't have much to do with the
tests, but obviously it can indirectly affect the outcome because it
affects where you place your repository.

HOME during tests is set in t/test-lib.sh, based on where
TRASH_DIRECTORY is, and the latter is often derived from
TEST_OUTPUT_DIRECTORY (unless --root is given), which comes from
TEST_DIRECTORY and it is set like so:

    # Test the binaries we have just built.  The tests are kept in
    # t/ subdirectory and are run in 'trash directory' subdirectory.
    if test -z "$TEST_DIRECTORY"
    then
            # We allow tests to override this, in case they want to run tests
            # outside of t/, e.g. for running tests on the test library
            # itself.
            TEST_DIRECTORY=$(pwd)
    else
            # ensure that TEST_DIRECTORY is an absolute path so that it
            # is valid even if the current working directory is changed
            TEST_DIRECTORY=$(cd "$TEST_DIRECTORY" && pwd) || exit 1
    fi
    if test -z "$TEST_OUTPUT_DIRECTORY"
    then
            # Similarly, override this to store the test-results subdir
            # elsewhere
            TEST_OUTPUT_DIRECTORY=$TEST_DIRECTORY
    fi
    GIT_BUILD_DIR="$TEST_DIRECTORY"/..

If you want to do $(pwd -P) somewhere, isn't it that one you want to
change to avoid similar problems in any code, including the ones
that are not yet written, that uses $(pwd)?

This is a tangent, but I think I found a small bug while spelunking
for the origin of HOME during tests.

 * We parse out --root=* option like this:

	--root=*)
		root=${opt#--*=} ;;

   Notice that we do not require it to be absolute path.

 * 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.


  reply	other threads:[~2021-12-03 17:10 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-03 14:56 t7900 failures when $HOME is symlinked Philippe Blain
2021-12-03 17:10 ` Junio C Hamano [this message]
2021-12-03 17:42   ` Jeff King
2021-12-05 10:02     ` Junio C Hamano
2021-12-03 22:40   ` Philippe Blain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqq1r2tty13.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=dstolee@microsoft.com \
    --cc=git@vger.kernel.org \
    --cc=levraiphilippeblain@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).