format-patch: teach format.notes config option
In git-format-patch, notes can be appended with the `--notes` option. However, this must be specified by the user on an invocation-by-invocation basis. If a user is not careful, it's possible that they may forget to include it and generate a patch series without notes. Teach git-format-patch the `format.notes` config option. Its value is a notes ref that will be automatically appended. The special value of "standard" can be used to specify the standard notes. This option is overridable with the `--no-notes` option in case a user wishes not to append notes. Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									83d9db7893
								
							
						
					
					
						commit
						13cdf78094
					
				|  | @ -85,3 +85,18 @@ format.outputDirectory:: | ||||||
| format.useAutoBase:: | format.useAutoBase:: | ||||||
| 	A boolean value which lets you enable the `--base=auto` option of | 	A boolean value which lets you enable the `--base=auto` option of | ||||||
| 	format-patch by default. | 	format-patch by default. | ||||||
|  |  | ||||||
|  | format.notes:: | ||||||
|  | 	Provides the default value for the `--notes` option to | ||||||
|  | 	format-patch. Accepts a boolean value, or a ref which specifies | ||||||
|  | 	where to get notes. If false, format-patch defaults to | ||||||
|  | 	`--no-notes`. If true, format-patch defaults to `--notes`. If | ||||||
|  | 	set to a non-boolean value, format-patch defaults to | ||||||
|  | 	`--notes=<ref>`, where `ref` is the non-boolean value. Defaults | ||||||
|  | 	to false. | ||||||
|  | + | ||||||
|  | If one wishes to use the ref `ref/notes/true`, please use that literal | ||||||
|  | instead. | ||||||
|  | + | ||||||
|  | This configuration can be specified multiple times in order to allow | ||||||
|  | multiple notes refs to be included. | ||||||
|  |  | ||||||
|  | @ -275,6 +275,9 @@ these explanations after `format-patch` has run but before sending, | ||||||
| keeping them as Git notes allows them to be maintained between versions | keeping them as Git notes allows them to be maintained between versions | ||||||
| of the patch series (but see the discussion of the `notes.rewrite` | of the patch series (but see the discussion of the `notes.rewrite` | ||||||
| configuration options in linkgit:git-notes[1] to use this workflow). | configuration options in linkgit:git-notes[1] to use this workflow). | ||||||
|  | + | ||||||
|  | The default is `--no-notes`, unless the `format.notes` configuration is | ||||||
|  | set. | ||||||
|  |  | ||||||
| --[no-]signature=<signature>:: | --[no-]signature=<signature>:: | ||||||
| 	Add a signature to each message produced. Per RFC 3676 the signature | 	Add a signature to each message produced. Per RFC 3676 the signature | ||||||
|  |  | ||||||
|  | @ -779,6 +779,8 @@ enum { | ||||||
|  |  | ||||||
| static int git_format_config(const char *var, const char *value, void *cb) | static int git_format_config(const char *var, const char *value, void *cb) | ||||||
| { | { | ||||||
|  | 	struct rev_info *rev = cb; | ||||||
|  |  | ||||||
| 	if (!strcmp(var, "format.headers")) { | 	if (!strcmp(var, "format.headers")) { | ||||||
| 		if (!value) | 		if (!value) | ||||||
| 			die(_("format.headers without value")); | 			die(_("format.headers without value")); | ||||||
|  | @ -864,6 +866,22 @@ static int git_format_config(const char *var, const char *value, void *cb) | ||||||
| 			from = NULL; | 			from = NULL; | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
|  | 	if (!strcmp(var, "format.notes")) { | ||||||
|  | 		struct strbuf buf = STRBUF_INIT; | ||||||
|  | 		int b = git_parse_maybe_bool(value); | ||||||
|  | 		if (!b) | ||||||
|  | 			return 0; | ||||||
|  | 		rev->show_notes = 1; | ||||||
|  | 		if (b < 0) { | ||||||
|  | 			strbuf_addstr(&buf, value); | ||||||
|  | 			expand_notes_ref(&buf); | ||||||
|  | 			string_list_append(&rev->notes_opt.extra_notes_refs, | ||||||
|  | 					strbuf_detach(&buf, NULL)); | ||||||
|  | 		} else { | ||||||
|  | 			rev->notes_opt.use_default_notes = 1; | ||||||
|  | 		} | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	return git_log_config(var, value, cb); | 	return git_log_config(var, value, cb); | ||||||
| } | } | ||||||
|  | @ -1617,8 +1635,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) | ||||||
| 	extra_to.strdup_strings = 1; | 	extra_to.strdup_strings = 1; | ||||||
| 	extra_cc.strdup_strings = 1; | 	extra_cc.strdup_strings = 1; | ||||||
| 	init_log_defaults(); | 	init_log_defaults(); | ||||||
| 	git_config(git_format_config, NULL); |  | ||||||
| 	repo_init_revisions(the_repository, &rev, prefix); | 	repo_init_revisions(the_repository, &rev, prefix); | ||||||
|  | 	git_config(git_format_config, &rev); | ||||||
| 	rev.commit_format = CMIT_FMT_EMAIL; | 	rev.commit_format = CMIT_FMT_EMAIL; | ||||||
| 	rev.expand_tabs_in_log_default = 0; | 	rev.expand_tabs_in_log_default = 0; | ||||||
| 	rev.verbose_header = 1; | 	rev.verbose_header = 1; | ||||||
|  |  | ||||||
|  | @ -738,6 +738,76 @@ test_expect_success 'format-patch --notes --signoff' ' | ||||||
| 	sed "1,/^---$/d" out | grep "test message" | 	sed "1,/^---$/d" out | grep "test message" | ||||||
| ' | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'format-patch notes output control' ' | ||||||
|  | 	git notes add -m "notes config message" HEAD && | ||||||
|  | 	test_when_finished git notes remove HEAD && | ||||||
|  |  | ||||||
|  | 	git format-patch -1 --stdout >out && | ||||||
|  | 	! grep "notes config message" out && | ||||||
|  | 	git format-patch -1 --stdout --notes >out && | ||||||
|  | 	grep "notes config message" out && | ||||||
|  | 	git format-patch -1 --stdout --no-notes >out && | ||||||
|  | 	! grep "notes config message" out && | ||||||
|  | 	git format-patch -1 --stdout --notes --no-notes >out && | ||||||
|  | 	! grep "notes config message" out && | ||||||
|  | 	git format-patch -1 --stdout --no-notes --notes >out && | ||||||
|  | 	grep "notes config message" out && | ||||||
|  |  | ||||||
|  | 	test_config format.notes true && | ||||||
|  | 	git format-patch -1 --stdout >out && | ||||||
|  | 	grep "notes config message" out && | ||||||
|  | 	git format-patch -1 --stdout --notes >out && | ||||||
|  | 	grep "notes config message" out && | ||||||
|  | 	git format-patch -1 --stdout --no-notes >out && | ||||||
|  | 	! grep "notes config message" out && | ||||||
|  | 	git format-patch -1 --stdout --notes --no-notes >out && | ||||||
|  | 	! grep "notes config message" out && | ||||||
|  | 	git format-patch -1 --stdout --no-notes --notes >out && | ||||||
|  | 	grep "notes config message" out | ||||||
|  | ' | ||||||
|  |  | ||||||
|  | test_expect_success 'format-patch with multiple notes refs' ' | ||||||
|  | 	git notes --ref note1 add -m "this is note 1" HEAD && | ||||||
|  | 	test_when_finished git notes --ref note1 remove HEAD && | ||||||
|  | 	git notes --ref note2 add -m "this is note 2" HEAD && | ||||||
|  | 	test_when_finished git notes --ref note2 remove HEAD && | ||||||
|  |  | ||||||
|  | 	git format-patch -1 --stdout >out && | ||||||
|  | 	! grep "this is note 1" out && | ||||||
|  | 	! grep "this is note 2" out && | ||||||
|  | 	git format-patch -1 --stdout --notes=note1 >out && | ||||||
|  | 	grep "this is note 1" out && | ||||||
|  | 	! grep "this is note 2" out && | ||||||
|  | 	git format-patch -1 --stdout --notes=note2 >out && | ||||||
|  | 	! grep "this is note 1" out && | ||||||
|  | 	grep "this is note 2" out && | ||||||
|  | 	git format-patch -1 --stdout --notes=note1 --notes=note2 >out && | ||||||
|  | 	grep "this is note 1" out && | ||||||
|  | 	grep "this is note 2" out && | ||||||
|  |  | ||||||
|  | 	test_config format.notes note1 && | ||||||
|  | 	git format-patch -1 --stdout >out && | ||||||
|  | 	grep "this is note 1" out && | ||||||
|  | 	! grep "this is note 2" out && | ||||||
|  | 	git format-patch -1 --stdout --no-notes >out && | ||||||
|  | 	! grep "this is note 1" out && | ||||||
|  | 	! grep "this is note 2" out && | ||||||
|  | 	git format-patch -1 --stdout --notes=note2 >out && | ||||||
|  | 	grep "this is note 1" out && | ||||||
|  | 	grep "this is note 2" out && | ||||||
|  | 	git format-patch -1 --stdout --no-notes --notes=note2 >out && | ||||||
|  | 	! grep "this is note 1" out && | ||||||
|  | 	grep "this is note 2" out && | ||||||
|  |  | ||||||
|  | 	git config --add format.notes note2 && | ||||||
|  | 	git format-patch -1 --stdout >out && | ||||||
|  | 	grep "this is note 1" out && | ||||||
|  | 	grep "this is note 2" out && | ||||||
|  | 	git format-patch -1 --stdout --no-notes >out && | ||||||
|  | 	! grep "this is note 1" out && | ||||||
|  | 	! grep "this is note 2" out | ||||||
|  | ' | ||||||
|  |  | ||||||
| echo "fatal: --name-only does not make sense" > expect.name-only | echo "fatal: --name-only does not make sense" > expect.name-only | ||||||
| echo "fatal: --name-status does not make sense" > expect.name-status | echo "fatal: --name-status does not make sense" > expect.name-status | ||||||
| echo "fatal: --check does not make sense" > expect.check | echo "fatal: --check does not make sense" > expect.check | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Denton Liu
						Denton Liu