diff options
Diffstat (limited to 'cgit.c')
-rw-r--r-- | cgit.c | 24 |
1 files changed, 24 insertions, 0 deletions
@@ -459,12 +459,36 @@ static char *guess_defbranch(void) | |||
459 | 459 | ||
460 | static int prepare_repo_cmd(struct cgit_context *ctx) | 460 | static int prepare_repo_cmd(struct cgit_context *ctx) |
461 | { | 461 | { |
462 | char *user_home; | ||
463 | char *xdg_home; | ||
462 | unsigned char sha1[20]; | 464 | unsigned char sha1[20]; |
463 | int nongit = 0; | 465 | int nongit = 0; |
464 | int rc; | 466 | int rc; |
465 | 467 | ||
468 | /* The path to the git repository. */ | ||
466 | setenv("GIT_DIR", ctx->repo->path, 1); | 469 | setenv("GIT_DIR", ctx->repo->path, 1); |
470 | |||
471 | /* Do not look in /etc/ for gitconfig and gitattributes. */ | ||
472 | setenv("GIT_CONFIG_NOSYSTEM", "1", 1); | ||
473 | setenv("GIT_ATTR_NOSYSTEM", "1", 1); | ||
474 | |||
475 | /* We unset HOME and XDG_CONFIG_HOME before calling the git setup function | ||
476 | * so that we don't make unneccessary filesystem accesses. */ | ||
477 | user_home = getenv("HOME"); | ||
478 | xdg_home = getenv("XDG_CONFIG_HOME"); | ||
479 | unsetenv("HOME"); | ||
480 | unsetenv("XDG_CONFIG_HOME"); | ||
481 | |||
482 | /* Setup the git directory and initialize the notes system. Both of these | ||
483 | * load local configuration from the git repository, so we do them both while | ||
484 | * the HOME variables are unset. */ | ||
467 | setup_git_directory_gently(&nongit); | 485 | setup_git_directory_gently(&nongit); |
486 | init_display_notes(NULL); | ||
487 | |||
488 | /* We restore the unset variables afterward. */ | ||
489 | setenv("HOME", user_home, 1); | ||
490 | setenv("XDG_CONFIG_HOME", xdg_home, 1); | ||
491 | |||
468 | if (nongit) { | 492 | if (nongit) { |
469 | const char *name = ctx->repo->name; | 493 | const char *name = ctx->repo->name; |
470 | rc = errno; | 494 | rc = errno; |