]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t6300-for-each-ref.sh
Merge branch 'en/ort-perf-batch-9'
[thirdparty/git.git] / t / t6300-for-each-ref.sh
index ca62e764b58683239d8b118bff4d9a4b7cf63314..cac7f443d0043f80bca18c07fcf585a601b7599d 100755 (executable)
@@ -814,53 +814,152 @@ test_expect_success 'set up trailers for next test' '
        EOF
 '
 
-test_expect_success '%(trailers:unfold) unfolds trailers' '
-       {
-               unfold <trailers
-               echo
-       } >expect &&
-       git for-each-ref --format="%(trailers:unfold)" refs/heads/main >actual &&
-       test_cmp expect actual &&
-       git for-each-ref --format="%(contents:trailers:unfold)" refs/heads/main >actual &&
-       test_cmp expect actual
-'
+test_trailer_option () {
+       title=$1 option=$2
+       cat >expect
+       test_expect_success "$title" '
+               git for-each-ref --format="%($option)" refs/heads/main >actual &&
+               test_cmp expect actual &&
+               git for-each-ref --format="%(contents:$option)" refs/heads/main >actual &&
+               test_cmp expect actual
+       '
+}
 
-test_expect_success '%(trailers:only) shows only "key: value" trailers' '
-       {
-               grep -v patch.description <trailers &&
-               echo
-       } >expect &&
-       git for-each-ref --format="%(trailers:only)" refs/heads/main >actual &&
-       test_cmp expect actual &&
-       git for-each-ref --format="%(contents:trailers:only)" refs/heads/main >actual &&
-       test_cmp expect actual
-'
+test_trailer_option '%(trailers:unfold) unfolds trailers' \
+       'trailers:unfold' <<-EOF
+       $(unfold <trailers)
 
-test_expect_success '%(trailers:only) and %(trailers:unfold) work together' '
-       {
-               grep -v patch.description <trailers | unfold &&
-               echo
-       } >expect &&
-       git for-each-ref --format="%(trailers:only,unfold)" refs/heads/main >actual &&
-       test_cmp expect actual &&
-       git for-each-ref --format="%(trailers:unfold,only)" refs/heads/main >actual &&
-       test_cmp actual actual &&
-       git for-each-ref --format="%(contents:trailers:only,unfold)" refs/heads/main >actual &&
-       test_cmp expect actual &&
-       git for-each-ref --format="%(contents:trailers:unfold,only)" refs/heads/main >actual &&
-       test_cmp actual actual
-'
-
-test_expect_success '%(trailers) rejects unknown trailers arguments' '
-       # error message cannot be checked under i18n
-       cat >expect <<-EOF &&
+       EOF
+
+test_trailer_option '%(trailers:only) shows only "key: value" trailers' \
+       'trailers:only' <<-EOF
+       $(grep -v patch.description <trailers)
+
+       EOF
+
+test_trailer_option '%(trailers:only=no,only=true) shows only "key: value" trailers' \
+       'trailers:only=no,only=true' <<-EOF
+       $(grep -v patch.description <trailers)
+
+       EOF
+
+test_trailer_option '%(trailers:only=yes) shows only "key: value" trailers' \
+       'trailers:only=yes' <<-EOF
+       $(grep -v patch.description <trailers)
+
+       EOF
+
+test_trailer_option '%(trailers:only=no) shows all trailers' \
+       'trailers:only=no' <<-EOF
+       $(cat trailers)
+
+       EOF
+
+test_trailer_option '%(trailers:only) and %(trailers:unfold) work together' \
+       'trailers:only,unfold' <<-EOF
+       $(grep -v patch.description <trailers | unfold)
+
+       EOF
+
+test_trailer_option '%(trailers:unfold) and %(trailers:only) work together' \
+       'trailers:unfold,only' <<-EOF
+       $(grep -v patch.description <trailers | unfold)
+
+       EOF
+
+test_trailer_option '%(trailers:key=foo) shows that trailer' \
+       'trailers:key=Signed-off-by' <<-EOF
+       Signed-off-by: A U Thor <author@example.com>
+
+       EOF
+
+test_trailer_option '%(trailers:key=foo) is case insensitive' \
+       'trailers:key=SiGned-oFf-bY' <<-EOF
+       Signed-off-by: A U Thor <author@example.com>
+
+       EOF
+
+test_trailer_option '%(trailers:key=foo:) trailing colon also works' \
+       'trailers:key=Signed-off-by:' <<-EOF
+       Signed-off-by: A U Thor <author@example.com>
+
+       EOF
+
+test_trailer_option '%(trailers:key=foo) multiple keys' \
+       'trailers:key=Reviewed-by:,key=Signed-off-by' <<-EOF
+       Reviewed-by: A U Thor <author@example.com>
+       Signed-off-by: A U Thor <author@example.com>
+
+       EOF
+
+test_trailer_option '%(trailers:key=nonexistent) becomes empty' \
+       'trailers:key=Shined-off-by:' <<-EOF
+
+       EOF
+
+test_trailer_option '%(trailers:key=foo) handles multiple lines even if folded' \
+       'trailers:key=Acked-by' <<-EOF
+       $(grep -v patch.description <trailers | grep -v Signed-off-by | grep -v Reviewed-by)
+
+       EOF
+
+test_trailer_option '%(trailers:key=foo,unfold) properly unfolds' \
+       'trailers:key=Signed-Off-by,unfold' <<-EOF
+       $(unfold <trailers | grep Signed-off-by)
+
+       EOF
+
+test_trailer_option '%(trailers:key=foo,only=no) also includes nontrailer lines' \
+       'trailers:key=Signed-off-by,only=no' <<-EOF
+       Signed-off-by: A U Thor <author@example.com>
+       $(grep patch.description <trailers)
+
+       EOF
+
+test_trailer_option '%(trailers:key=foo,valueonly) shows only value' \
+       'trailers:key=Signed-off-by,valueonly' <<-EOF
+       A U Thor <author@example.com>
+
+       EOF
+
+test_trailer_option '%(trailers:separator) changes separator' \
+       'trailers:separator=%x2C,key=Reviewed-by,key=Signed-off-by:' <<-EOF
+       Reviewed-by: A U Thor <author@example.com>,Signed-off-by: A U Thor <author@example.com>
+       EOF
+
+test_trailer_option '%(trailers:key_value_separator) changes key-value separator' \
+       'trailers:key_value_separator=%x2C,key=Reviewed-by,key=Signed-off-by:' <<-EOF
+       Reviewed-by,A U Thor <author@example.com>
+       Signed-off-by,A U Thor <author@example.com>
+
+       EOF
+
+test_trailer_option '%(trailers:separator,key_value_separator) changes both separators' \
+       'trailers:separator=%x2C,key_value_separator=%x2C,key=Reviewed-by,key=Signed-off-by:' <<-EOF
+       Reviewed-by,A U Thor <author@example.com>,Signed-off-by,A U Thor <author@example.com>
+       EOF
+
+test_failing_trailer_option () {
+       title=$1 option=$2
+       cat >expect
+       test_expect_success "$title" '
+               # error message cannot be checked under i18n
+               test_must_fail git for-each-ref --format="%($option)" refs/heads/main 2>actual &&
+               test_i18ncmp expect actual &&
+               test_must_fail git for-each-ref --format="%(contents:$option)" refs/heads/main 2>actual &&
+               test_i18ncmp expect actual
+       '
+}
+
+test_failing_trailer_option '%(trailers) rejects unknown trailers arguments' \
+       'trailers:unsupported' <<-\EOF
        fatal: unknown %(trailers) argument: unsupported
        EOF
-       test_must_fail git for-each-ref --format="%(trailers:unsupported)" 2>actual &&
-       test_i18ncmp expect actual &&
-       test_must_fail git for-each-ref --format="%(contents:trailers:unsupported)" 2>actual &&
-       test_i18ncmp expect actual
-'
+
+test_failing_trailer_option '%(trailers:key) without value is error' \
+       'trailers:key' <<-\EOF
+       fatal: expected %(trailers:key=<value>)
+       EOF
 
 test_expect_success 'if arguments, %(contents:trailers) shows error if colon is missing' '
        cat >expect <<-EOF &&