git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] Support working directory located at root
@ 2010-02-09  7:16 Johannes Sixt
  2010-02-09 12:27 ` Nguyen Thai Ngoc Duy
  0 siblings, 1 reply; 7+ messages in thread
From: Johannes Sixt @ 2010-02-09  7:16 UTC (permalink / raw)
  To: Nguyen Thai Ngoc Duy
  Cc: Junio C Hamano, git, João Carlos Mendes Luís

Nguyen Thai Ngoc Duy schrieb:
> But I suspect my change in this code is not enough and caused
> the problem (on msys?) for Hannes.

My test was on Linux, btw, roughly:

cd /
git init
cd etc
git add resolv.conf

-- Hannes

^ permalink raw reply	[flat|nested] 7+ messages in thread
* [PATCH] Support working directory located at root
@ 2010-02-08 14:53 Nguyễn Thái Ngọc Duy
  2010-02-08 17:43 ` Junio C Hamano
  2010-02-08 21:29 ` Johannes Sixt
  0 siblings, 2 replies; 7+ messages in thread
From: Nguyễn Thái Ngọc Duy @ 2010-02-08 14:53 UTC (permalink / raw)
  To: git, João Carlos Mendes Luís, Junio C Hamano
  Cc: Nguyễn Thái Ngọc Duy

Git should work regardless where the working directory is located,
even at root. This patch fixes two places where it assumes working
directory always have parent directory.

In setup_git_directory_gently(), when Git goes up to root and finds
.git there, it happily sets worktree to "".

In prefix_path(), loosen the outside repo check a little bit. Usually
when a path XXX is inside worktree /foo, it must be either "/foo", or
"/foo/...". When worktree is simply "/", we can safely ignore the
check: we have a slash at the beginning already.

Not related to worktree, but also set gitdir correctly if a bare repo
is placed (insanely?) at root.

Thanks João Carlos Mendes Luís for pointing out this problem.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 Tell me if this patch is rejected, I'll send another one that makes
 setup_git_* die() if worktree/gitdir is to be set empty. I don't think we
 expect gitdir or worktree to be empty anywhere.

 setup.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/setup.c b/setup.c
index b38cbee..0fcd2fd 100644
--- a/setup.c
+++ b/setup.c
@@ -25,7 +25,7 @@ const char *prefix_path(const char *prefix, int len, const char *path)
 		len = strlen(work_tree);
 		total = strlen(sanitized) + 1;
 		if (strncmp(sanitized, work_tree, len) ||
-		    (sanitized[len] != '\0' && sanitized[len] != '/')) {
+		    (len > 1 && sanitized[len] != '\0' && sanitized[len] != '/')) {
 		error_out:
 			die("'%s' is outside repository", orig);
 		}
@@ -403,7 +403,7 @@ const char *setup_git_directory_gently(int *nongit_ok)
 			if (!work_tree_env)
 				inside_work_tree = 0;
 			if (offset != len) {
-				cwd[offset] = '\0';
+				cwd[offset ? offset : 1] = '\0';
 				set_git_dir(cwd);
 			} else
 				set_git_dir(".");
@@ -427,6 +427,8 @@ const char *setup_git_directory_gently(int *nongit_ok)
 	inside_git_dir = 0;
 	if (!work_tree_env)
 		inside_work_tree = 1;
+	if (offset == 0) /* reached root, set worktree to '/' */
+		offset = 1;
 	git_work_tree_cfg = xstrndup(cwd, offset);
 	if (check_repository_format_gently(nongit_ok))
 		return NULL;
-- 
1.7.0.rc0.54.gd33ef

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-02-09 12:27 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-09  7:16 [PATCH] Support working directory located at root Johannes Sixt
2010-02-09 12:27 ` Nguyen Thai Ngoc Duy
  -- strict thread matches above, loose matches on Subject: below --
2010-02-08 14:53 Nguyễn Thái Ngọc Duy
2010-02-08 17:43 ` Junio C Hamano
2010-02-09  2:18   ` Nguyen Thai Ngoc Duy
2010-02-09  2:49     ` Nguyen Thai Ngoc Duy
2010-02-08 21:29 ` Johannes Sixt

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).