Sync with Git 2.20.1
authorJunio C Hamano <gitster@pobox.com>
Sat, 15 Dec 2018 04:00:25 +0000 (13:00 +0900)
committerJunio C Hamano <gitster@pobox.com>
Sat, 15 Dec 2018 04:00:25 +0000 (13:00 +0900)
* maint:
Git 2.20.1
.gitattributes: ensure t/oid-info/* has eol=lf
t9902: 'send-email' test case requires PERL
t4256: mark support files as LF-only
parse-options: fix SunCC compiler warning
help -a: handle aliases with long names gracefully
help.h: fix coding style
run-command: report exec failure

13 files changed:
.gitattributes
Documentation/RelNotes/2.20.1.txt [new file with mode: 0644]
builtin/blame.c
builtin/shortlog.c
builtin/update-index.c
help.c
help.h
parse-options.c
parse-options.h
run-command.c
t/.gitattributes
t/t0061-run-command.sh
t/t9902-completion.sh
index acf853e0299463a12212e9ed5f35d7f4a9d289af..9fa72ad4503031528e24e7c69f24ca92bcc99914 100644 (file)
@@ -9,6 +9,7 @@
 /command-list.txt eol=lf
 /GIT-VERSION-GEN eol=lf
 /mergetools/* eol=lf
+/t/oid-info/* eol=lf
 /Documentation/git-merge.txt conflict-marker-size=32
 /Documentation/gitk.txt conflict-marker-size=32
 /Documentation/user-manual.txt conflict-marker-size=32
diff --git a/Documentation/RelNotes/2.20.1.txt b/Documentation/RelNotes/2.20.1.txt
new file mode 100644 (file)
index 0000000..dcba888
--- /dev/null
@@ -0,0 +1,20 @@
+Git v2.20.1 Release Notes
+=========================
+
+This release is primarily to fix brown-paper-bag breakages in the
+2.20.0 release.
+
+Fixes since v2.20
+-----------------
+
+ * A few newly added tests were not portable and caused minority
+   platforms to report false breakages, which have been fixed.
+
+ * Portability fix for a recent update to parse-options API.
+
+ * "git help -a" did not work well when an overly long alias is
+   defined, which has been corrected.
+
+ * A recent update accidentally squelched an error message when the
+   run_command API failed to run a missing command, which has been
+   corrected.
index 06a7163ffe269cd43dc783c81ca6ac71b91b3614..6d798f99392e54b4392713846652111d457787bb 100644 (file)
@@ -850,6 +850,8 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
                case PARSE_OPT_HELP:
                case PARSE_OPT_ERROR:
                        exit(129);
+               case PARSE_OPT_COMPLETE:
+                       exit(0);
                case PARSE_OPT_DONE:
                        if (ctx.argv[0])
                                dashdash_pos = ctx.cpidx;
index 88f88e97b28c24f74aad6ec6cf1c637003f41a85..65cd41392c1c5e256313b10812a39bf4b848ce1b 100644 (file)
@@ -287,6 +287,8 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
                case PARSE_OPT_HELP:
                case PARSE_OPT_ERROR:
                        exit(129);
+               case PARSE_OPT_COMPLETE:
+                       exit(0);
                case PARSE_OPT_DONE:
                        goto parse_done;
                }
index 31e7cce3013a3b3f358834f24848fc73b67f8e8b..e19da77edcaa024cc2bffc6fa8818c2b1cf0d4b6 100644 (file)
@@ -1086,6 +1086,8 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
                case PARSE_OPT_HELP:
                case PARSE_OPT_ERROR:
                        exit(129);
+               case PARSE_OPT_COMPLETE:
+                       exit(0);
                case PARSE_OPT_NON_OPTION:
                case PARSE_OPT_DONE:
                {
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);
diff --git a/help.h b/help.h
index 9eab6a3f898f22630e628b0aed209fc79a273434..a141e209aea22b19f12c5e27435c5ed773488177 100644 (file)
--- a/help.h
+++ b/help.h
@@ -15,7 +15,7 @@ struct cmdnames {
 
 static inline void mput_char(char c, unsigned int num)
 {
-       while(num--)
+       while (num--)
                putchar(c);
 }
 
index 3b874a83a0c897845deeec37c1a3b85e0b625050..6932eaff6144bdf9fc8f430f149a73ade00f0d8b 100644 (file)
@@ -516,7 +516,7 @@ static int show_gitcomp(struct parse_opt_ctx_t *ctx,
        show_negated_gitcomp(original_opts, -1);
        show_negated_gitcomp(original_opts, nr_noopts);
        fputc('\n', stdout);
-       exit(0);
+       return PARSE_OPT_COMPLETE;
 }
 
 static int usage_with_options_internal(struct parse_opt_ctx_t *,
@@ -638,6 +638,8 @@ int parse_options(int argc, const char **argv, const char *prefix,
        case PARSE_OPT_HELP:
        case PARSE_OPT_ERROR:
                exit(129);
+       case PARSE_OPT_COMPLETE:
+               exit(0);
        case PARSE_OPT_NON_OPTION:
        case PARSE_OPT_DONE:
                break;
index 6c4fe2016d65f1093400f8f5080085eb244f0026..a650a7d220bd972b10b7e4a30119e9de3b8ba23a 100644 (file)
@@ -208,6 +208,7 @@ extern int opterror(const struct option *opt, const char *reason, int flags);
 /*----- incremental advanced APIs -----*/
 
 enum {
+       PARSE_OPT_COMPLETE = -2,
        PARSE_OPT_HELP = -1,
        PARSE_OPT_DONE,
        PARSE_OPT_NON_OPTION,
index c11ff8067481f70c444198bcc7477ef744d99fd3..3db26b7b0e2ab9b6b615387b36a2cd6b64800e9e 100644 (file)
@@ -728,6 +728,8 @@ int start_command(struct child_process *cmd)
        if (prepare_cmd(&argv, cmd) < 0) {
                failed_errno = errno;
                cmd->pid = -1;
+               if (!cmd->silent_exec_failure)
+                       error_errno("cannot run %s", cmd->argv[0]);
                goto end_of_spawn;
        }
 
index e7acedabe17f033d4205613c9af50152e5cec126..df05434d32cc1fa720d5408c26c22371d1f0e9e8 100644 (file)
@@ -16,6 +16,7 @@ t[0-9][0-9][0-9][0-9]/* -whitespace
 /t4135/* eol=lf
 /t4211/* eol=lf
 /t4252/* eol=lf
+/t4256/1/* eol=lf
 /t5100/* eol=lf
 /t5515/* eol=lf
 /t556x_common eol=lf
index cf932c851411e5abd992005de474cc095abecead..96bf6d6a7d0145334666fcd15373bad6ac66fd67 100755 (executable)
@@ -13,11 +13,13 @@ cat >hello-script <<-EOF
 EOF
 
 test_expect_success 'start_command reports ENOENT (slash)' '
-       test-tool run-command start-command-ENOENT ./does-not-exist
+       test-tool run-command start-command-ENOENT ./does-not-exist 2>err &&
+       test_i18ngrep "\./does-not-exist" err
 '
 
 test_expect_success 'start_command reports ENOENT (no slash)' '
-       test-tool run-command start-command-ENOENT does-not-exist
+       test-tool run-command start-command-ENOENT does-not-exist 2>err &&
+       test_i18ngrep "does-not-exist" err
 '
 
 test_expect_success 'run_command can run a command' '
@@ -33,7 +35,8 @@ test_expect_success 'run_command is restricted to PATH' '
        write_script should-not-run <<-\EOF &&
        echo yikes
        EOF
-       test_must_fail test-tool run-command run-command should-not-run
+       test_must_fail test-tool run-command run-command should-not-run 2>err &&
+       test_i18ngrep "should-not-run" err
 '
 
 test_expect_success !MINGW 'run_command can run a script without a #! line' '
index d01ad8eb2587ba32637d7ec8161811696a0aec34..137fdc9bd525bea9d6ccde256ee449ed389255c0 100755 (executable)
@@ -1539,7 +1539,7 @@ test_expect_success 'complete tree filename with metacharacters' '
        EOF
 '
 
-test_expect_success 'send-email' '
+test_expect_success PERL 'send-email' '
        test_completion "git send-email --cov" "--cover-letter " &&
        test_completion "git send-email ma" "master "
 '