Sync with Git 2.20.1
* 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 failuremaint
						commit
						b21ebb671b
					
				|  | @ -9,6 +9,7 @@ | ||||||
| /command-list.txt eol=lf | /command-list.txt eol=lf | ||||||
| /GIT-VERSION-GEN eol=lf | /GIT-VERSION-GEN eol=lf | ||||||
| /mergetools/* eol=lf | /mergetools/* eol=lf | ||||||
|  | /t/oid-info/* eol=lf | ||||||
| /Documentation/git-merge.txt conflict-marker-size=32 | /Documentation/git-merge.txt conflict-marker-size=32 | ||||||
| /Documentation/gitk.txt conflict-marker-size=32 | /Documentation/gitk.txt conflict-marker-size=32 | ||||||
| /Documentation/user-manual.txt conflict-marker-size=32 | /Documentation/user-manual.txt conflict-marker-size=32 | ||||||
|  |  | ||||||
|  | @ -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. | ||||||
|  | @ -850,6 +850,8 @@ int cmd_blame(int argc, const char **argv, const char *prefix) | ||||||
| 		case PARSE_OPT_HELP: | 		case PARSE_OPT_HELP: | ||||||
| 		case PARSE_OPT_ERROR: | 		case PARSE_OPT_ERROR: | ||||||
| 			exit(129); | 			exit(129); | ||||||
|  | 		case PARSE_OPT_COMPLETE: | ||||||
|  | 			exit(0); | ||||||
| 		case PARSE_OPT_DONE: | 		case PARSE_OPT_DONE: | ||||||
| 			if (ctx.argv[0]) | 			if (ctx.argv[0]) | ||||||
| 				dashdash_pos = ctx.cpidx; | 				dashdash_pos = ctx.cpidx; | ||||||
|  |  | ||||||
|  | @ -287,6 +287,8 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix) | ||||||
| 		case PARSE_OPT_HELP: | 		case PARSE_OPT_HELP: | ||||||
| 		case PARSE_OPT_ERROR: | 		case PARSE_OPT_ERROR: | ||||||
| 			exit(129); | 			exit(129); | ||||||
|  | 		case PARSE_OPT_COMPLETE: | ||||||
|  | 			exit(0); | ||||||
| 		case PARSE_OPT_DONE: | 		case PARSE_OPT_DONE: | ||||||
| 			goto parse_done; | 			goto parse_done; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -1086,6 +1086,8 @@ int cmd_update_index(int argc, const char **argv, const char *prefix) | ||||||
| 		case PARSE_OPT_HELP: | 		case PARSE_OPT_HELP: | ||||||
| 		case PARSE_OPT_ERROR: | 		case PARSE_OPT_ERROR: | ||||||
| 			exit(129); | 			exit(129); | ||||||
|  | 		case PARSE_OPT_COMPLETE: | ||||||
|  | 			exit(0); | ||||||
| 		case PARSE_OPT_NON_OPTION: | 		case PARSE_OPT_NON_OPTION: | ||||||
| 		case PARSE_OPT_DONE: | 		case PARSE_OPT_DONE: | ||||||
| 		{ | 		{ | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								help.c
								
								
								
								
							
							
						
						
									
										10
									
								
								help.c
								
								
								
								
							|  | @ -83,8 +83,9 @@ static void print_command_list(const struct cmdname_help *cmds, | ||||||
|  |  | ||||||
| 	for (i = 0; cmds[i].name; i++) { | 	for (i = 0; cmds[i].name; i++) { | ||||||
| 		if (cmds[i].category & mask) { | 		if (cmds[i].category & mask) { | ||||||
|  | 			size_t len = strlen(cmds[i].name); | ||||||
| 			printf("   %s   ", 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)); | 			puts(_(cmds[i].help)); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | @ -526,6 +527,13 @@ void list_all_cmds_help(void) | ||||||
|  |  | ||||||
| 	git_config(get_alias, &alias_list); | 	git_config(get_alias, &alias_list); | ||||||
| 	string_list_sort(&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) { | 	if (alias_list.nr) { | ||||||
| 		printf("\n%s\n", _("Command aliases")); | 		printf("\n%s\n", _("Command aliases")); | ||||||
| 		ALLOC_ARRAY(aliases, alias_list.nr + 1); | 		ALLOC_ARRAY(aliases, alias_list.nr + 1); | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								help.h
								
								
								
								
							
							
						
						
									
										2
									
								
								help.h
								
								
								
								
							|  | @ -15,7 +15,7 @@ struct cmdnames { | ||||||
|  |  | ||||||
| static inline void mput_char(char c, unsigned int num) | static inline void mput_char(char c, unsigned int num) | ||||||
| { | { | ||||||
| 	while(num--) | 	while (num--) | ||||||
| 		putchar(c); | 		putchar(c); | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -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, -1); | ||||||
| 	show_negated_gitcomp(original_opts, nr_noopts); | 	show_negated_gitcomp(original_opts, nr_noopts); | ||||||
| 	fputc('\n', stdout); | 	fputc('\n', stdout); | ||||||
| 	exit(0); | 	return PARSE_OPT_COMPLETE; | ||||||
| } | } | ||||||
|  |  | ||||||
| static int usage_with_options_internal(struct parse_opt_ctx_t *, | 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_HELP: | ||||||
| 	case PARSE_OPT_ERROR: | 	case PARSE_OPT_ERROR: | ||||||
| 		exit(129); | 		exit(129); | ||||||
|  | 	case PARSE_OPT_COMPLETE: | ||||||
|  | 		exit(0); | ||||||
| 	case PARSE_OPT_NON_OPTION: | 	case PARSE_OPT_NON_OPTION: | ||||||
| 	case PARSE_OPT_DONE: | 	case PARSE_OPT_DONE: | ||||||
| 		break; | 		break; | ||||||
|  |  | ||||||
|  | @ -208,6 +208,7 @@ extern int opterror(const struct option *opt, const char *reason, int flags); | ||||||
| /*----- incremental advanced APIs -----*/ | /*----- incremental advanced APIs -----*/ | ||||||
|  |  | ||||||
| enum { | enum { | ||||||
|  | 	PARSE_OPT_COMPLETE = -2, | ||||||
| 	PARSE_OPT_HELP = -1, | 	PARSE_OPT_HELP = -1, | ||||||
| 	PARSE_OPT_DONE, | 	PARSE_OPT_DONE, | ||||||
| 	PARSE_OPT_NON_OPTION, | 	PARSE_OPT_NON_OPTION, | ||||||
|  |  | ||||||
|  | @ -728,6 +728,8 @@ fail_pipe: | ||||||
| 	if (prepare_cmd(&argv, cmd) < 0) { | 	if (prepare_cmd(&argv, cmd) < 0) { | ||||||
| 		failed_errno = errno; | 		failed_errno = errno; | ||||||
| 		cmd->pid = -1; | 		cmd->pid = -1; | ||||||
|  | 		if (!cmd->silent_exec_failure) | ||||||
|  | 			error_errno("cannot run %s", cmd->argv[0]); | ||||||
| 		goto end_of_spawn; | 		goto end_of_spawn; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -16,6 +16,7 @@ t[0-9][0-9][0-9][0-9]/* -whitespace | ||||||
| /t4135/* eol=lf | /t4135/* eol=lf | ||||||
| /t4211/* eol=lf | /t4211/* eol=lf | ||||||
| /t4252/* eol=lf | /t4252/* eol=lf | ||||||
|  | /t4256/1/* eol=lf | ||||||
| /t5100/* eol=lf | /t5100/* eol=lf | ||||||
| /t5515/* eol=lf | /t5515/* eol=lf | ||||||
| /t556x_common eol=lf | /t556x_common eol=lf | ||||||
|  |  | ||||||
|  | @ -13,11 +13,13 @@ cat >hello-script <<-EOF | ||||||
| EOF | EOF | ||||||
|  |  | ||||||
| test_expect_success 'start_command reports ENOENT (slash)' ' | 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_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' ' | 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 && | 	write_script should-not-run <<-\EOF && | ||||||
| 	echo yikes | 	echo yikes | ||||||
| 	EOF | 	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' ' | test_expect_success !MINGW 'run_command can run a script without a #! line' ' | ||||||
|  |  | ||||||
|  | @ -1539,7 +1539,7 @@ test_expect_success 'complete tree filename with metacharacters' ' | ||||||
| 	EOF | 	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 --cov" "--cover-letter " && | ||||||
| 	test_completion "git send-email ma" "master " | 	test_completion "git send-email ma" "master " | ||||||
| ' | ' | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano