Re: [PATCH] Add support for GIT_CEILING_DIRECTORIES
- Date: Thu, 15 May 2008 15:45:06 -0700
- From: David Reiss <dreiss@xxxxxxxxxxxx>
- Subject: Re: [PATCH] Add support for GIT_CEILING_DIRECTORIES
This meets my needs.
Junio, if you'd like, I can incorporate your suggestions of normalizing paths
internally and testing more corner cases. But if you just want to take this
version, I'll be fine.
--David
Johannes Schindelin wrote:
> Hi,
>
> On Thu, 15 May 2008, David Reiss wrote:
>
>> longest_prefix is just a textual check. It doesn't verify that the prefix
>> is actually a full directory component of the cwd.
>
> Okay.
>
>> Also, I think it is better to move the 'chdir("..")' after the do loop,
>> so that git won't even chdir up into the ceiling directory. This
>> actually doesn't matter to me, but I figured that it might be nice for
>> someone.
>
> I'd rather go with the minimal diff, unless there is a good reason to
> change it.
>
>> Finally, just a small thing. The documentation still says
>> "GIT_CEILING_DIRS".
>
> Okay.
>
> How about this on top (still pretty simple):
>
> ---
>
> Documentation/git.txt | 2 +-
> path.c | 10 ++++++++--
> t/t1504-ceiling-directories.sh | 8 ++++++++
> 3 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/Documentation/git.txt b/Documentation/git.txt
> index a12d1f8..e4413bf 100644
> --- a/Documentation/git.txt
> +++ b/Documentation/git.txt
> @@ -415,7 +415,7 @@ git so take care if using Cogito etc.
> This can also be controlled by the '--work-tree' command line
> option and the core.worktree configuration variable.
>
> -'GIT_CEILING_DIRS'::
> +'GIT_CEILING_DIRECTORIES'::
> If set (to a colon delimited list of absolute directories), Git
> will refuse to look for the .git/ directory further when hitting
> one of those directories (otherwise it would traverse the parent
> diff --git a/path.c b/path.c
> index c0d7364..a097ecc 100644
> --- a/path.c
> +++ b/path.c
> @@ -358,13 +358,18 @@ const char *make_absolute_path(const char *path)
> return buf;
> }
>
> +static int is_separator(char c)
> +{
> + return !c || c == '/';
> +}
> +
> int longest_prefix(const char *path, const char *prefix_list)
> {
> int max_length = 0, length = 0, i;
>
> for (i = 0; prefix_list[i]; i++)
> if (prefix_list[i] == ':') {
> - if (length > max_length)
> + if (length > max_length &&
> is_separator(path[length]))
> max_length = length;
> length = 0;
> }
> @@ -374,5 +379,6 @@ int longest_prefix(const char *path, const char
> *prefix_list)
> else
> length = -1;
> }
> - return max_length > length ? max_length : length;
> + return max_length > length || !is_separator(path[length]) ?
> + max_length : length;
> }
> diff --git a/t/t1504-ceiling-directories.sh b/t/t1504-ceiling-directories.sh
> index 1d8ef0b..6c8757d 100644
> --- a/t/t1504-ceiling-directories.sh
> +++ b/t/t1504-ceiling-directories.sh
> @@ -43,4 +43,12 @@ test_expect_success 'with matching ceiling directories' '
>
> '
>
> +test_expect_success 'with non-directory prefix' '
> +
> + GIT_CEILING_DIRECTORIES="$CWD/sub" &&
> + export GIT_CEILING_DIRECTORIES &&
> + (cd subdir && git rev-parse --git-dir)
> +
> +'
> +
> test_done
>
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html