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:: | ||||
| 	A boolean value which lets you enable the `--base=auto` option of | ||||
| 	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 | ||||
| of the patch series (but see the discussion of the `notes.rewrite` | ||||
| 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>:: | ||||
| 	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) | ||||
| { | ||||
| 	struct rev_info *rev = cb; | ||||
|  | ||||
| 	if (!strcmp(var, "format.headers")) { | ||||
| 		if (!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; | ||||
| 		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); | ||||
| } | ||||
|  | @ -1617,8 +1635,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) | |||
| 	extra_to.strdup_strings = 1; | ||||
| 	extra_cc.strdup_strings = 1; | ||||
| 	init_log_defaults(); | ||||
| 	git_config(git_format_config, NULL); | ||||
| 	repo_init_revisions(the_repository, &rev, prefix); | ||||
| 	git_config(git_format_config, &rev); | ||||
| 	rev.commit_format = CMIT_FMT_EMAIL; | ||||
| 	rev.expand_tabs_in_log_default = 0; | ||||
| 	rev.verbose_header = 1; | ||||
|  |  | |||
|  | @ -738,6 +738,76 @@ test_expect_success 'format-patch --notes --signoff' ' | |||
| 	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-status does not make sense" > expect.name-status | ||||
| echo "fatal: --check does not make sense" > expect.check | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Denton Liu
						Denton Liu