From: Junio C Hamano <gitster@pobox.com>
To: Michael Haggerty <mhagger@alum.mit.edu>
Cc: Jiang Xin <worldhello.net@gmail.com>,
Git List <git@vger.kernel.org>, Lea Wiemann <lewiemann@gmail.com>
Subject: Re: [PATCH v2] test: set the realpath of CWD as TRASH_DIRECTORY
Date: Wed, 29 Aug 2012 09:33:07 -0700 [thread overview]
Message-ID: <7vy5kxwtdo.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <503DCFAE.6060307@alum.mit.edu> (Michael Haggerty's message of "Wed, 29 Aug 2012 10:15:42 +0200")
Michael Haggerty <mhagger@alum.mit.edu> writes:
> On 08/29/2012 08:06 AM, Junio C Hamano wrote:
>> Michael Haggerty <mhagger@alum.mit.edu> writes:
>
> It is in fact the whole approach that I object to.
> ...
>> What exactly is broken in CEILING?
>
> CEILING is used in setup_git_directory_gently_1() when trying to find
> the GIT_DIR appropriate for the current directory. The entries in
> CEILING are compared textually to getcwd(), looking for the entry that
> is the longest proper prefix of PWD. This is then used to limit a loop
> that is vaguely
>
> while (!is_git_directory())
> chdir("..");
>
> The problem, as I understand it, is that when the tests are run with
> root set to a path that includes a symlink, then test and
> TRASH_DIRECTORY are set to the textual value of "$root/trash
> directory.tXXXX", but then a little bit later test-lib.sh chdirs into
> the trash directory using "cd -P $test" (thereby resolving symlinks).
> So, taking my concrete example "--root=/dev/shm" where /dev/shm is a
> symlink to /run/shm, we have
>
> test="/dev/shm/trash directory.tXXXX"
> TRASH_DIRECTORY="$test"
> ...
> cd -P "$test"
>
> which results in PWD being "/run/shm/trash directory.tXXXX".
The components of CEILING should be adjusted to strip the symlink so
that it begins with "/run/shm/" before it is used; otherwise it
would not work. As the current code does not do that at runtime (I
am describing the situation, not justifying), it won't match if
CEILING is built out of $TRASH_DIRECTORY. In the above, setting of
$test and $TRASH is wrong; it does not match the realpath.
So "I somehow thought that Jiang's patch was to make sure any
variables that contain pathnames (and make sure future paths we
might grab out of $(pwd)) are realpath without symlinks early in the
test set-up," in my previous message was not correct. The patch is
not doing that, and that is what breaks your setup.
My preference is to set things up in such a way that most of the
tests do not have to worry about these symlink aliases. I know you
said you do not like the "whole approach", but I'd like to see our
tests run in a stable and reproducible testing environment.
We should have specific tests (on symlink enabled platforms) that
creates a directory and an alias to it via a symlink, goes into it
and checks the CEILING (and whatever else) behaviour. We know that
the current code does not account for the alias introduced by
symlinks, and setup_git_directory_gently() may want to be patched to
fix _that_ specific test.
next prev parent reply other threads:[~2012-08-29 16:33 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-24 8:00 [PATCH] test: some testcases failed if cwd is on a symlink Jiang Xin
2012-07-24 8:24 ` Stefano Lattarini
2012-07-24 10:59 ` Pete Wyckoff
2012-07-24 14:47 ` Junio C Hamano
2012-07-24 22:06 ` Jiang Xin
2012-08-18 14:41 ` Michael Haggerty
2012-08-18 20:36 ` Junio C Hamano
2012-08-19 13:57 ` Michael Haggerty
2012-08-19 16:43 ` Junio C Hamano
2012-08-21 5:59 ` Michael Haggerty
2012-08-27 5:13 ` [PATCH v2] test: set the realpath of CWD as TRASH_DIRECTORY Jiang Xin
2012-08-27 16:15 ` Junio C Hamano
2012-08-29 4:14 ` Michael Haggerty
2012-08-29 6:06 ` Junio C Hamano
2012-08-29 8:15 ` Michael Haggerty
2012-08-29 16:33 ` Junio C Hamano [this message]
2012-08-30 4:37 ` Michael Haggerty
2012-08-30 5:26 ` Junio C Hamano
2012-08-31 7:49 ` Michael Haggerty
2012-09-26 19:34 ` [PATCH 0/8] Fix GIT_CEILING_DIRECTORIES that contain symlinks Michael Haggerty
2012-09-26 19:34 ` [PATCH 1/8] Introduce new static function real_path_internal() Michael Haggerty
2012-09-27 21:27 ` Junio C Hamano
2012-09-29 4:56 ` Michael Haggerty
2012-09-29 5:40 ` Junio C Hamano
2012-09-26 19:34 ` [PATCH 2/8] Introduce new function real_path_if_valid() Michael Haggerty
2012-09-26 19:34 ` [PATCH 3/8] longest_ancestor_length(): use string_list_split() Michael Haggerty
2012-09-27 22:48 ` Junio C Hamano
2012-09-29 5:25 ` Michael Haggerty
2012-09-29 5:43 ` Junio C Hamano
2012-09-26 19:34 ` [PATCH 4/8] longest_ancestor_length(): explicitly filter list before loop Michael Haggerty
2012-09-27 22:48 ` Junio C Hamano
2012-09-26 19:34 ` [PATCH 5/8] longest_ancestor_length(): always add a slash to the end of prefixes Michael Haggerty
2012-09-26 19:34 ` [PATCH 6/8] longest_ancestor_length(): use string_list_longest_prefix() Michael Haggerty
2012-09-26 19:34 ` [PATCH 7/8] longest_ancestor_length(): resolve symlinks before comparing paths Michael Haggerty
2012-09-27 22:51 ` Junio C Hamano
2012-09-29 5:46 ` Michael Haggerty
2012-09-26 19:34 ` [PATCH 8/8] t1504: stop resolving symlinks in GIT_CEILING_DIRECTORIES Michael Haggerty
2012-09-27 19:42 ` [PATCH 0/8] Fix GIT_CEILING_DIRECTORIES that contain symlinks Junio C Hamano
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vy5kxwtdo.fsf@alter.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=lewiemann@gmail.com \
--cc=mhagger@alum.mit.edu \
--cc=worldhello.net@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.
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 NNTP newsgroup(s).