Hi all, Although 'config: learn the "onbranch:" includeIf condition'[1] seems to be on track for "next", the content in this patchset is not entirely superseded by it. Patches 1 and 2 should be relatively uncontroversial since they just do a bit of cleanup. Patch 3 is a new feature that isn't included in the config onbranch stuff at all. In introduces the `--infer-cover-subject` command-line option which would allow a cover-letter's subject to be automatically inferred from the branch's description. Finally, patches 4-8 are all needed to implement branch-specific format-patch options. Although this behaviour can be replicated by the config onbranch patches, it's not a direct replacement. Consider the following: $ git checkout foo $ git format-patch master..bar With config onbranch, this would generate patches using foo's settings but with this patchset, we would generate patches using bar's settings, which seems more desirable and intuitive for users. I suppose if adding a `format.<branch>.*` option is controversial since we won't be sure if we're adding other intermediate format keys, we could follow onbranch convention and use `format.forbranch:<branch>.*` as configuration keys instead. Thanks, Denton [1]: https://public-inbox.org/git/49e22269d5a66d1975fca71a300e9099f46e1c40.1559769658.git.liu.denton@xxxxxxxxx/ Changes since v2: * Replaced `format.<branch-name>.coverSubject` and `--cover-subject` with `format.inferCoverSubject` and `--infer-cover-subject` which reads the subject from the branch description * Do not let `git branch -d` delete `format.<branch-name>.*` configs * More documentation cleanup * Taught format-patch to read `format.<branch-name>.outputDirectory` as well Changes since v1: * Used format.<branch-name>.* variables instead of branch.<branch-name>.* Denton Liu (8): t4014: clean up style Doc: add more detail for git-format-patch format-patch: infer cover letter from branch description format-patch: move extra_headers logic later string-list: create string_list_append_all format-patch: read branch-specific To: and Cc: headers format-patch: move output_directory logic later format-patch: read branch-specific output directory Documentation/config/format.txt | 17 +- Documentation/git-format-patch.txt | 44 +- builtin/log.c | 237 ++++++--- string-list.c | 9 + string-list.h | 7 + t/t4014-format-patch.sh | 739 +++++++++++++++++------------ 6 files changed, 667 insertions(+), 386 deletions(-) Range-diff against v2: 1: 75474e18f4 = 1: 650f04bc04 t4014: clean up style 2: 9ae349bf8a ! 2: 14b40b1dec Doc: add more detail for git-format-patch @@ -9,7 +9,10 @@ In addition, document the special value of `--base=auto`. - Finally, while we're at it, surround option arguments with <>. + Next, while we're at it, surround option arguments with <>. + + Finally, document the `format.outputDirectory` config and change + `format.coverletter` to use camelcase. Signed-off-by: Denton Liu <liu.denton@xxxxxxxxx> @@ -67,3 +70,25 @@ --root:: Treat the revision argument as a <revision range>, even if it +@@ + ------------- + You can specify extra mail header lines to be added to each message, + defaults for the subject prefix and file suffix, number patches when +-outputting more than one patch, add "To" or "Cc:" headers, configure +-attachments, and sign off patches with configuration variables. ++outputting more than one patch, add "To:" or "Cc:" headers, configure ++attachments, change the patch output directory, and sign off patches ++with configuration variables. + + ------------ + [format] +@@ + cc = <email> + attach [ = mime-boundary-string ] + signOff = true +- coverletter = auto ++ outputDirectory = <directory> ++ coverLetter = auto + ------------ + + 3: c0403f5139 < -: ---------- format-patch: make cover letter subject configurable -: ---------- > 3: ca2b4c21c1 format-patch: infer cover letter from branch description 4: 534c6fd48a ! 4: 82a56a0d76 format-patch: move extra_headers logic later @@ -7,10 +7,10 @@ logic later in the function so that this happens. (This patch is best viewed with `git diff --color-moved`.) - Note that this logic only depends on the `git_config` and + Note that this logic only depends on `git_config` and `repo_init_revisions` and is depended on by the patch creation logic - which is directly below it so this move is effectively a no-op as - no dependencies being reordered. + which is directly below it so this move is effectively a no-op as no + dependencies being reordered. Signed-off-by: Denton Liu <liu.denton@xxxxxxxxx> 5: 491297c40a = 5: 3554164deb string-list: create string_list_append_all 6: e2c71fa593 ! 6: 6ad1b25858 format-patch: read branch-specific To: and Cc: headers @@ -59,29 +59,20 @@ far (from config or command line). @@ - ------------- - You can specify extra mail header lines to be added to each message, - defaults for the subject prefix and file suffix, number patches when --outputting more than one patch, add "To" or "Cc:" headers, configure -+outputting more than one patch, add "To:" or "Cc:" headers, configure - attachments, and sign off patches with configuration variables. - - ------------ -@@ + inferCoverSubject = true ------------ - In addition, for a specific branch, you can specify a custom cover --letter subject. ++In addition, for a specific branch, you can specify a custom cover +letter subject, and add additional "To:" or "Cc:" headers. - - ------------ - [format "branch-name"] - coverSubject = "subject for branch-name only" ++ ++------------ ++[format "branch-name"] + to = <email> + cc = <email> - ------------ ++------------ DISCUSSION + ---------- diff --git a/builtin/log.c b/builtin/log.c --- a/builtin/log.c @@ -96,7 +87,7 @@ static void add_header(const char *value) { @@ - return 0; + fprintf(rev->diffopt.file, "\n"); } +static void add_branch_headers(struct rev_info *rev, const char *branch_name) @@ -186,25 +177,6 @@ strbuf_addstr(&buf, extra_hdr.items[i].string); strbuf_addch(&buf, '\n'); - diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh - --- a/t/t3200-branch.sh - +++ b/t/t3200-branch.sh -@@ - - test_expect_success 'test deleting branch deletes branch config' ' - git config format.my7.coverSubject "cover subject" && -+ git config format.my7.to "To Me <to@xxxxxxxxxxx>" && -+ git config format.my7.cc "Cc Me <cc@xxxxxxxxxxx>" && - git branch -d my7 && - test -z "$(git config branch.my7.remote)" && - test -z "$(git config branch.my7.merge)" && - test -z "$(git config format.my7.coverSubject)" -+ test -z "$(git config format.my7.to)" && -+ test -z "$(git config format.my7.cc)" - ' - - test_expect_success 'test deleting branch without config' ' - diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh -: ---------- > 7: 3bc1b95a4e format-patch: move output_directory logic later -: ---------- > 8: 2cf7c77f59 format-patch: read branch-specific output directory -- 2.22.0.355.g3bfa262345