Re: [PATCH] Add support for GIT_CEILING_DIRECTORIES

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux