Hi Junio, Thanks for the review. I made format.notes accept one (or more) refs now. Changes since v1: * Made format.notes accept a notes ref instead of a boolean Denton Liu (2): git-format-patch.txt: document --no-notes option format-patch: teach format.notes config option Documentation/config/format.txt | 13 ++++++ Documentation/git-format-patch.txt | 7 ++- builtin/log.c | 18 +++++++- t/t4014-format-patch.sh | 70 ++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 2 deletions(-) Range-diff against v1: 1: 48b6331d75 = 1: 4c3535f25b git-format-patch.txt: document --no-notes option 2: 1338045be4 ! 2: fe674bf63e format-patch: teach format.notes config option @@ -8,8 +8,9 @@ that they may forget to include it and generate a patch series without notes. - Teach git-format-patch the `format.notes` config option where if its - value is true, notes will automatically be appended. This option is + Teach git-format-patch the `format.notes` config option its value is a + notes ref that will be automatically be 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. @@ -24,8 +25,17 @@ format-patch by default. + +format.notes:: -+ A boolean value which lets you enable the `--notes` option of -+ format-patch by default. ++ A ref which specifies where to get the notes (see ++ linkgit:git-notes[1]) that are appended for the commit after the ++ three-dash line. +++ ++If the special value of "standard" is specified, then the standard notes ++ref is used (i.e. the notes ref used by `git notes` when no `--ref` ++argument is specified). If one wishes to use the ref ++`ref/notes/standard`, please use that literal instead. +++ ++This configuration can be specified multiple times in order to allow ++multiple notes refs to be included. diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt --- a/Documentation/git-format-patch.txt @@ -45,32 +55,45 @@ --- a/builtin/log.c +++ b/builtin/log.c @@ - static const char *signature_file; - static int config_cover_letter; - static const char *config_output_directory; -+static int show_notes; - enum { - COVER_UNSET, + 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")); @@ from = NULL; return 0; } + if (!strcmp(var, "format.notes")) { -+ show_notes = git_config_bool(var, value); ++ struct strbuf buf = STRBUF_INIT; ++ ++ rev->show_notes = 1; ++ if (!strcmp(value, "standard")) ++ rev->notes_opt.use_default_notes = 1; ++ else { ++ strbuf_addstr(&buf, value); ++ expand_notes_ref(&buf); ++ string_list_append(&rev->notes_opt.extra_notes_refs, ++ strbuf_detach(&buf, NULL)); ++ } + return 0; + } return git_log_config(var, value, cb); } @@ - rev.max_parents = 1; - rev.diffopt.flags.recursive = 1; - rev.subject_prefix = fmt_patch_subject_prefix; -+ rev.show_notes = show_notes; - memset(&s_r_opt, 0, sizeof(s_r_opt)); - s_r_opt.def = "HEAD"; - s_r_opt.revarg_opt = REVARG_COMMITTISH; + 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; diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh --- a/t/t4014-format-patch.sh @@ -94,7 +117,7 @@ + git format-patch -1 --stdout --no-notes --notes >out && + grep "notes config message" out && + -+ test_config format.notes true && ++ test_config format.notes standard && + git format-patch -1 --stdout >out && + grep "notes config message" out && + git format-patch -1 --stdout --notes >out && @@ -106,6 +129,48 @@ + 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 -- 2.21.0.1049.geb646f7864