Web lists-archives.com

Re: how exactly can git config section names contain periods?




On Fri, Jun 01, 2018 at 04:14:12PM -0400, Robert P. J. Day wrote:

>   more oddities in my travels, this from Doc.../config.txt:
> 
> "The file consists of sections and variables.  A section begins with
> the name of the section in square brackets and continues until the
> next section begins.  Section names are case-insensitive.  Only
> alphanumeric characters, `-` and `.` are allowed in section names.
>                                   ^ ?????
> 
>   what? how can section names contain periods? reading further,

I agree that seems like nonsense. Once we get to the first period, we
consider parts after that to be a subsection name, due to the
"flattened" form we use in various places (i.e., "section.key" or
"section.subsection.key").

Syntactically we do allow:

  [foo.bar]
  key = true

in the config file, which should equivalent to:

  [foo "bar"]
  key = true

This is mentioned later:

  There is also a deprecated [section.subsection] syntax. With this
  syntax, the subsection name is converted to lower-case and is also
  compared case sensitively. These subsection names follow the same
  restrictions as section names.

This has been deprecated since 2011. Maybe it's time to finally get rid
of it.

> "Sections can be further divided into subsections.  To begin a
> subsection put its name in double quotes, separated by space from the
> section name, in the section header, like in the example below:
> 
> --------
>         [section "subsection"]
> 
> 
>   ok, so how on earth would i use "git config" at the command line to
> set a config variable with some arbitrary level of subsections? let's
> try this:

You don't. There are only three levels: section, (optional) subsection,
and key. If there is a subsection, it consists of _everything_ between
the two outer periods.

>   $ git config --global a.b.c.d.e rday
> 
> huh ... seemed to work fine, and added this to my ~/.gitconfig:
> 
>   [a "b.c.d"]
>           e = rday
> 
> as i see it, the first component is intgerpreted as the section name,
> the last component is the variable/key(?) name, and everything in
> between is treated as subsection(s), which is not at all obvious from
> that Doc file, or from "man git-config".

Yep, your understanding is correct.

>   and if a section name can contain periods, how would you specify
> that at the command line?

You can't, because section names cannot contain periods. ;)

I agree that the docs you quoted are somewhere between misleading and
outright wrong. At the very least, we should remove the part about ".
allowed in section names". But I also think we could stand to make the
3-level mental model more explicit.

-Peff