git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Add support for GIT_CEILING_DIRECTORIES

From
DRDavid Reiss <dreiss@facebook.com>
Date
May 15, 2008, 22:45 UTC
Message-ID
<482CBCF2.6030202@facebook.com>
In-Reply-To
<alpine.DEB.1.00.0805152327440.30431@racer>
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:
Show 96 quoted lines
> 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
> 
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 7 of 20 in “Add support for GIT_CEILING_DIRS”
  1. Add support for GIT_CEILING_DIRSDavid Reiss, May 15, 2008
  2. Johannes SchindelinMay 15, 2008
  3. David ReissMay 15, 2008
  4. Add support for GIT_CEILING_DIRECTORIESJohannes Schindelin, May 15, 2008
  5. David ReissMay 15, 2008
  6. Johannes SchindelinMay 15, 2008
  7. David ReissMay 15, 2008
  8. Add support for GIT_CEILING_DIRECTORIESJohannes Schindelin, May 15, 2008
  9. Johannes SixtMay 16, 2008
  10. Johannes SchindelinMay 16, 2008
  11. Johannes SixtMay 16, 2008
  12. David ReissMay 16, 2008
  13. Johannes SchindelinMay 17, 2008
  14. Add support for GIT_CEILING_DIRECTORIESJohannes Schindelin, May 17, 2008
  15. Johannes SixtMay 19, 2008
  16. Johannes SchindelinMay 19, 2008
  17. Junio C HamanoMay 15, 2008
  18. Johannes SchindelinMay 15, 2008
  19. Johannes SixtMay 16, 2008
  20. Johannes SchindelinMay 16, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.