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

Re: [PATCH] config: fix case sensitive subsection names on writing

From
Jeff King <peff@peff.net>
Date
Jul 28, 2018, 10:53 UTC
Message-ID
<20180728105351.GA13283@sigill.intra.peff.net>
In-Reply-To
<CAGZ79ka2yRv5+EaBoHx_TWdM1Qgt9F7YZiW=X35MyOehfcdQBg@mail.gmail.com>
On Fri, Jul 27, 2018 at 08:52:59PM -0700, Stefan Beller wrote:
Show 24 quoted lines
> > > +     for key in "v.a.r" "V.A.r" "v.A.r" "V.a.r"
> > > +     do
> > > +             cp testConfig testConfig_actual &&
> > > +             git config -f testConfig_actual v.a.r value2 &&
> > > +             test_cmp testConfig_expect testConfig_actual
> > > +     done
> > > +'
> >
> > I think you meant to use "$key" when setting the variable to value2.
> >
> > When the test_cmp fails with "v.a.r" but later succeeds and most
> > importantly succeeds with "V.a.r" (i.e. the last one), wouldn't the
> > whole thing suceed?  I think the common trick people use is to end
> > the last one with "|| return 1" in a loop inside test_expect_success.
> 
> Hah, of course this patch is not as easy.
> 
> The problem is in git_parse_source (config.c, line 755) when we call
> get_base_var it normalizes both styles, (and lower cases the dot style).
> 
> So in case of dot style, the strncasecmp is correct, but for the new
> extended style we need to strncmp.
> 
> So this is correct for extended but not any more for the former dot style.

Hmm, it looks like this has always been broken. Before your patch (but after v2.18.0), running "git config v.A.r value2" writes:

  [V.A]
  r = value1
  r = value2

which is obviously broken (we decided it was the right section, but didn't match the variables, leading to a weird duplicate). After your patch we write:

  [V.A]
  r = value1
  [v "A"]
  r = value2

I.e., we do not consider them the same value at all. But that's actually what happened before v2.18, too. I think you could almost justify that behavior as "The section.subsection syntax is deprecated, so we match it case-insensitively on reading but not on writing; since we never write such sections ourselves, you are on your own for modifying such entries if you choose to write them manually".

I dunno. Maybe that is too harsh. But this syntax has been deprecated for 7 years, and nobody has noticed the bug until now (when _still_ nobody wants to use it, but rather we're poking at it as "gee, I wonder if this even works").

> I wonder if we want to either (a) add another CONFIG_EVENT_SECTION
> that indicates the difference between the two, or have a flag in 'cf' that
> tells us what kind of section style we have, such that we can check
> appropriately for the case.

I'd think that the parse_event_data could carry type-specific information. But...

> Or we could encode it in the 'cf->var' value to distinguish the old
> and new style.

Even if we fix the section-matching here, I suspect that would just trigger a separate bug later when we match the full key (so we might add to the correct section, but we would not correctly replace an existing key). To fix that, the information does need to be carried for the whole lifetime of cf->var, not just during the header event.

-Peff
Previous: Stefan BellerNext: Junio C Hamano
Message 9 of 33 in “config: fix case sensitive subsection names on writing”
  1. config: fix case sensitive subsection names on writingStefan Beller, Jul 27, 2018
  2. Brandon WilliamsJul 27, 2018
  3. Junio C HamanoJul 27, 2018
  4. Stefan BellerJul 27, 2018
  5. config: fix case sensitive subsection names on writingStefan Beller, Jul 27, 2018
  6. Stefan BellerJul 27, 2018
  7. Junio C HamanoJul 28, 2018
  8. Stefan BellerJul 28, 2018
  9. Jeff KingJul 28, 2018
  10. Junio C HamanoJul 28, 2018
  11. Johannes SchindelinJul 30, 2018
  12. 0/3 config: fix case sensitive subsection names on writingStefan Beller, Jul 30, 2018
  13. 1/3 t1300: document current behavior of setting optionsStefan Beller, Jul 30, 2018
  14. 2/3 config: fix case sensitive subsection names on writingStefan Beller, Jul 30, 2018
  15. Junio C HamanoJul 31, 2018
  16. 3/3 config: treat section case insensitive in store_aux_eventStefan Beller, Jul 30, 2018
  17. Junio C HamanoJul 31, 2018
  18. 0/3 sb/config-write-fix done without robbing PeterStefan Beller, Aug 1, 2018
  19. 1/3 t1300: document current behavior of setting optionsStefan Beller, Aug 1, 2018
  20. 2/3 config: fix case sensitive subsection names on writingStefan Beller, Aug 1, 2018
  21. Ramsay JonesAug 1, 2018
  22. Junio C HamanoAug 1, 2018
  23. Junio C HamanoAug 1, 2018
  24. Stefan BellerAug 3, 2018
  25. Junio C HamanoAug 3, 2018
  26. 3/3 git-config: document accidental multi-line setting in deprecated syntaxStefan Beller, Aug 1, 2018
  27. Eric SunshineAug 1, 2018
  28. Junio C HamanoAug 2, 2018
  29. 0/3 Reroll of sb/config-write-fixStefan Beller, Aug 3, 2018
  30. 1/3 t1300: document current behavior of setting optionsStefan Beller, Aug 3, 2018
  31. 2/3 config: fix case sensitive subsection names on writingStefan Beller, Aug 3, 2018
  32. 3/3 git-config: document accidental multi-line setting in deprecated syntaxStefan Beller, Aug 3, 2018
  33. Junio C HamanoJul 27, 2018

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.