summary refs log tree commit diff
diff options
context:
space:
mode:
authorLars Hjemli <hjemli@gmail.com>2008-02-16 21:16:53 +0100
committerLars Hjemli <hjemli@gmail.com>2008-02-16 21:48:19 +0100
commitb88fb016d0209f7041ac7d3b4d2c077318407a4d (patch)
tree777e9cd042c3da9caaefe1f63363a52b56601521
parentd1f3bbe9d22029f45a77bb938c176ccc0c827d46 (diff)
Improve initialization of git directory
Using the functions offered by libgit feels like the right thing to do. Also,
make sure that config errors gets properly reported.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r--cgit.c17
-rw-r--r--ui-shared.c2
2 files changed, 9 insertions, 10 deletions
diff --git a/cgit.c b/cgit.c
index b270fdc..2c933dc 100644
--- a/cgit.c
+++ b/cgit.c
@@ -83,20 +83,23 @@ static void cgit_print_repo_page(struct cacheitem *item)
 	char *title, *tmp;
 	int show_search;
 	unsigned char sha1[20];
+	int nongit = 0;
 
-	if (chdir(ctx.repo->path)) {
-		title = fmt("%s - %s", ctx.cfg.root_title, "Bad request");
+	setenv("GIT_DIR", ctx.repo->path, 1);
+	setup_git_directory_gently(&nongit);
+	if (nongit) {
+		title = fmt("%s - %s", ctx.cfg.root_title, "config error");
+		tmp = fmt("Not a git repository: '%s'", ctx.repo->path);
+		ctx.repo = NULL;
 		cgit_print_docstart(title, item);
 		cgit_print_pageheader(title, 0);
-		cgit_print_error(fmt("Unable to scan repository: %s",
-				     strerror(errno)));
+		cgit_print_error(tmp);
 		cgit_print_docend();
 		return;
 	}
 
 	title = fmt("%s - %s", ctx.repo->name, ctx.repo->desc);
 	show_search = 0;
-	setenv("GIT_DIR", ctx.repo->path, 1);
 
 	if (!ctx.qry.head) {
 		ctx.qry.head = xstrdup(find_default_branch(ctx.repo));
@@ -179,10 +182,8 @@ static void cgit_print_repo_page(struct cacheitem *item)
 
 static void cgit_fill_cache(struct cacheitem *item, int use_cache)
 {
-	static char buf[PATH_MAX];
 	int stdout2;
 
-	getcwd(buf, sizeof(buf));
 	item->st.st_mtime = time(NULL);
 
 	if (use_cache) {
@@ -203,8 +204,6 @@ static void cgit_fill_cache(struct cacheitem *item, int use_cache)
 			     "Restoring original STDOUT");
 		chk_zero(close(stdout2), "Closing temporary STDOUT");
 	}
-
-	chdir(buf);
 }
 
 static void cgit_check_cache(struct cacheitem *item)
diff --git a/ui-shared.c b/ui-shared.c
index b9f487a..cc1ab8b 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -476,7 +476,7 @@ void cgit_print_pageheader(char *title, int show_search)
 	htmlf("'><img src='%s' alt='cgit'/></a>\n",
 	      ctx.cfg.logo);
 	html("</td></tr>\n<tr><td class='sidebar'>\n");
-	if (ctx.qry.repo) {
+	if (ctx.repo) {
 		html("<h1 class='first'>");
 		html_txt(strrpart(ctx.repo->name, 20));
 		html("</h1>\n");