diff options
| -rw-r--r-- | cgit.c | 24 | ||||
| -rw-r--r-- | ui-commit.c | 1 | ||||
| -rw-r--r-- | ui-log.c | 1 | 
3 files changed, 24 insertions, 2 deletions
| @@ -459,12 +459,36 @@ static char *guess_defbranch(void)  static int prepare_repo_cmd(struct cgit_context *ctx)  { +	char *user_home; +	char *xdg_home;  	unsigned char sha1[20];  	int nongit = 0;  	int rc; +	/* The path to the git repository. */  	setenv("GIT_DIR", ctx->repo->path, 1); + +	/* Do not look in /etc/ for gitconfig and gitattributes. */ +	setenv("GIT_CONFIG_NOSYSTEM", "1", 1); +	setenv("GIT_ATTR_NOSYSTEM", "1", 1); + +	/* We unset HOME and XDG_CONFIG_HOME before calling the git setup function +	 * so that we don't make unneccessary filesystem accesses. */ +	user_home = getenv("HOME"); +	xdg_home = getenv("XDG_CONFIG_HOME"); +	unsetenv("HOME"); +	unsetenv("XDG_CONFIG_HOME"); + +	/* Setup the git directory and initialize the notes system. Both of these +	 * load local configuration from the git repository, so we do them both while +	 * the HOME variables are unset. */  	setup_git_directory_gently(&nongit); +	init_display_notes(NULL); + +	/* We restore the unset variables afterward. */ +	setenv("HOME", user_home, 1); +	setenv("XDG_CONFIG_HOME", xdg_home, 1); +  	if (nongit) {  		const char *name = ctx->repo->name;  		rc = errno; diff --git a/ui-commit.c b/ui-commit.c index 6b41017..a5a6ea8 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -37,7 +37,6 @@ void cgit_print_commit(char *hex, const char *prefix)  	}  	info = cgit_parse_commit(commit); -	init_display_notes(NULL);  	format_display_notes(sha1, ¬es, PAGE_ENCODING, 0);  	load_ref_decorations(DECORATE_FULL_REFS); @@ -403,7 +403,6 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern  		commit->parents = NULL;  	} -	init_display_notes(NULL);  	for (i = 0; i < cnt && (commit = get_revision(&rev)) != NULL; i++) {  		print_commit(commit, &rev);  		free(commit->buffer); | 
