Merge branch 'dl/format-patch-notes-config'

"git format-patch" learns a configuration to set the default for
its --notes=<ref> option.

* dl/format-patch-notes-config:
  format-patch: teach format.notes config option
  git-format-patch.txt: document --no-notes option
This commit is contained in:
Junio C Hamano 2019-06-13 13:19:42 -07:00
commit e91f65d0e2
4 changed files with 110 additions and 2 deletions

View file

@ -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.

View file

@ -22,7 +22,8 @@ SYNOPSIS
[--rfc] [--subject-prefix=Subject-Prefix] [--rfc] [--subject-prefix=Subject-Prefix]
[(--reroll-count|-v) <n>] [(--reroll-count|-v) <n>]
[--to=<email>] [--cc=<email>] [--to=<email>] [--cc=<email>]
[--[no-]cover-letter] [--quiet] [--notes[=<ref>]] [--[no-]cover-letter] [--quiet]
[--no-notes | --notes[=<ref>]]
[--interdiff=<previous>] [--interdiff=<previous>]
[--range-diff=<previous> [--creation-factor=<percent>]] [--range-diff=<previous> [--creation-factor=<percent>]]
[--progress] [--progress]
@ -263,6 +264,7 @@ material (this may change in the future).
for details. for details.
--notes[=<ref>]:: --notes[=<ref>]::
--no-notes::
Append the notes (see linkgit:git-notes[1]) for the commit Append the notes (see linkgit:git-notes[1]) for the commit
after the three-dash line. after the three-dash line.
+ +
@ -273,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

View file

@ -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;

View file

@ -757,6 +757,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