trailer: add tests to check defaulting behavior with --no-* flags

While the "--no-where" flag is tested, the "--no-if-exists" and
"--no-if-missing" flags are not, so add tests for them. But also add
tests for all "--no-*" flags to check their effects, both when (1) there
are relevant configuration variables set, and (2) they are not set.

Signed-off-by: Linus Arver <linusa@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Linus Arver 2023-09-07 22:19:59 +00:00 committed by Junio C Hamano
parent e670ba2500
commit 73574f21b4
2 changed files with 140 additions and 4 deletions

View file

@ -114,8 +114,10 @@ OPTIONS
Specify where all new trailers will be added. A setting
provided with '--where' overrides all configuration variables
and applies to all '--trailer' options until the next occurrence of
'--where' or '--no-where'. Possible values are `after`, `before`,
`end` or `start`.
'--where' or '--no-where'. Upon encountering '--no-where', clear the
effect of any previous use of '--where', such that the relevant configuration
variables are no longer overridden. Possible values are `after`,
`before`, `end` or `start`.
--if-exists <action>::
--no-if-exists::
@ -123,7 +125,9 @@ OPTIONS
least one trailer with the same <token> in the input. A setting
provided with '--if-exists' overrides all configuration variables
and applies to all '--trailer' options until the next occurrence of
'--if-exists' or '--no-if-exists'. Possible actions are `addIfDifferent`,
'--if-exists' or '--no-if-exists'. Upon encountering '--no-if-exists, clear the
effect of any previous use of '--if-exists, such that the relevant configuration
variables are no longer overridden. Possible actions are `addIfDifferent`,
`addIfDifferentNeighbor`, `add`, `replace` and `doNothing`.
--if-missing <action>::
@ -132,7 +136,9 @@ OPTIONS
trailer with the same <token> in the input. A setting
provided with '--if-missing' overrides all configuration variables
and applies to all '--trailer' options until the next occurrence of
'--if-missing' or '--no-if-missing'. Possible actions are `doNothing`
'--if-missing' or '--no-if-missing'. Upon encountering '--no-if-missing,
clear the effect of any previous use of '--if-missing, such that the relevant
configuration variables are no longer overridden. Possible actions are `doNothing`
or `add`.
--only-trailers::

View file

@ -812,6 +812,53 @@ test_expect_success 'using "--where after" with "--no-where"' '
test_cmp expected actual
'
# Check whether using "--no-where" clears out only the "--where after", such
# that we still use the configuration in trailer.where (which is different from
# the hardcoded default (in WHERE_END) assuming the absence of .gitconfig).
# Here, the "start" setting of trailer.where is respected, so the new "Acked-by"
# and "Bug" trailers are placed at the beginning, and not at the end which is
# the harcoded default.
test_expect_success 'using "--where after" with "--no-where" defaults to configuration' '
test_config trailer.ack.key "Acked-by= " &&
test_config trailer.bug.key "Bug #" &&
test_config trailer.separators ":=#" &&
test_config trailer.where "start" &&
cat complex_message_body >expected &&
sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
Bug #42
Acked-by= Peff
Fixes: Z
Acked-by= Z
Reviewed-by: Z
Signed-off-by: Z
EOF
git interpret-trailers --where after --no-where --trailer "ack: Peff" \
--trailer "bug: 42" complex_message >actual &&
test_cmp expected actual
'
# The "--where after" will only get respected for the trailer that came
# immediately after it. For the next trailer (Bug #42), we default to using the
# hardcoded WHERE_END because we don't have any "trailer.where" or
# "trailer.bug.where" configured.
test_expect_success 'using "--no-where" defaults to harcoded default if nothing configured' '
test_config trailer.ack.key "Acked-by= " &&
test_config trailer.bug.key "Bug #" &&
test_config trailer.separators ":=#" &&
cat complex_message_body >expected &&
sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
Fixes: Z
Acked-by= Z
Acked-by= Peff
Reviewed-by: Z
Signed-off-by: Z
Bug #42
EOF
git interpret-trailers --where after --trailer "ack: Peff" --no-where \
--trailer "bug: 42" complex_message >actual &&
test_cmp expected actual
'
test_expect_success 'using "where = after"' '
test_config trailer.ack.key "Acked-by= " &&
test_config trailer.ack.where "after" &&
@ -1176,6 +1223,56 @@ test_expect_success 'overriding configuration with "--if-exists replace"' '
test_cmp expected actual
'
# "trailer.ifexists" is set to "doNothing", so using "--no-if-exists" defaults
# to this "doNothing" behavior. So the "Fixes: 53" trailer does not get added.
test_expect_success 'using "--if-exists replace" with "--no-if-exists" defaults to configuration' '
test_config trailer.ifexists "doNothing" &&
cat complex_message_body >expected &&
sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
Fixes: Z
Acked-by: Z
Reviewed-by: Z
Signed-off-by: Z
EOF
git interpret-trailers --if-exists replace --no-if-exists --trailer "Fixes: 53" \
<complex_message >actual &&
test_cmp expected actual
'
# No "ifexists" configuration is set, so using "--no-if-exists" makes it default
# to addIfDifferentNeighbor. Because we do have a different neighbor "Fixes: 53"
# (because it got added by overriding with "--if-exists replace" earlier in the
# arguments list), we add "Signed-off-by: addme".
test_expect_success 'using "--no-if-exists" defaults to hardcoded default if nothing configured' '
cat complex_message_body >expected &&
sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
Acked-by: Z
Reviewed-by: Z
Signed-off-by: Z
Fixes: 53
Signed-off-by: addme
EOF
git interpret-trailers --if-exists replace --trailer "Fixes: 53" --no-if-exists \
--trailer "Signed-off-by: addme" <complex_message >actual &&
test_cmp expected actual
'
# The second "Fixes: 53" trailer is discarded, because the "--no-if-exists" here
# makes us default to addIfDifferentNeighbor, and we already added the "Fixes:
# 53" trailer earlier in the argument list.
test_expect_success 'using "--no-if-exists" defaults to hardcoded default if nothing configured (no addition)' '
cat complex_message_body >expected &&
sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
Acked-by: Z
Reviewed-by: Z
Signed-off-by: Z
Fixes: 53
EOF
git interpret-trailers --if-exists replace --trailer "Fixes: 53" --no-if-exists \
--trailer "Fixes: 53" <complex_message >actual &&
test_cmp expected actual
'
test_expect_success 'using "ifExists = replace"' '
test_config trailer.fix.key "Fixes: " &&
test_config trailer.fix.ifExists "replace" &&
@ -1425,6 +1522,39 @@ test_expect_success 'using "ifMissing = doNothing"' '
test_cmp expected actual
'
# Ignore the "IgnoredTrailer" because of "--if-missing doNothing", but also
# ignore the "StillIgnoredTrailer" because we set "trailer.ifMissing" to
# "doNothing" in configuration.
test_expect_success 'using "--no-if-missing" defaults to configuration' '
test_config trailer.ifMissing "doNothing" &&
cat complex_message_body >expected &&
sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
Fixes: Z
Acked-by: Z
Reviewed-by: Z
Signed-off-by: Z
EOF
git interpret-trailers --if-missing doNothing --trailer "IgnoredTrailer: ignoreme" --no-if-missing \
--trailer "StillIgnoredTrailer: ignoreme" <complex_message >actual &&
test_cmp expected actual
'
# Add the "AddedTrailer" because the "--no-if-missing" clears the "--if-missing
# doNothing" from earlier in the argument list.
test_expect_success 'using "--no-if-missing" defaults to hardcoded default if nothing configured' '
cat complex_message_body >expected &&
sed -e "s/ Z\$/ /" >>expected <<-\EOF &&
Fixes: Z
Acked-by: Z
Reviewed-by: Z
Signed-off-by: Z
AddedTrailer: addme
EOF
git interpret-trailers --if-missing doNothing --trailer "IgnoredTrailer: ignoreme" --no-if-missing \
--trailer "AddedTrailer: addme" <complex_message >actual &&
test_cmp expected actual
'
test_expect_success 'default "where" is now "after"' '
git config trailer.where "after" &&
test_config trailer.ack.ifExists "add" &&