diff options
author | Eric Sunshine <sunshine@sunshineco.com> | 2018-08-13 04:47:37 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-08-13 12:22:12 -0700 |
commit | d93871143fdb7c11ddea81aa7f698e5eee0246e5 (patch) | |
tree | 1f773aa5dbcb210176a75483e6594d76e84bb09f /t/chainlint.sed | |
parent | 06fc5c9f90da9be18371bafad5f35b6b17cbf49e (diff) | |
download | git-d93871143fdb7c11ddea81aa7f698e5eee0246e5.tar.gz |
chainlint: let here-doc and multi-line string commence on same line
After swallowing a here-doc, chainlint.sed assumes that no other
processing needs to be done on the line aside from checking for &&-chain
breakage; likewise, after folding a multi-line quoted string. However,
it's conceivable (even if unlikely in practice) that both a here-doc and
a multi-line quoted string might commence on the same line:
cat <<\EOF && echo "foo
bar"
data
EOF
Support this case by sending the line (after swallowing and folding)
through the normal processing sequence rather than jumping directly to
the check for broken &&-chain.
This change also allows other somewhat pathological cases to be handled,
such as closing a subshell on the same line starting a here-doc:
(
cat <<-\INPUT)
data
INPUT
or, for instance, opening a multi-line $(...) expression on the same
line starting a here-doc:
x=$(cat <<-\END &&
data
END
echo "x")
among others.
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/chainlint.sed')
-rw-r--r-- | t/chainlint.sed | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/t/chainlint.sed b/t/chainlint.sed index afb2443a9c..6661e21f20 100644 --- a/t/chainlint.sed +++ b/t/chainlint.sed @@ -157,6 +157,7 @@ s/.*\n// /^[^']*'[^']*$/{ /"[^'"]*'[^'"]*"/!bsqstring } +:folded # here-doc -- swallow it /<<[ ]*[-\\']*[A-Za-z0-9_]/bheredoc # comment or empty line -- discard since final non-comment, non-empty line @@ -255,7 +256,7 @@ s/"//g N s/\n// /"/!bdqstring -bcheckchain +bfolded # found multi-line single-quoted string '...\n...' -- slurp until end of string :sqstring @@ -263,7 +264,7 @@ s/'//g N s/\n// /'/!bsqstring -bcheckchain +bfolded # found here-doc -- swallow it to avoid false hits within its body (but keep # the command to which it was attached) @@ -278,7 +279,7 @@ N } s/^<[^>]*>// s/\n.*$// -bcheckchain +bfolded # found "case ... in" -- pass through untouched :case |