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

Re: [PATCH v2 6/7] config: implement --fixed-value with --get*

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 23, 2020, 19:53 UTC
Message-ID
<xmqqwnybn92q.fsf@gitster.c.googlers.com>
In-Reply-To
<8e0111c7b4b2c766c61df30c4ae93bd2d724de06.1606147507.git.gitgitgadget@gmail.com>
"Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 7 quoted lines
> -	if (regex_) {
> +	if (regex_ && (flags & CONFIG_FLAGS_FIXED_VALUE))
> +		value_regex = regex_;
> +	else if (regex_) {
>  		if (regex_[0] == '!') {
>  			do_not_match = 1;
>  			regex_++;

When the --fixed-value option is in effect, there is no way to say "replace values that do not match this string", because unlike the regex case, we do not special case '!' at the beginning.

I think it is a good design decision. The special case has an escape hatch to start your value_regex with "[!]" when ERE is in use, but there is no such escape hatch possible with --fixed-value.

Depending on how this '!' negation is documented to the end-users for existing value_regex that is ERE, the documentation for the new option may want to talk about the lack of negation explicitly.

	... goes and looks ...

It is worse than I thought. Here is what "git config" description has (and some of the badness is not the fault of this series):

    Multiple lines can be added to an option by using the `--add` option.
    If you want to update or unset an option which can occur on multiple
    lines, a POSIX regexp `value_regex` needs to be given.  Only the
    existing values that match the regexp are updated or unset.  If
    you want to handle the lines that do *not* match the regex, just
    prepend a single exclamation mark in front (see also <<EXAMPLES>>).

The end-users these days no longer see "lines" because they do not hand edit .git/config, so we may need a replacement phrase to refer to a single "vari.able=value" setting, but we should leave it out of the scope of this series to clean that up---"git config --help" is full of references to "line".

It was not "a POSIX regexp" (which does not say if it is BRE or ERE), and it no longer is a regexp with the new option.

    ... which can occur on multiple lines, a pattern `value_regex`
    needs to be given.  Only the existing values that match the
    pattern are updated or unset.  The pattern is by default matched
    as an extended regular expression, but with the `--fixed-value`
    option, taken as a literal string and values must be identical
    to it to be considered a match.  You can prepend an exclamation
    point '!' to affect lines that do *not* match the pattern, but
    this is applicable only when not using the `--fixed-value`
    option.

Ideally we probably should do s/value_regex/value_pattern/ in the documentation and error messages eventually, but I do not know if it is warranted in the scope of this series.

Previous: Derrick Stolee via GitGitGadgetNext: Emily Shaffer
Message 51 of 72 in “config: add --literal-value option”
  1. 0/7 config: add --literal-value optionDerrick Stolee via GitGitGadget, Nov 19, 2020
  2. 1/7 t1300: test "set all" mode with value_regexDerrick Stolee via GitGitGadget, Nov 19, 2020
  3. Junio C HamanoNov 19, 2020
  4. brian m. carlsonNov 20, 2020
  5. Junio C HamanoNov 20, 2020
  6. Jeff KingNov 20, 2020
  7. Junio C HamanoNov 20, 2020
  8. brian m. carlsonNov 21, 2020
  9. Junio C HamanoNov 22, 2020
  10. Jeff KingNov 24, 2020
  11. Junio C HamanoNov 24, 2020
  12. 2/7 t1300: add test for --replace-all with value_regexDerrick Stolee via GitGitGadget, Nov 19, 2020
  13. 5/7 config: plumb --literal-value into config APIDerrick Stolee via GitGitGadget, Nov 19, 2020
  14. Junio C HamanoNov 19, 2020
  15. 4/7 config: add --literal-value option, un-implementedDerrick Stolee via GitGitGadget, Nov 19, 2020
  16. Junio C HamanoNov 19, 2020
  17. Martin ÅgrenNov 20, 2020
  18. 3/7 config: convert multi_replace to flagsDerrick Stolee via GitGitGadget, Nov 19, 2020
  19. Junio C HamanoNov 19, 2020
  20. 7/7 maintenance: use 'git config --literal-value'Derrick Stolee via GitGitGadget, Nov 19, 2020
  21. Junio C HamanoNov 19, 2020
  22. 6/7 config: implement --literal-value with --get*Derrick Stolee via GitGitGadget, Nov 19, 2020
  23. Ævar Arnfjörð BjarmasonNov 20, 2020
  24. Derrick StoleeNov 20, 2020
  25. Junio C HamanoNov 20, 2020
  26. Derrick StoleeNov 20, 2020
  27. Junio C HamanoNov 20, 2020
  28. Ævar Arnfjörð BjarmasonNov 24, 2020
  29. 0/7 config: add --fixed-value optionDerrick Stolee via GitGitGadget, Nov 23, 2020
  30. 1/7 t1300: test "set all" mode with value_regexDerrick Stolee via GitGitGadget, Nov 23, 2020
  31. Emily ShafferNov 23, 2020
  32. 2/7 t1300: add test for --replace-all with value_regexDerrick Stolee via GitGitGadget, Nov 23, 2020
  33. Emily ShafferNov 23, 2020
  34. 4/7 config: add --fixed-value option, un-implementedDerrick Stolee via GitGitGadget, Nov 23, 2020
  35. Junio C HamanoNov 23, 2020
  36. Emily ShafferNov 23, 2020
  37. Junio C HamanoNov 23, 2020
  38. Derrick StoleeNov 25, 2020
  39. Derrick StoleeNov 25, 2020
  40. Eric SunshineNov 25, 2020
  41. Junio C HamanoNov 25, 2020
  42. Junio C HamanoNov 25, 2020
  43. 3/7 config: convert multi_replace to flagsDerrick Stolee via GitGitGadget, Nov 23, 2020
  44. Emily ShafferNov 23, 2020
  45. 5/7 config: plumb --fixed-value into config APIDerrick Stolee via GitGitGadget, Nov 23, 2020
  46. Emily ShafferNov 23, 2020
  47. Eric SunshineNov 24, 2020
  48. Derrick StoleeNov 25, 2020
  49. Eric SunshineNov 25, 2020
  50. 6/7 config: implement --fixed-value with --get*Derrick Stolee via GitGitGadget, Nov 23, 2020
  51. Junio C HamanoNov 23, 2020
  52. Emily ShafferNov 23, 2020
  53. 7/7 maintenance: use 'git config --fixed-value'Derrick Stolee via GitGitGadget, Nov 23, 2020
  54. Junio C HamanoNov 23, 2020
  55. Emily ShafferNov 23, 2020
  56. Junio C HamanoNov 23, 2020
  57. Junio C HamanoNov 23, 2020
  58. 0/8 config: add --fixed-value optionDerrick Stolee via GitGitGadget, Nov 25, 2020
  59. 3/8 t1300: test "set all" mode with value-patternDerrick Stolee via GitGitGadget, Nov 25, 2020
  60. 4/8 t1300: add test for --replace-all with value-patternDerrick Stolee via GitGitGadget, Nov 25, 2020
  61. 6/8 config: plumb --fixed-value into config APIDerrick Stolee via GitGitGadget, Nov 25, 2020
  62. 8/8 maintenance: use 'git config --fixed-value'Derrick Stolee via GitGitGadget, Nov 25, 2020
  63. Junio C HamanoNov 25, 2020
  64. 5/8 config: add --fixed-value option, un-implementedDerrick Stolee via GitGitGadget, Nov 25, 2020
  65. Eric SunshineNov 25, 2020
  66. 2/8 config: replace 'value_regex' with 'value_pattern'Derrick Stolee via GitGitGadget, Nov 25, 2020
  67. Eric SunshineNov 25, 2020
  68. 1/8 config: convert multi_replace to flagsDerrick Stolee via GitGitGadget, Nov 25, 2020
  69. 7/8 config: implement --fixed-value with --get*Derrick Stolee via GitGitGadget, Nov 25, 2020
  70. Junio C HamanoNov 25, 2020
  71. Derrick StoleeNov 26, 2020
  72. Junio C HamanoDec 1, 2020

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.