git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 0/6] teach branch-specific options for format-patch

From
Junio C Hamano <gitster@pobox.com>
Date
May 17, 2019, 04:12 UTC
Message-ID
<xmqqk1ep3ejv.fsf@gitster-ct.c.googlers.com>
In-Reply-To
<cover.1558052674.git.liu.denton@gmail.com>
Denton Liu <liu.denton@gmail.com> writes:
Show 16 quoted lines
> diff --git a/Documentation/config/format.txt b/Documentation/config/format.txt
> index dc77941c48..d387451573 100644
> --- a/Documentation/config/format.txt
> +++ b/Documentation/config/format.txt
> @@ -28,14 +28,22 @@ format.headers::
>  
>  format.to::
>  format.cc::
> +format.<branch-name>.to::
> +format.<branch-name>.cc::
>  	Additional recipients to include in a patch to be submitted
> -	by mail.  See the --to and --cc options in
> -	linkgit:git-format-patch[1].
> +	by mail.  For the <branch-name> options, the recipients are only
> +	included if patches are generated for the given <branch-name>.
> +	See the --to and --cc options in linkgit:git-format-patch[1].
An obvious question that somebody else may raise is:
    What makes the branch name that special?  What guarantees that
    it would stay to be the *only* thing that affects the choice of
    these variables?

An obvious answer to that is "nothing---we are painting ourselves in a corner we cannot easily get out of with this design".

If we want to drive format-patch differently depending on the combination of the worktree location *and* the branch the patches are generated from, we can do something like:

	[includeif "gitdir:/path/to/worktree/1"] path = one.inc
	[includeif "gitdir:/path/to/worktree/2"] path = two.inc

and then have one.inc/two.inc have customized definition of these format.<branch>.{to,cc,...} variables.

But at that point, Ævar's "wouldn't this fit better with includeif" suggestion becomes more and more appropriate. Once we invent the way to combine the conditions for includeIf, it would benefit not just this set of variables but all others that will follow in the future.

Having said that, as long as we are fine with the plan to deprecate and remove these three-level variables this patch introdues in the future, I think it is OK to have them as a temporary stop-gap measure.

> +format.<branch-name>.coverSubject::
> +	When format-patch generates a cover letter for the given
> +	<branch-name>, use the specified subject for the cover letter
> +	instead of the generic template.

I still think it is a mistake that this has to be given separately and possibly redundantly from the branch description.

Show 5 quoted lines
> +static const char *branch_specific_config[] = {
> +	"branch",
> +	"format",
> +	NULL
> +};

Yuck. This will break a workflow where a fixed branch with a known configuration is deleted and recreated over and over again (e.g. think of "for-linus" branches used for request-pull in each merge window).

Show 13 quoted lines
>  static void delete_branch_config(const char *branchname)
>  {
>  	struct strbuf buf = STRBUF_INIT;
> -	strbuf_addf(&buf, "branch.%s", branchname);
> -	if (git_config_rename_section(buf.buf, NULL) < 0)
> -		warning(_("Update of config-file failed"));
> +	int i;
> +	for (i = 0; branch_specific_config[i]; i++) {
> +		strbuf_addf(&buf, "%s.%s", branch_specific_config[i], branchname);
> +		if (git_config_rename_section(buf.buf, NULL) < 0)
> +			warning(_("Update of config-file failed"));
> +		strbuf_reset(&buf);
> +	}

This will hardcode the unwarranted limitation that the second level of the format.*.var hierarchy MUST be branch names and nothing else, won't it?

Previous: Denton LiuNext: Denton Liu
Message 33 of 59 in “teach branch-specific options for format-patch”
  1. 0/7 teach branch-specific options for format-patchDenton Liu, May 5, 2019
  2. 1/7 t4014: clean up styleDenton Liu, May 5, 2019
  3. 2/7 Doc: add more detail for git-format-patchDenton Liu, May 5, 2019
  4. 3/7 branch.c: extract read_branch_config functionDenton Liu, May 5, 2019
  5. 4/7 format-patch: make cover letter subject configurableDenton Liu, May 5, 2019
  6. 5/7 format-patch: move extra_headers logic laterDenton Liu, May 5, 2019
  7. 6/7 string-list: create string_list_append_allDenton Liu, May 5, 2019
  8. 7/7 format-patch: read branch-specific To: and Cc: headersDenton Liu, May 5, 2019
  9. Junio C HamanoMay 7, 2019
  10. Denton LiuMay 7, 2019
  11. Junio C HamanoMay 7, 2019
  12. Denton LiuMay 7, 2019
  13. Ævar Arnfjörð BjarmasonMay 7, 2019
  14. Junio C HamanoMay 8, 2019
  15. config: learn the "onbranch:" includeIf conditionDenton Liu, May 31, 2019
  16. Johannes SchindelinMay 31, 2019
  17. Denton LiuMay 31, 2019
  18. Johannes SchindelinMay 31, 2019
  19. Denton LiuMay 31, 2019
  20. config: learn the "onbranch:" includeIf conditionDenton Liu, May 31, 2019
  21. Johannes SchindelinMay 31, 2019
  22. Johannes SchindelinJun 5, 2019
  23. Duy NguyenJun 5, 2019
  24. config: learn the "onbranch:" includeIf conditionDenton Liu, Jun 5, 2019
  25. Johannes SchindelinJun 6, 2019
  26. 0/6 teach branch-specific options for format-patchDenton Liu, May 17, 2019
  27. 1/6 t4014: clean up styleDenton Liu, May 17, 2019
  28. 2/6 Doc: add more detail for git-format-patchDenton Liu, May 17, 2019
  29. 3/6 format-patch: make cover letter subject configurableDenton Liu, May 17, 2019
  30. 4/6 format-patch: move extra_headers logic laterDenton Liu, May 17, 2019
  31. 5/6 string-list: create string_list_append_allDenton Liu, May 17, 2019
  32. 6/6 format-patch: read branch-specific To: and Cc: headersDenton Liu, May 17, 2019
  33. Junio C HamanoMay 17, 2019
  34. Denton LiuMay 17, 2019
  35. Denton LiuMay 17, 2019
  36. 0/8 teach branch-specific options for format-patchDenton Liu, May 22, 2019
  37. 1/8 t4014: clean up styleDenton Liu, May 22, 2019
  38. 2/8 Doc: add more detail for git-format-patchDenton Liu, May 22, 2019
  39. 3/8 format-patch: infer cover letter from branch descriptionDenton Liu, May 22, 2019
  40. 4/8 format-patch: move extra_headers logic laterDenton Liu, May 22, 2019
  41. 5/8 string-list: create string_list_append_allDenton Liu, May 22, 2019
  42. 6/8 format-patch: read branch-specific To: and Cc: headersDenton Liu, May 22, 2019
  43. 7/8 format-patch: move output_directory logic laterDenton Liu, May 22, 2019
  44. 8/8 format-patch: read branch-specific output directoryDenton Liu, May 22, 2019
  45. Denton LiuMay 31, 2019
  46. 0/8 teach branch-specific options for format-patchDenton Liu, Jun 14, 2019
  47. 1/8 t4014: clean up styleDenton Liu, Jun 14, 2019
  48. 2/8 Doc: add more detail for git-format-patchDenton Liu, Jun 14, 2019
  49. 3/8 format-patch: infer cover letter from branch descriptionDenton Liu, Jun 14, 2019
  50. 4/8 format-patch: move extra_headers logic laterDenton Liu, Jun 14, 2019
  51. 6/8 format-patch: read branch-specific To: and Cc: headersDenton Liu, Jun 14, 2019
  52. 5/8 string-list: create string_list_append_allDenton Liu, Jun 14, 2019
  53. 8/8 format-patch: read branch-specific output directoryDenton Liu, Jun 14, 2019
  54. 7/8 format-patch: move output_directory logic laterDenton Liu, Jun 14, 2019
  55. 0/3 format-patch: learn --infer-cover-subject option (also t4014 cleanup)Denton Liu, Oct 15, 2019
  56. 1/3 format-patch: replace erroneous and conditionDenton Liu, Oct 15, 2019
  57. 2/3 format-patch: use enum variablesDenton Liu, Oct 15, 2019
  58. 3/3 format-patch: teach --cover-from-description optionDenton Liu, Oct 15, 2019
  59. Junio C HamanoOct 16, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.