]> git.ipfire.org Git - thirdparty/git.git/commitdiff
help -a: handle aliases with long names gracefully
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Tue, 11 Dec 2018 14:58:11 +0000 (06:58 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 12 Dec 2018 08:18:38 +0000 (17:18 +0900)
We take pains to determine the longest command beforehand, so that we
can align the category column after printing the command names.

However, then we re-use that value when printing the aliases. If any
alias name is longer than the longest command name, we consequently try
to add a negative number of spaces (but `mput_char()` does not expect
any negative values and simply decrements until the value is 0, i.e.
it tries to add close to 2**31 spaces).

Let's fix this by adjusting the `longest` variable before printing the
aliases.

This fixes https://github.com/git-for-windows/git/issues/1975.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
help.c

diff --git a/help.c b/help.c
index 4745b322993e6a3c32fa4e2ab8adad9f159193c1..ff05fd22dff064f0f872434d20d4ea1eacded07d 100644 (file)
--- a/help.c
+++ b/help.c
@@ -83,8 +83,9 @@ static void print_command_list(const struct cmdname_help *cmds,
 
        for (i = 0; cmds[i].name; i++) {
                if (cmds[i].category & mask) {
+                       size_t len = strlen(cmds[i].name);
                        printf("   %s   ", cmds[i].name);
-                       mput_char(' ', longest - strlen(cmds[i].name));
+                       mput_char(' ', longest > len ? longest - len : 1);
                        puts(_(cmds[i].help));
                }
        }
@@ -526,6 +527,13 @@ void list_all_cmds_help(void)
 
        git_config(get_alias, &alias_list);
        string_list_sort(&alias_list);
+
+       for (i = 0; i < alias_list.nr; i++) {
+               size_t len = strlen(alias_list.items[i].string);
+               if (longest < len)
+                       longest = len;
+       }
+
        if (alias_list.nr) {
                printf("\n%s\n", _("Command aliases"));
                ALLOC_ARRAY(aliases, alias_list.nr + 1);