Re: Minor bug: git config ignores empty sections
- From
Jeff King <peff@peff.net>
- Date
- Aug 15, 2016, 12:09 UTC
- Message-ID
- <20160815120916.6iobqirqbg76exms@sigill.intra.peff.net>
- In-Reply-To
- <CALO-gutdz5VMgoRmbqEa9UiaTC+L2Sy2n-3AF+zfPr-X8+1U4A@mail.gmail.com>
On Sun, Aug 14, 2016 at 09:29:27PM -0400, Eli Barzilay wrote:
Show 17 quoted lines
> Looks like there's a problem with setting a config with an empty
> section, making it create a new section. The result is:
>
> $ git --version
> git version 2.9.2
> $ git init
> Initialized empty Git repository in /home/eli/t/.git/
> $ t() { git config x.y x; git config --unset x.y; }
> $ t;t;t
> $ grep -c '\[x\]' .git/config
> 3
> $ git config x.z x
> $ t;t;t
> $ git config x.z x # adds another [x], but leaves it populated
> $ t;t;t;t;t;t;t;t
> $ grep -c '\[x\]' .git/config
> 4Yep. This is a very old and well-known bug. IIRC, the problem is that config updates use the regular callback-parser, so they see only the config keys themselves. Empty section headers never trigger them. Fixing it would require rewriting the config-update code.
And implicit in your test is the other bug, which is that deleting the last key in a section leaves the empty header. I think it's related to the same issue.
Patches welcome, of course.
-Peff