author | Lars Hjemli <hjemli@gmail.com> | 2011-06-18 12:32:43 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2011-06-18 12:59:01 (UTC) |
commit | 9900ac022edfcfacee317d19a0f1d4d03b837b43 (patch) (unidiff) | |
tree | 414b80acb0f0d442e08c7e6b276822c7c662cd8b | |
parent | 46ca32e04319caf9dd65f9de47704d637547ad23 (diff) | |
download | cgit-9900ac022edfcfacee317d19a0f1d4d03b837b43.zip cgit-9900ac022edfcfacee317d19a0f1d4d03b837b43.tar.gz cgit-9900ac022edfcfacee317d19a0f1d4d03b837b43.tar.bz2 |
cgit.c: improve error message when git repo cannot be accessed
The current 'Not a git repository' error message is not very helpful,
since it doesn't state the cause of the problem.
This patch uses errno to provide a hint of the underlying problem. It
would have been even better to give the exact cause (e.g. for ENOENT it
would be nice to know which file/directory is missing), but that would
require reimplementing setup_git_directory_gently() which seems a bit
overkill.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -382,55 +382,59 @@ int find_current_ref(const char *refname, const unsigned char *sha1, | |||
382 | 382 | ||
383 | char *find_default_branch(struct cgit_repo *repo) | 383 | char *find_default_branch(struct cgit_repo *repo) |
384 | { | 384 | { |
385 | struct refmatch info; | 385 | struct refmatch info; |
386 | char *ref; | 386 | char *ref; |
387 | 387 | ||
388 | info.req_ref = repo->defbranch; | 388 | info.req_ref = repo->defbranch; |
389 | info.first_ref = NULL; | 389 | info.first_ref = NULL; |
390 | info.match = 0; | 390 | info.match = 0; |
391 | for_each_branch_ref(find_current_ref, &info); | 391 | for_each_branch_ref(find_current_ref, &info); |
392 | if (info.match) | 392 | if (info.match) |
393 | ref = info.req_ref; | 393 | ref = info.req_ref; |
394 | else | 394 | else |
395 | ref = info.first_ref; | 395 | ref = info.first_ref; |
396 | if (ref) | 396 | if (ref) |
397 | ref = xstrdup(ref); | 397 | ref = xstrdup(ref); |
398 | return ref; | 398 | return ref; |
399 | } | 399 | } |
400 | 400 | ||
401 | static int prepare_repo_cmd(struct cgit_context *ctx) | 401 | static int prepare_repo_cmd(struct cgit_context *ctx) |
402 | { | 402 | { |
403 | char *tmp; | 403 | char *tmp; |
404 | unsigned char sha1[20]; | 404 | unsigned char sha1[20]; |
405 | int nongit = 0; | 405 | int nongit = 0; |
406 | int rc; | ||
406 | 407 | ||
407 | setenv("GIT_DIR", ctx->repo->path, 1); | 408 | setenv("GIT_DIR", ctx->repo->path, 1); |
408 | setup_git_directory_gently(&nongit); | 409 | setup_git_directory_gently(&nongit); |
409 | if (nongit) { | 410 | if (nongit) { |
411 | rc = errno; | ||
410 | ctx->page.title = fmt("%s - %s", ctx->cfg.root_title, | 412 | ctx->page.title = fmt("%s - %s", ctx->cfg.root_title, |
411 | "config error"); | 413 | "config error"); |
412 | tmp = fmt("Not a git repository: '%s'", ctx->repo->path); | 414 | tmp = fmt("Failed to open %s: %s", |
415 | ctx->repo->name, | ||
416 | rc ? strerror(rc) : "Not a valid git repository"); | ||
413 | ctx->repo = NULL; | 417 | ctx->repo = NULL; |
414 | cgit_print_http_headers(ctx); | 418 | cgit_print_http_headers(ctx); |
415 | cgit_print_docstart(ctx); | 419 | cgit_print_docstart(ctx); |
416 | cgit_print_pageheader(ctx); | 420 | cgit_print_pageheader(ctx); |
417 | cgit_print_error(tmp); | 421 | cgit_print_error(tmp); |
418 | cgit_print_docend(); | 422 | cgit_print_docend(); |
419 | return 1; | 423 | return 1; |
420 | } | 424 | } |
421 | ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc); | 425 | ctx->page.title = fmt("%s - %s", ctx->repo->name, ctx->repo->desc); |
422 | 426 | ||
423 | if (!ctx->qry.head) { | 427 | if (!ctx->qry.head) { |
424 | ctx->qry.nohead = 1; | 428 | ctx->qry.nohead = 1; |
425 | ctx->qry.head = find_default_branch(ctx->repo); | 429 | ctx->qry.head = find_default_branch(ctx->repo); |
426 | ctx->repo->defbranch = ctx->qry.head; | 430 | ctx->repo->defbranch = ctx->qry.head; |
427 | } | 431 | } |
428 | 432 | ||
429 | if (!ctx->qry.head) { | 433 | if (!ctx->qry.head) { |
430 | cgit_print_http_headers(ctx); | 434 | cgit_print_http_headers(ctx); |
431 | cgit_print_docstart(ctx); | 435 | cgit_print_docstart(ctx); |
432 | cgit_print_pageheader(ctx); | 436 | cgit_print_pageheader(ctx); |
433 | cgit_print_error("Repository seems to be empty"); | 437 | cgit_print_error("Repository seems to be empty"); |
434 | cgit_print_docend(); | 438 | cgit_print_docend(); |
435 | return 1; | 439 | return 1; |
436 | } | 440 | } |