List for cgit developers and users
 help / color / mirror / Atom feed
From: john at keeping.me.uk (John Keeping)
Subject: [PATCH] Do not load user or system gitconfig and gitattributes
Date: Mon, 8 Apr 2013 20:44:37 +0100	[thread overview]
Message-ID: <20130408194437.GC2222@serenity.lan> (raw)
In-Reply-To: <1365449611-21670-1-git-send-email-Jason@zx2c4.com>

On Mon, Apr 08, 2013 at 09:33:31PM +0200, Jason A. Donenfeld wrote:
> From: "Jason A. Donenfeld" <Jason at zx2c4.com>
> 
> While doing any kind of git loading, unset HOME variables and set
> NOSYSTEM variables so that cgit does not load any settings that a user
> may have set for his own /usr/bin/git usage.
> 
> This fixes a fatal error introduced with git 1.8, whereupon git would
> fatally exit when failing to access particular files.
> 
> Reported-by: Ferry Huberts <ferry.huberts at pelagic.nl>
> Tested-by: Jason A. Donenfeld <Jason at zx2c4.com>
> Tested-by: Ferry Huberts <ferry.huberts at pelagic.nl>
> Signed-off-by: Jason A. Donenfeld <Jason at zx2c4.com>
> ---

Looks sensible, but I don't think it's quite guaranteed to do what you
want, since Git can call git_config at any time and it re-reads the
files whenever it does.  We may not be doing anything that causes it to
be reparsed now, but will we notice if that changes?

Is there any reason not to leave $HOME and $XDG_CONFIG_HOME unset?

Another (very) minor point:

    /*
     * Git prefers to format multi-line comments
     * like this.
     */

I don't know how closely you think CGit should stick to that style
though.

[patch left unsnipped for reference]

> diff --git a/cgit.c b/cgit.c
> index f73c7b0..0bf8972 100644
> --- a/cgit.c
> +++ b/cgit.c
> @@ -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, &notes, PAGE_ENCODING, 0);
>  
>  	load_ref_decorations(DECORATE_FULL_REFS);
> diff --git a/ui-log.c b/ui-log.c
> index 93af0ce..2aa12c3 100644
> --- a/ui-log.c
> +++ b/ui-log.c
> @@ -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);
> -- 
> 1.8.1.5
> 
> 
> _______________________________________________
> cgit mailing list
> cgit at hjemli.net
> http://hjemli.net/mailman/listinfo/cgit




  parent reply	other threads:[~2013-04-08 19:44 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-04-08 19:33 Jason
2013-04-08 19:37 ` mailings
2013-04-08 19:42   ` Jason
2013-04-08 19:44 ` john [this message]
2013-04-08 19:50   ` Jason

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130408194437.GC2222@serenity.lan \
    --to=cgit@lists.zx2c4.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).