All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Matthieu Moy <Matthieu.Moy@imag.fr>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v2 1/3] config --global --edit: create a template file if needed
Date: Fri, 25 Jul 2014 12:05:42 -0700	[thread overview]
Message-ID: <xmqq1tt96yyh.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1406311207-8276-1-git-send-email-Matthieu.Moy@imag.fr> (Matthieu Moy's message of "Fri, 25 Jul 2014 20:00:05 +0200")

Matthieu Moy <Matthieu.Moy@imag.fr> writes:

> When the user has no ~/.gitconfig file, git config --global --edit used
> to launch an editor on an nonexistant file name.
>
> Instead, create a file with a default content before launching the
> editor. The template contains only commented-out entries, to save a few
> keystrokes for the user. If the values are guessed properly, the user
> will only have to uncomment the entries.
>
> Advanced users teaching newbies can create a minimalistic configuration
> faster for newbies. Beginners reading a tutorial advising to run "git
> config --global --edit" as a first step will be slightly more guided for
> their first contact with Git.
>
> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
> ---
> Hopefully, all remarks applied. I went for "Git's user configuration", but
> I can change it to whatever native speakers think is better.

I am not native but I have a slight worry that a template that lists
only core.{user,email} and marked as Git's "user configuration" will
easily mislead the reader that the file is only about these two
(i.e. I am telling the stupid Git who I am), and is not meant to
hold any other configuration that are private to the user.  I still
have funny feeling about "user-wide", but "Git's user configuration"
somehow smells worse for that reason.

What the patch attempts to do is a good idea and the code looks done
right.  Let's queue it and hope people can polish the wording.

Thanks.

>  builtin/config.c | 31 ++++++++++++++++++++++++++++---
>  cache.h          |  1 +
>  ident.c          |  2 +-
>  3 files changed, 30 insertions(+), 4 deletions(-)
>
> diff --git a/builtin/config.c b/builtin/config.c
> index fcd8474..1363478 100644
> --- a/builtin/config.c
> +++ b/builtin/config.c
> @@ -445,6 +445,20 @@ static int get_urlmatch(const char *var, const char *url)
>  	return 0;
>  }
>  
> +static char *default_user_config(void)
> +{
> +	struct strbuf buf = STRBUF_INIT;
> +	strbuf_addf(&buf,
> +		    _("# This is Git's user configuration file.\n"
> +		      "[core]\n"
> +		      "# Please adapt and uncomment the following lines:\n"
> +		      "#	user = %s\n"
> +		      "#	email = %s\n"),
> +		    ident_default_name(),
> +		    ident_default_email());
> +	return strbuf_detach(&buf, NULL);
> +}
> +
>  int cmd_config(int argc, const char **argv, const char *prefix)
>  {
>  	int nongit = !startup_info->have_repository;
> @@ -551,6 +565,8 @@ int cmd_config(int argc, const char **argv, const char *prefix)
>  		}
>  	}
>  	else if (actions == ACTION_EDIT) {
> +		const char *config_file = given_config_source.file ?
> +			given_config_source.file : git_path("config");
>  		check_argc(argc, 0, 0);
>  		if (!given_config_source.file && nongit)
>  			die("not in a git directory");
> @@ -559,9 +575,18 @@ int cmd_config(int argc, const char **argv, const char *prefix)
>  		if (given_config_source.blob)
>  			die("editing blobs is not supported");
>  		git_config(git_default_config, NULL);
> -		launch_editor(given_config_source.file ?
> -			      given_config_source.file : git_path("config"),
> -			      NULL, NULL);
> +		if (use_global_config) {
> +			int fd = open(config_file, O_CREAT | O_EXCL | O_WRONLY, 0666);
> +			if (fd) {
> +				char *content = default_user_config();
> +				write_str_in_full(fd, content);
> +				free(content);
> +				close(fd);
> +			}
> +			else if (errno != EEXIST)
> +				die_errno(_("cannot create configuration file %s"), config_file);
> +		}
> +		launch_editor(config_file, NULL, NULL);
>  	}
>  	else if (actions == ACTION_SET) {
>  		int ret;
> diff --git a/cache.h b/cache.h
> index fcb511d..b06cbb2 100644
> --- a/cache.h
> +++ b/cache.h
> @@ -1061,6 +1061,7 @@ extern const char *git_author_info(int);
>  extern const char *git_committer_info(int);
>  extern const char *fmt_ident(const char *name, const char *email, const char *date_str, int);
>  extern const char *fmt_name(const char *name, const char *email);
> +extern const char *ident_default_name(void);
>  extern const char *ident_default_email(void);
>  extern const char *git_editor(void);
>  extern const char *git_pager(int stdout_is_tty);
> diff --git a/ident.c b/ident.c
> index 1d9b6e7..77bc882 100644
> --- a/ident.c
> +++ b/ident.c
> @@ -102,7 +102,7 @@ static void copy_email(const struct passwd *pw, struct strbuf *email)
>  	add_domainname(email);
>  }
>  
> -static const char *ident_default_name(void)
> +const char *ident_default_name(void)
>  {
>  	if (!git_default_name.len) {
>  		copy_gecos(xgetpwuid_self(), &git_default_name);

  parent reply	other threads:[~2014-07-25 19:05 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-25 18:00 [PATCH v2 1/3] config --global --edit: create a template file if needed Matthieu Moy
2014-07-25 18:00 ` [PATCH v2 2/3] home_config_path: allow NULL xdg parameter Matthieu Moy
2014-07-25 19:09   ` Junio C Hamano
2014-07-25 18:00 ` [PATCH v2 3/3] commit: advertise config --global --edit on guessed identity Matthieu Moy
2014-07-25 19:05 ` Junio C Hamano [this message]
2014-07-25 19:11   ` [PATCH v3 1/3] config --global --edit: create a template file if needed Matthieu Moy
2014-07-25 19:11     ` [PATCH v3 2/3] home_config_paths(): let the caller ignore xdg path Matthieu Moy
2014-07-25 19:11     ` [PATCH v3 3/3] commit: advertise config --global --edit on guessed identity Matthieu Moy
2014-07-25 19:38       ` Junio C Hamano
2014-07-25 19:24     ` [PATCH v3 1/3] config --global --edit: create a template file if needed Junio C Hamano

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=xmqq1tt96yyh.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=Matthieu.Moy@imag.fr \
    --cc=git@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.