Thread (97 messages) 97 messages, 9 authors, 2025-08-03

Re: [PATCH v2 06/13] builtin/config: introduce "list" subcommand

From: Eric Sunshine <hidden>
Date: 2024-03-13 02:46:08

On Mon, Mar 11, 2024 at 7:20 PM Patrick Steinhardt [off-list ref] wrote:
quoted hunk ↗ jump to hunk
[...]
Introduce the first such new subcommand, which is "git config list". To
retain backwards compatibility we only conditionally use subcommands and
will fall back to the old syntax in case no subcommand was detected.
This should help to transition to the new-style syntax until we
eventually deprecate and remove the old-style syntax.
[...]
Signed-off-by: Patrick Steinhardt <redacted>
---
diff --git a/builtin/config.c b/builtin/config.c
@@ -761,6 +811,22 @@ int cmd_config(int argc, const char **argv, const char *prefix)
+       /*
+        * This is somewhat hacky: we first parse the command line while
+        * keeping all args intact in order to determine whether a subcommand
+        * has been specified. If so, we re-parse it a second time, but this
+        * time we drop KEEP_ARGV0. This is so that we don't munge the command
+        * line in case no subcommand was given, which would otherwise confuse
+        * us when parsing the implicit modes.
+        */
+       argc = parse_options(argc, argv, prefix, builtin_subcommand_options, builtin_config_usage,
Upon reading this, I wasn't quite sure what "when parsing the implicit
modes" meant. I suppose it is referring to the legacy style command
invocation?
quoted hunk ↗ jump to hunk
diff --git a/t/t1300-config.sh b/t/t1300-config.sh
@@ -11,6 +11,21 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
+for mode in legacy subcommands
+do
+
+case "$mode" in
+legacy)
+       mode_prefix="--"
+       ;;
+subcommands)
+       mode_prefix=""
+       ;;
+*)
+       echo "unknown mode $mode" >&2
+       exit 1;;
+esac
t/test-lib.sh defines a BUG() function for signaling the sort of
programmer error handled by the "*" arm of this `case`.

An alternative simpler implementation, which wouldn't require any sort
of programmer-error fallback, would be:

    for mode_prefix in -- "" # legacy & subcommand modes
    do
        test_expect_success '...' '
            ...
        '
        ...
    done
quoted hunk ↗ jump to hunk
@@ -527,6 +542,7 @@ test_expect_success 'editing stdin is an error' '
 test_expect_success 'refer config from subdirectory' '
+       test_when_finished "rm -r x" &&
        mkdir x &&
        test_cmp_config -C x strasse --file=../other-config --get ein.bahn
 '
Is this an unrelated cleanup?
quoted hunk ↗ jump to hunk
@@ -1072,6 +1088,7 @@ test_expect_success 'inner whitespace kept verbatim' '
 test_expect_success SYMLINKS 'symlinked configuration' '
+       test_when_finished "rm myconfig" &&
        ln -s notyet myconfig &&
        git config --file=myconfig test.frotz nitfol &&
        test -h myconfig &&
Ditto.

Same question regarding similar changes to several later tests.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help