aboutsummaryrefslogtreecommitdiffstats
path: root/cgit.c
diff options
context:
space:
mode:
Diffstat (limited to 'cgit.c')
-rw-r--r--cgit.c17
1 files changed, 8 insertions, 9 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)
83 char *title, *tmp; 83 char *title, *tmp;
84 int show_search; 84 int show_search;
85 unsigned char sha1[20]; 85 unsigned char sha1[20];
86 int nongit = 0;
86 87
87 if (chdir(ctx.repo->path)) { 88 setenv("GIT_DIR", ctx.repo->path, 1);
88 title = fmt("%s - %s", ctx.cfg.root_title, "Bad request"); 89 setup_git_directory_gently(&nongit);
90 if (nongit) {
91 title = fmt("%s - %s", ctx.cfg.root_title, "config error");
92 tmp = fmt("Not a git repository: '%s'", ctx.repo->path);
93 ctx.repo = NULL;
89 cgit_print_docstart(title, item); 94 cgit_print_docstart(title, item);
90 cgit_print_pageheader(title, 0); 95 cgit_print_pageheader(title, 0);
91 cgit_print_error(fmt("Unable to scan repository: %s", 96 cgit_print_error(tmp);
92 strerror(errno)));
93 cgit_print_docend(); 97 cgit_print_docend();
94 return; 98 return;
95 } 99 }
96 100
97 title = fmt("%s - %s", ctx.repo->name, ctx.repo->desc); 101 title = fmt("%s - %s", ctx.repo->name, ctx.repo->desc);
98 show_search = 0; 102 show_search = 0;
99 setenv("GIT_DIR", ctx.repo->path, 1);
100 103
101 if (!ctx.qry.head) { 104 if (!ctx.qry.head) {
102 ctx.qry.head = xstrdup(find_default_branch(ctx.repo)); 105 ctx.qry.head = xstrdup(find_default_branch(ctx.repo));
@@ -179,10 +182,8 @@ static void cgit_print_repo_page(struct cacheitem *item)
179 182
180static void cgit_fill_cache(struct cacheitem *item, int use_cache) 183static void cgit_fill_cache(struct cacheitem *item, int use_cache)
181{ 184{
182 static char buf[PATH_MAX];
183 int stdout2; 185 int stdout2;
184 186
185 getcwd(buf, sizeof(buf));
186 item->st.st_mtime = time(NULL); 187 item->st.st_mtime = time(NULL);
187 188
188 if (use_cache) { 189 if (use_cache) {
@@ -203,8 +204,6 @@ static void cgit_fill_cache(struct cacheitem *item, int use_cache)
203 "Restoring original STDOUT"); 204 "Restoring original STDOUT");
204 chk_zero(close(stdout2), "Closing temporary STDOUT"); 205 chk_zero(close(stdout2), "Closing temporary STDOUT");
205 } 206 }
206
207 chdir(buf);
208} 207}
209 208
210static void cgit_check_cache(struct cacheitem *item) 209static void cgit_check_cache(struct cacheitem *item)