git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git-config: Parse config files leniently

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Aug 17, 2009, 18:47 UTC
Message-ID
<4A89A5B8.9040405@drmicha.warpmail.net>
In-Reply-To
<7veirejhqq.fsf@alter.siamese.dyndns.org>
Junio C Hamano venit, vidit, dixit 14.08.2009 21:52:
Show 11 quoted lines
> Michael J Gruber <git@drmicha.warpmail.net> writes:
> 
>> Currently, git config dies as soon as there is a parsing error. This is
>> especially unfortunate in case a user tries to correct config mistakes
>> using git config -e.
>>
>> Instead, issue a warning only and treat the rest of the line as a
>> comment (ignore it). This benefits not only git config -e users.
> 
> ... a broken sentence in the middle?  I would have expected the "not only"
> followed by "but also"; the question is "but also what?"
I don't see any broken sentence here. "Benefit" is a verb as well as a noun.

"not only git config -e users" but also everyone else: Unparseable lines are ignored, the rest is parsed.

> 
> Hopefully the benefit is not that it now allows all the other commands to
> cause unspecified types of damage to the repository by following iffy
> settings obtained from a broken configuration file.

The only possible problem that I see is when a section heading is not parsed because of a forgotten "[", say, and the following settings are put in the wrong section because of that.

Show 14 quoted lines
>> Reported-by: David Reitter <david.reitter@gmail.com>
>> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
> 
>> Test had to be adjusted as well.
> 
> The change to the test demonstrates the issue rather well.  The check()
> shell function does not check the exit value from "git config --get", but
> in a real script that cares to check and stop on error, this change will
> now let the script go on, leaving the breakage unnoticed.  I suspect
> command implemented in C, that call git_config(), will also have the same
> issue, and I cannot convince myself this is a good change in general,
> outside the scope of helping "git config -e".
> 
> But I may be being overly cautious.

My first version had the lenient mode for "git config -e" only, which required a new global int (or, alternatively, changing all callers).

One could issue a warning and return -1 rather than success. I'm afraid git_config() callers don't check return values but rely on git_config() dieing in case there are parsing problems.

> 
> By the way, why did you have to change s/echo/printf/?  Can't you give two
> lines in a single argument without "\n" escape?

Because "printf" is more portable then "echo -e". At least I hope so ;) [ One could use a "here document", of course. Is that preferable? ]

Michael
Previous: Junio C HamanoNext: Junio C Hamano
Message 7 of 14 in “git config -> "fatal: bad config file"”
  1. David ReitterAug 14, 2009
  2. Michael J GruberAug 14, 2009
  3. David ReitterAug 14, 2009
  4. Jakub NarebskiAug 14, 2009
  5. git-config: Parse config files lenientlyMichael J Gruber, Aug 14, 2009
  6. Junio C HamanoAug 14, 2009
  7. Michael J GruberAug 17, 2009
  8. Junio C HamanoAug 17, 2009
  9. [PATCHv2] git-config: Parse config files lenientlyMichael J Gruber, Sep 2, 2009
  10. Junio C HamanoSep 3, 2009
  11. Michael J GruberSep 3, 2009
  12. Junio C HamanoSep 3, 2009
  13. Michael J GruberSep 4, 2009
  14. Junio C HamanoSep 4, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.