Browse Source
An unclosed here-doc in a test is a problem, because it silently gobbles
up any remaining commands. Since 99a64e4b73
(tests: lint for run-away
here-doc, 2017-03-22) we detect this by piggy-backing on the internal
chainlint checker in test-lib.sh.
However, it would be nice to detect it in chainlint.pl, for a few
reasons:
- the output from chainlint.pl is much nicer; it can show the exact
spot of the error, rather than a vague "somewhere in this test you
broke the &&-chain or had a bad here-doc" message.
- the implementation in test-lib.sh runs for each test snippet. And
since it requires a subshell, the extra cost is small but not zero.
If chainlint.pl can reliably find the problem, we can optimize the
test-lib.sh code.
The chainlint.pl code never intended to find here-doc problems. But
since it has to parse them anyway (to avoid reporting problems inside
here-docs), most of what we need is already there. We can detect the
problem when we fail to find the missing end-tag in swallow_heredocs().
The extra change in scan_heredoc_tag() stores the location of the start
of the here-doc, which lets us mark it as the source of the error in the
output (see the new tests for examples).
[jk: added commit message and tests]
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main


5 changed files with 34 additions and 3 deletions
@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
|
||||
command_which_is_run && |
||||
cat >expect <<-\EOF ?!UNCLOSED-HEREDOC?! && |
||||
we forget to end the here-doc |
||||
command_which_is_gobbled |
@ -0,0 +1,4 @@
@@ -0,0 +1,4 @@
|
||||
command_which_is_run && |
||||
cat >expect <<-\EOF && |
||||
we forget to end the here-doc |
||||
command_which_is_gobbled |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
command_which_is_run && |
||||
cat >expect <<\EOF ?!UNCLOSED-HEREDOC?! && |
||||
we try to end the here-doc below, |
||||
but the indentation throws us off |
||||
since the operator is not "<<-". |
||||
EOF |
||||
command_which_is_gobbled |
Loading…
Reference in new issue