]> git.ipfire.org Git - thirdparty/git.git/commitdiff
config: add core.commentString
authorJeff King <peff@peff.net>
Wed, 27 Mar 2024 08:19:22 +0000 (04:19 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 Mar 2024 15:48:54 +0000 (08:48 -0700)
The core.commentChar code recently learned to accept more than a
single ASCII character. But using it is annoying with multiple versions
of Git, since older ones will reject it outright:

    $ git.v2.44.0 -c core.commentchar=foo stripspace -s
    error: core.commentChar should only be one ASCII character
    fatal: unable to parse 'core.commentchar' from command-line config

Let's add an alias core.commentString. That's arguably a better name
anyway, since we now can handle strings, and it makes it possible to
have a config that works reasonably with both old and new versions of
Git (see the example in the documentation).

This is strictly an alias, so there's not much point in adding duplicate
tests; I added a single one to t0030 that exercises the alias code.

Note also that the error messages for invalid values will now show the
variable the config parser handed us, and thus will be normalized to
lowercase (rather than camelcase). A few tests in t0030 are adjusted to
match.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/core.txt
config.c
t/t0030-stripspace.sh

index c86b8c84086aab96b2d15f4fcea2da6a7211f64f..bbe869c4975cdbacec09fc6616bbfba28a668b18 100644 (file)
@@ -520,15 +520,28 @@ core.editor::
        `GIT_EDITOR` is not set.  See linkgit:git-var[1].
 
 core.commentChar::
+core.commentString::
        Commands such as `commit` and `tag` that let you edit
        messages consider a line that begins with this character
        commented, and removes them after the editor returns
-       (default '#'). Note that this option can take values larger than
-       a byte (whether a single multi-byte character, or you
-       could even go wild with a multi-character sequence).
+       (default '#').
 +
 If set to "auto", `git-commit` would select a character that is not
 the beginning character of any line in existing commit messages.
++
+Note that these two variables are aliases of each other, and in modern
+versions of Git you are free to use a string (e.g., `//` or `⁑⁕⁑`) with
+`commentChar`. Versions of Git prior to v2.45.0 will ignore
+`commentString` but will reject a value of `commentChar` that consists
+of more than a single ASCII byte. If you plan to use your config with
+older and newer versions of Git, you may want to specify both:
++
+    [core]
+    # single character for older versions
+    commentChar = "#"
+    # string for newer versions (which will override commentChar
+    # because it comes later in the file)
+    commentString = "//"
 
 core.filesRefLockTimeout::
        The length of time, in milliseconds, to retry when trying to
index 92c752ed9fa2d076f74b609c1de575740cf40f05..d12e0f34f1308a294e8f0eba13d7cb7d7c0cb640 100644 (file)
--- a/config.c
+++ b/config.c
@@ -1560,18 +1560,19 @@ static int git_default_core_config(const char *var, const char *value,
        if (!strcmp(var, "core.editor"))
                return git_config_string(&editor_program, var, value);
 
-       if (!strcmp(var, "core.commentchar")) {
+       if (!strcmp(var, "core.commentchar") ||
+           !strcmp(var, "core.commentstring")) {
                if (!value)
                        return config_error_nonbool(var);
                else if (!strcasecmp(value, "auto"))
                        auto_comment_line_char = 1;
                else if (value[0]) {
                        if (strchr(value, '\n'))
-                               return error(_("core.commentChar cannot contain newline"));
+                               return error(_("%s cannot contain newline"), var);
                        comment_line_str = xstrdup(value);
                        auto_comment_line_char = 0;
                } else
-                       return error(_("core.commentChar must have at least one character"));
+                       return error(_("%s must have at least one character"), var);
                return 0;
        }
 
index a161faf702945e323a3e242ac62b71633b0f1836..f10f42ff1e4a8716609a1e8dd86e1441e020db3d 100755 (executable)
@@ -401,14 +401,19 @@ test_expect_success 'strip comments with changed comment char' '
        test -z "$(echo "; comment" | git -c core.commentchar=";" stripspace -s)"
 '
 
+test_expect_success 'strip comments with changed comment string' '
+       test ! -z "$(echo "// comment" | git -c core.commentchar=// stripspace)" &&
+       test -z "$(echo "// comment" | git -c core.commentchar="//" stripspace -s)"
+'
+
 test_expect_success 'newline as commentchar is forbidden' '
        test_must_fail git -c core.commentChar="$LF" stripspace -s 2>err &&
-       grep "core.commentChar cannot contain newline" err
+       grep "core.commentchar cannot contain newline" err
 '
 
 test_expect_success 'empty commentchar is forbidden' '
        test_must_fail git -c core.commentchar= stripspace -s 2>err &&
-       grep "core.commentChar must have at least one character" err
+       grep "core.commentchar must have at least one character" err
 '
 
 test_expect_success '-c with single line' '