]> git.ipfire.org Git - thirdparty/git.git/commitdiff
help: use list_aliases() for alias listing
authorJonatan Holmgren <jonatan@jontes.page>
Wed, 18 Feb 2026 21:57:34 +0000 (22:57 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 19 Feb 2026 18:13:20 +0000 (10:13 -0800)
help.c has its own get_alias() config callback that duplicates the
parsing logic in alias.c. Consolidate by teaching list_aliases() to
also store the alias values (via the string_list util field), then
use it in list_all_cmds_help_aliases() instead of the private
callback.

This preserves the existing error checking for value-less alias
definitions by checking in alias.c rather than help.c.

No functional change intended.

Signed-off-by: Jonatan Holmgren <jonatan@jontes.page>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
alias.c
help.c
t/t0014-alias.sh

diff --git a/alias.c b/alias.c
index 1a1a141a0aebbb6b00e976f83def4a5694fd06c3..271acb9bf1755f5c3d492d4f02a770833d74ecee 100644 (file)
--- a/alias.c
+++ b/alias.c
@@ -29,7 +29,13 @@ static int config_alias_cb(const char *key, const char *value,
                                                 key, value);
                }
        } else if (data->list) {
-               string_list_append(data->list, p);
+               struct string_list_item *item;
+
+               if (!value)
+                       return config_error_nonbool(key);
+
+               item = string_list_append(data->list, p);
+               item->util = xstrdup(value);
        }
 
        return 0;
diff --git a/help.c b/help.c
index 3c36d9c218f82477022920bc6fb7c48e9aae2780..84b9e5efe46e175f26173d7979811476916dd7f3 100644 (file)
--- a/help.c
+++ b/help.c
@@ -20,6 +20,7 @@
 #include "prompt.h"
 #include "fsmonitor-ipc.h"
 #include "repository.h"
+#include "alias.h"
 
 #ifndef NO_CURL
 #include "git-curl-compat.h" /* For LIBCURL_VERSION only */
@@ -469,20 +470,6 @@ void list_developer_interfaces_help(void)
        putchar('\n');
 }
 
-static int get_alias(const char *var, const char *value,
-                    const struct config_context *ctx UNUSED, void *data)
-{
-       struct string_list *list = data;
-
-       if (skip_prefix(var, "alias.", &var)) {
-               if (!value)
-                       return config_error_nonbool(var);
-               string_list_append(list, var)->util = xstrdup(value);
-       }
-
-       return 0;
-}
-
 static void list_all_cmds_help_external_commands(void)
 {
        struct string_list others = STRING_LIST_INIT_DUP;
@@ -502,7 +489,7 @@ static void list_all_cmds_help_aliases(int longest)
        struct cmdname_help *aliases;
        int i;
 
-       repo_config(the_repository, get_alias, &alias_list);
+       list_aliases(&alias_list);
        string_list_sort(&alias_list);
 
        for (i = 0; i < alias_list.nr; i++) {
index 07a53e7366ef4bd3548d20a681f3bf42c5ca7546..a13d2be8caf1f84453f6372303115800c7cc2cd4 100755 (executable)
@@ -112,4 +112,14 @@ test_expect_success 'cannot alias-shadow a sample of regular builtins' '
        done
 '
 
+test_expect_success 'alias without value reports error' '
+       test_when_finished "git config --unset alias.noval" &&
+       cat >>.git/config <<-\EOF &&
+       [alias]
+               noval
+       EOF
+       test_must_fail git noval 2>error &&
+       test_grep "alias.noval" error
+'
+
 test_done