Skip to content

Commit 1c4b985

Browse files
dschogitster
authored andcommitted
help -a: handle aliases with long names gracefully
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 git-for-windows#1975. Signed-off-by: Johannes Schindelin <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5acea87 commit 1c4b985

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

help.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,9 @@ static void print_command_list(const struct cmdname_help *cmds,
8383

8484
for (i = 0; cmds[i].name; i++) {
8585
if (cmds[i].category & mask) {
86+
size_t len = strlen(cmds[i].name);
8687
printf(" %s ", cmds[i].name);
87-
mput_char(' ', longest - strlen(cmds[i].name));
88+
mput_char(' ', longest > len ? longest - len : 1);
8889
puts(_(cmds[i].help));
8990
}
9091
}
@@ -526,6 +527,13 @@ void list_all_cmds_help(void)
526527

527528
git_config(get_alias, &alias_list);
528529
string_list_sort(&alias_list);
530+
531+
for (i = 0; i < alias_list.nr; i++) {
532+
size_t len = strlen(alias_list.items[i].string);
533+
if (longest < len)
534+
longest = len;
535+
}
536+
529537
if (alias_list.nr) {
530538
printf("\n%s\n", _("Command aliases"));
531539
ALLOC_ARRAY(aliases, alias_list.nr + 1);

0 commit comments

Comments
 (0)