git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Jeff King <peff@peff.net>
To: Taylor Blau <me@ttaylorr.com>
Cc: git@vger.kernel.org, gitster@pobox.com, sunshine@sunshineco.com
Subject: Re: [PATCH v4 1/3] builtin/config: introduce `--default`
Date: Thu, 5 Apr 2018 18:29:49 -0400	[thread overview]
Message-ID: <20180405222949.GC29117@sigill.intra.peff.net> (raw)
In-Reply-To: <20180405025912.GB49902@syl.local>

On Wed, Apr 04, 2018 at 07:59:12PM -0700, Taylor Blau wrote:

> @@ -286,6 +288,16 @@ static int get_value(const char *key_, const char *regex_)
>  	config_with_options(collect_config, &values,
>  			    &given_config_source, &config_options);
>  
> +	if (!values.nr && default_value) {
> +		struct strbuf *item;
> +		ALLOC_GROW(values.items, values.nr + 1, values.alloc);
> +		item = &values.items[values.nr++];
> +		strbuf_init(item, 0);
> +		if (format_config(item, key_, default_value) < 0) {
> +			exit(1);
> +		}
> +	}

Calling exit() explicitly is unusual for our code. Usually we would
either die() or propagate the error. Most of the types in
format_config() would die on bogus input, but a few code paths will
return an error.

What happens if a non-default value has a bogus format? E.g.:

  $ git config foo.bar '~NoSuchUser'
  $ git config --path foo.bar
  fatal: failed to expand user dir in: '~NoSuchUser'

Oops. Despite us checking for an error return from
git_config_pathname(), it will always either return 0 or die(). So
that's not a good example. ;)

Let's try expiry-date:

  $ git config foo.bar 'the first of octember'
  $ git config --expiry-date foo.bar
  error: 'the first of octember' for 'foo.bar' is not a valid timestamp
  fatal: bad config line 7 in file .git/config

OK. So we call format_config() there from the actual collect_config()
callback, and the error gets propagated back to the config parser, which
then gives us an informative die(). What happens with your new code:

  $ ./git config --default 'the first of octember' --type=expiry-date no.such.key
  error: 'the first of octember' for 'no.such.key' is not a valid timestamp

It's obvious in this toy example, but that config call may be buried
deep in a script. It'd probably be nicer for that exit(1) to be
something like:

  die(_("failed to format default config value"));

> +test_expect_success 'does not allow --default without --get' '
> +	test_must_fail git config --default quux --unset a >output 2>&1 &&
> +	test_i18ngrep "\-\-default is only applicable to" output
> +'

I think "a" here needs to be "a.section". I get:

  error: key does not contain a section: a

-Peff

  reply	other threads:[~2018-04-05 22:29 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-06  2:17 [PATCH 0/4] Teach `--default` to `git-config(1)` Taylor Blau
2018-03-06  2:17 ` [PATCH 1/4] builtin/config: introduce `--default` Taylor Blau
2018-03-06  6:52   ` Jeff King
2018-03-06  7:14     ` Eric Sunshine
2018-03-06  7:08   ` Eric Sunshine
2018-03-06  2:17 ` [PATCH 2/4] Documentation: list all type specifiers in config prose Taylor Blau
2018-03-06  6:52   ` Jeff King
2018-03-06  7:40     ` Junio C Hamano
2018-03-06  2:17 ` [PATCH 3/4] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-03-06  6:53   ` Jeff King
2018-03-06  2:17 ` [PATCH 4/4] builtin/config: introduce `--color` type specifier Taylor Blau
2018-03-06  7:00   ` Jeff King
2018-03-06  2:20 ` [PATCH 0/4] Teach `--default` to `git-config(1)` Taylor Blau
2018-03-24  0:55 ` [PATCH v2 " Taylor Blau
2018-03-24  0:55   ` [PATCH v2 1/4] builtin/config: introduce `--default` Taylor Blau
2018-03-26  8:34     ` Jeff King
2018-03-29  1:31       ` Taylor Blau
2018-03-24  0:55   ` [PATCH v2 2/4] Documentation: list all type specifiers in config prose Taylor Blau
2018-03-26  8:55     ` Jeff King
2018-03-29  1:32       ` Taylor Blau
2018-03-24  0:55   ` [PATCH v2 3/4] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-03-24  0:55   ` [PATCH v2 4/4] builtin/config: introduce `--color` type specifier Taylor Blau
2018-03-26  9:16     ` Jeff King
2018-03-29  1:36       ` Taylor Blau
2018-03-26  9:18   ` [PATCH v2 0/4] Teach `--default` to `git-config(1)` Jeff King
2018-03-29  1:16   ` [PATCH v3 " Taylor Blau
2018-03-29  1:16     ` [PATCH v3 1/3] builtin/config: introduce `--default` Taylor Blau
2018-03-30 18:06       ` Junio C Hamano
2018-04-05  2:45         ` Taylor Blau
2018-03-30 20:23       ` Eric Sunshine
2018-04-05  2:46         ` Taylor Blau
2018-03-29  1:16     ` [PATCH v3 2/3] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-03-30 20:26       ` Eric Sunshine
2018-04-05  2:47         ` Taylor Blau
2018-03-29  1:16     ` [PATCH v3 3/3] builtin/config: introduce `color` type specifier Taylor Blau
2018-03-30 18:09       ` Junio C Hamano
2018-04-05  2:48         ` Taylor Blau
2018-03-29  1:29     ` [PATCH v3 0/4] Teach `--default` to `git-config(1)` Taylor Blau
2018-04-05  2:58     ` [PATCH v4 0/3] " Taylor Blau
2018-04-05 22:37       ` Jeff King
     [not found]     ` <cover.1522896713.git.me@ttaylorr.com>
2018-04-05  2:59       ` [PATCH v4 1/3] builtin/config: introduce `--default` Taylor Blau
2018-04-05 22:29         ` Jeff King [this message]
2018-04-06  5:40           ` Taylor Blau
2018-04-08 23:18           ` Junio C Hamano
2018-04-10  0:20             ` Taylor Blau
2018-04-05 22:40         ` Eric Sunshine
2018-04-06  5:50           ` Taylor Blau
2018-04-05  2:59       ` [PATCH v4 2/3] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-04-05  2:59       ` [PATCH v4 3/3] builtin/config: introduce `color` type specifier Taylor Blau
2018-04-05 22:36         ` Jeff King
2018-04-05 22:52           ` Eric Sunshine
2018-04-05 22:53             ` Jeff King
2018-04-06  6:05               ` Taylor Blau
2018-04-06  6:02           ` Taylor Blau
2018-04-06  5:27     ` [PATCH v5 0/2] *** SUBJECT HERE *** Taylor Blau
2018-04-06  5:40       ` Jacob Keller
2018-04-06  5:29     ` [PATCH v5 0/2] builtin/config.c: prefer `--type=bool` over `--bool`, etc Taylor Blau
2018-04-06  5:32       ` Taylor Blau
     [not found]     ` <cover.1522992443.git.me@ttaylorr.com>
2018-04-06  5:29       ` [PATCH v5 1/2] builtin/config.c: treat type specifiers singularly Taylor Blau
2018-04-06  5:29       ` [PATCH v5 2/2] builtin/config.c: prefer `--type=bool` over `--bool`, etc Taylor Blau
2018-04-06  6:14         ` Eric Sunshine
2018-04-06  6:41           ` Taylor Blau
2018-04-06 14:55           ` Jeff King
2018-04-07  1:00             ` Taylor Blau
2018-04-06  6:30 ` [PATCH v5 0/3] builtin/config: introduce `--default` Taylor Blau
     [not found] ` <cover.1522996150.git.me@ttaylorr.com>
2018-04-06  6:30   ` [PATCH v5 1/3] " Taylor Blau
2018-04-06  6:53     ` Eric Sunshine
2018-04-06  7:40       ` Eric Sunshine
2018-04-07  0:58         ` Taylor Blau
2018-04-07  8:44           ` Eric Sunshine
2018-04-07  0:49       ` Taylor Blau
2018-04-07  8:38         ` Eric Sunshine
2018-04-06  6:30   ` [PATCH v5 2/3] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-04-06  6:30   ` [PATCH v5 3/3] builtin/config: introduce `color` type specifier Taylor Blau
2018-04-06  7:29     ` Eric Sunshine
2018-04-07  0:42       ` Taylor Blau
2018-04-10  0:18 ` [PATCH v6 0/3] Teach `--default` to `git-config(1)` Taylor Blau
     [not found] ` <cover.1523319159.git.me@ttaylorr.com>
2018-04-10  0:18   ` [PATCH v6 1/3] builtin/config: introduce `--default` Taylor Blau
2018-04-10  1:50     ` Junio C Hamano
2018-04-10  0:18   ` [PATCH v6 2/3] config.c: introduce 'git_config_color' to parse ANSI colors Taylor Blau
2018-04-10  0:18   ` [PATCH v6 3/3] builtin/config: introduce `color` type specifier Taylor Blau
2018-04-10  0:18   ` Taylor Blau
2018-04-10  1:54     ` 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

  List information: http://vger.kernel.org/majordomo-info.html

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

  git send-email \
    --in-reply-to=20180405222949.GC29117@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=me@ttaylorr.com \
    --cc=sunshine@sunshineco.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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).