diff options
author | Eric Sunshine <sunshine@sunshineco.com> | 2019-05-10 20:18:53 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-05-13 11:50:20 +0900 |
commit | 142997d4895b2b39ade3560da774f181f0131086 (patch) | |
tree | 7d6aad2b271a369404f71cdc0f1984b872b572da /t/t5504-fetch-receive-strict.sh | |
parent | The eighth batch (diff) | |
download | tgif-142997d4895b2b39ade3560da774f181f0131086.tar.xz |
check-non-portable-shell: support Perl versions older than 5.10
For thoroughness when checking for one-shot environment variable
assignments at shell function call sites, check-non-portable-shell
stitches together incomplete lines (those ending with backslash). This
allows it to correctly flag such undesirable usage even when the
variable assignment and function call are split across lines, for
example:
FOO=bar \
func
where 'func' is a shell function.
The stitching is accomplished like this:
while (<>) {
chomp;
# stitch together incomplete lines (those ending with "\")
while (s/\\$//) {
$_ .= readline;
chomp;
}
# detect unportable/undesirable shell constructs
...
}
Although this implementation is well supported in reasonably modern Perl
versions (5.10 and later), it fails with older versions (such as Perl
5.8 shipped with ancient Mac OS 10.5). In particular, in older Perl
versions, 'readline' is not connected to the file handle associated with
the "magic" while (<>) {...} construct, so 'readline' throws a
"readline() on unopened filehandle" error. Work around this problem by
dropping readline() and instead incorporating the stitching of
incomplete lines directly into the existing while (<>) {...} loop.
Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t5504-fetch-receive-strict.sh')
0 files changed, 0 insertions, 0 deletions