From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] test: some testcases failed if cwd is on a symlink
Date: Tue, 21 Aug 2012 07:59:33 +0200 [thread overview]
Message-ID: <503323C5.9050500@alum.mit.edu> (raw)
In-Reply-To: <7vharyq1c6.fsf@alter.siamese.dyndns.org>
On 08/19/2012 06:43 PM, Junio C Hamano wrote:
> Michael Haggerty <mhagger@alum.mit.edu> writes:
>
>> I just verified that the combination of your two suggestions (i.e., the
>> patch below) fixes the problem for me.
>
> Good to know.
>
> The only remaining two worries from me are if everybody has working
> pwd at that early point in the script (I think MINGW replaces pwd
> with its own), and if the latter one should really be "/bin/pwd"
> everywhere. Saying "Give the true path to --root when you run it"
> can sidestep the latter issue ;-)
>
>> Nevertheless, I'm not sure that this is the best solution. The test
>> failures that occur without this change suggest to me that
>> GIT_CEILING_DIRECTORIES is implemented in a fragile way.
>
> Hrmph. How would you improve it? chdir() around twice and compare?
I believe that the old-school method is to stat(2) the two directories
and check whether their device IDs and inode numbers are identical. But
I don't know whether that is portable to other allegedly
POSIX-compatible OSs, or even works with all modern filesystems (I think
there was just a thread about a FUSE filesystem that sometimes changes
inode numbers).
Another alternative is to write a function that knows how to convert an
arbitrary path into an absolute path, including converting relative
paths to absolute, resolving symlinks, eliminating redundant "/" and
".", resolving "..", and perhaps canonicalizing "/" vs. "\" and
who-knows-what-else on Windows. It takes a bit of care to implement
this correctly, but it might be a useful function to have around.
Python's library function os.path.realpath() is an example [1].
Either approach would avoid chdir()ing around even temporarily, which
would anyway be bad form in git proper (as opposed to the test suite).
And it would avoid the need to chdir() permanently in the test suite,
which can have the effect of making directory names appear in unfamiliar
forms.
I'm afraid I don't have time to work on this now; I'm still trying to
finish the next iteration of the post-receive-email hook script replacement.
Michael
[1] (Python) source code here:
http://hg.python.org/cpython/file/20985f52b65e/Lib/posixfile.py
--
Michael Haggerty
mhagger@alum.mit.edu
http://softwareswirl.blogspot.com/
next prev parent reply other threads:[~2012-08-21 6:06 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 [this message]
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
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=503323C5.9050500@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.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).