[gnome-continuous-yocto/gnomeostree-3.28-rocko: 4428/8267] verify-bashisms: support warnings with more than one line of source code



commit d99b29838dd72394803a279fc26ee3201dd2c557
Author: Patrick Ohly <patrick ohly intel com>
Date:   Tue Jan 31 13:50:33 2017 +0100

    verify-bashisms: support warnings with more than one line of source code
    
    All warnings start with "possible bashism in", followed by one or more
    (in the case of line continuation) lines of source code. To support
    more than one line, we now split by matching against the known intro
    text.
    
    Example:
    
     $ verify-bashisms guile
     ...
     /.../openembedded-core/meta/recipes-devtools/guile/guile_2.0.13.bb
      possible bashism in guile_cross_config line 94 ($'...' should be "$(printf '...')"):
                echo '#!'`which ${BUILD_SYS}-guile`$' \\\n--no-auto-compile -e main -s\n!#\n(define 
%guile-build-info '\'\( \
                        > ${B}/guile-config.cross
    
    (From OE-Core rev: e2dd3621c45e854b4eb054b4d4537487462cdd39)
    
    Signed-off-by: Patrick Ohly <patrick ohly intel com>
    Signed-off-by: Richard Purdie <richard purdie linuxfoundation org>

 scripts/verify-bashisms |   19 ++++++++++++++-----
 1 files changed, 14 insertions(+), 5 deletions(-)
---
diff --git a/scripts/verify-bashisms b/scripts/verify-bashisms
index 7283980..dab64ef 100755
--- a/scripts/verify-bashisms
+++ b/scripts/verify-bashisms
@@ -23,6 +23,7 @@ def is_whitelisted(s):
     return False
 
 SCRIPT_LINENO_RE = re.compile(r' line (\d+) ')
+BASHISM_WARNING = re.compile(r'^(possible bashism in.*)$', re.MULTILINE)
 
 def process(filename, function, lineno, script):
     import tempfile
@@ -42,11 +43,18 @@ def process(filename, function, lineno, script):
         # TODO check exit code is 1
 
         # Replace the temporary filename with the function and split it
-        output = e.output.replace(fn.name, function).splitlines()
-        if len(output) % 2 != 0:
-            print("Unexpected output from checkbashism: %s" % str(output))
-            return
-
+        output = e.output.replace(fn.name, function)
+        if not output or not output.startswith('possible bashism'):
+            # Probably starts with or contains only warnings. Dump verbatim
+            # with one space indention. Can't do the splitting and whitelist
+            # checking below.
+            return '\n'.join([filename,
+                              ' Unexpected output from checkbashisms.pl'] +
+                             [' ' + x for x in output.splitlines()])
+
+        # We know that the first line matches and that therefore the first
+        # list entry will be empty - skip it.
+        output = BASHISM_WARNING.split(output)[1:]
         # Turn the output into a single string like this:
         # /.../foobar.bb
         #  possible bashism in updatercd_postrm line 2 (type):
@@ -60,7 +68,8 @@ def process(filename, function, lineno, script):
                 if lineno is not None:
                     message = SCRIPT_LINENO_RE.sub(lambda m: ' line %d ' % (int(m.group(1)) + int(lineno) - 
1),
                                                    message)
-                result.extend([' ' + message, '  ' + source])
+                result.append(' ' + message.strip())
+                result.extend(['  %s' % x for x in source.splitlines()])
         if result:
             result.insert(0, filename)
             return '\n'.join(result)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]