summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <johannes.schindelin@gmx.de>2018-12-11 14:58:11 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-12-12 08:18:38 (GMT)
commit1c4b985965a4c424e7e5ae4756e139c98183278d (patch)
tree4dd1bd0d3244f7f040af2a1341aa16bd89124a88
parent5acea87c3abfa5316fa27476c02e46eded8b26ae (diff)
downloadgit-1c4b985965a4c424e7e5ae4756e139c98183278d.zip
git-1c4b985965a4c424e7e5ae4756e139c98183278d.tar.gz
git-1c4b985965a4c424e7e5ae4756e139c98183278d.tar.bz2
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 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>
-rw-r--r--help.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/help.c b/help.c
index 4745b32..ff05fd2 100644
--- 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);