diff options
-rwxr-xr-x | scripts/verify-bashisms | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/scripts/verify-bashisms b/scripts/verify-bashisms index 7283980ed5..dab64ef501 100755 --- a/scripts/verify-bashisms +++ b/scripts/verify-bashisms | |||
@@ -23,6 +23,7 @@ def is_whitelisted(s): | |||
23 | return False | 23 | return False |
24 | 24 | ||
25 | SCRIPT_LINENO_RE = re.compile(r' line (\d+) ') | 25 | SCRIPT_LINENO_RE = re.compile(r' line (\d+) ') |
26 | BASHISM_WARNING = re.compile(r'^(possible bashism in.*)$', re.MULTILINE) | ||
26 | 27 | ||
27 | def process(filename, function, lineno, script): | 28 | def process(filename, function, lineno, script): |
28 | import tempfile | 29 | import tempfile |
@@ -42,11 +43,18 @@ def process(filename, function, lineno, script): | |||
42 | # TODO check exit code is 1 | 43 | # TODO check exit code is 1 |
43 | 44 | ||
44 | # Replace the temporary filename with the function and split it | 45 | # Replace the temporary filename with the function and split it |
45 | output = e.output.replace(fn.name, function).splitlines() | 46 | output = e.output.replace(fn.name, function) |
46 | if len(output) % 2 != 0: | 47 | if not output or not output.startswith('possible bashism'): |
47 | print("Unexpected output from checkbashism: %s" % str(output)) | 48 | # Probably starts with or contains only warnings. Dump verbatim |
48 | return | 49 | # with one space indention. Can't do the splitting and whitelist |
49 | 50 | # checking below. | |
51 | return '\n'.join([filename, | ||
52 | ' Unexpected output from checkbashisms.pl'] + | ||
53 | [' ' + x for x in output.splitlines()]) | ||
54 | |||
55 | # We know that the first line matches and that therefore the first | ||
56 | # list entry will be empty - skip it. | ||
57 | output = BASHISM_WARNING.split(output)[1:] | ||
50 | # Turn the output into a single string like this: | 58 | # Turn the output into a single string like this: |
51 | # /.../foobar.bb | 59 | # /.../foobar.bb |
52 | # possible bashism in updatercd_postrm line 2 (type): | 60 | # possible bashism in updatercd_postrm line 2 (type): |
@@ -60,7 +68,8 @@ def process(filename, function, lineno, script): | |||
60 | if lineno is not None: | 68 | if lineno is not None: |
61 | message = SCRIPT_LINENO_RE.sub(lambda m: ' line %d ' % (int(m.group(1)) + int(lineno) - 1), | 69 | message = SCRIPT_LINENO_RE.sub(lambda m: ' line %d ' % (int(m.group(1)) + int(lineno) - 1), |
62 | message) | 70 | message) |
63 | result.extend([' ' + message, ' ' + source]) | 71 | result.append(' ' + message.strip()) |
72 | result.extend([' %s' % x for x in source.splitlines()]) | ||
64 | if result: | 73 | if result: |
65 | result.insert(0, filename) | 74 | result.insert(0, filename) |
66 | return '\n'.join(result) | 75 | return '\n'.join(result) |