From: Michael Haggerty <mhagger@alum.mit.edu>
To: Junio C Hamano <gitster@pobox.com>
Cc: Jiang Xin <worldhello.net@gmail.com>,
Lea Wiemann <lewiemann@gmail.com>,
git@vger.kernel.org, Michael Haggerty <mhagger@alum.mit.edu>
Subject: [PATCH 0/8] Fix GIT_CEILING_DIRECTORIES that contain symlinks
Date: Wed, 26 Sep 2012 21:34:42 +0200 [thread overview]
Message-ID: <1348688090-13648-1-git-send-email-mhagger@alum.mit.edu> (raw)
In-Reply-To: <50406C82.2070005@alum.mit.edu>
This series fixes longest_ancestor_length() so that it works even if
prefix_list contains entries that involve symlinks. The basic goal of
the series is to call real_path() on each of the entries so that a
textual comparison of the potential prefix to the front of path
correctly decides whether the path is located inside of the entry.
But along the way some other things had to be changed:
* real_path() die()s if the path passed to it is invalid, whereas it
is allowed for GIT_CEILING_DIRECTORIES to contain invalid paths. So
create a new function real_path_if_valid() that returns NULL for
invalid paths.
* Changing longest_ancestor_length() to call real_path_if_valid()
would make the former very difficult to test (because the tests
would depend on the contents of the whole filesystem). Therefore,
rewrite longest_ancestor_length() in terms of functions
string_list_split(), string_list_longest_prefix(), and
real_path_if_valid() which are tested individually.
The net results of these changes are that:
1. t1504 used to have to canonicalize TRASH_DIRECTORY to make itself
work even if the --root directory contains symlinks. This
canonicalization is no longer necessary (and has been removed).
2. t4035, which used to fail if the --root directory contained
symlinks, now works correctly in that situation.
After this change, all tests pass if the --root directory does *not*
contain symlinks, but t9903 still fails if the --root directory
contains symlinks. I haven't analyzed the cause of t9903's failure,
but it does not appear to be related to the GIT_CEILING_DIRECTORIES
feature.
On the mailing list I suggested *purposely* inserting symlinks into
the "trash directory.*" paths to test symlink handling more
systematically. This patch series does *NOT* make that change.
Michael Haggerty (8):
Introduce new static function real_path_internal()
Introduce new function real_path_if_valid()
longest_ancestor_length(): use string_list_split()
longest_ancestor_length(): explicitly filter list before loop
longest_ancestor_length(): always add a slash to the end of prefixes
longest_ancestor_length(): use string_list_longest_prefix()
longest_ancestor_length(): resolve symlinks before comparing paths
t1504: stop resolving symlinks in GIT_CEILING_DIRECTORIES
abspath.c | 98 ++++++++++++++++++++++++++++++++++++++-----------
cache.h | 1 +
path.c | 54 ++++++++++++++++-----------
t/t0060-path-utils.sh | 64 --------------------------------
t/t1504-ceiling-dirs.sh | 67 +++++++++++++++++----------------
5 files changed, 144 insertions(+), 140 deletions(-)
--
1.7.11.3
next prev parent reply other threads:[~2012-09-26 19:35 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
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 ` Michael Haggerty [this message]
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
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=1348688090-13648-1-git-send-email-mhagger@alum.mit.edu \
--to=mhagger@alum.mit.edu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=lewiemann@gmail.com \
--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.
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).