Initial commit for TF-A CI scripts
Signed-off-by: Fathi Boudra <fathi.boudra@linaro.org>
diff --git a/script/static-checks/utils.py b/script/static-checks/utils.py
new file mode 100644
index 0000000..c6a7fdd
--- /dev/null
+++ b/script/static-checks/utils.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python3
+#
+# Copyright (c) 2019, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+import os
+import subprocess
+import sys
+import textwrap
+
+
+def dir_is_ignored(relative_path, ignored_folders):
+ '''Checks if a directory is on the ignore list or inside one of the ignored
+ directories. relative_path mustn't end in "/".'''
+
+ # Check if directory is in ignore list
+ if relative_path in ignored_folders:
+ return True
+
+ # Check if directory is a subdirectory of one in ignore list
+ return (relative_path + '/').startswith(ignored_folders)
+
+
+def file_is_ignored(relative_path, valid_file_extensions, ignored_files, ignored_folders):
+ '''Checks if a file is ignored based on its folder, name and extension.'''
+ if not relative_path.endswith(valid_file_extensions):
+ return True
+
+ if relative_path in ignored_files:
+ return True
+
+ return dir_is_ignored(os.path.dirname(relative_path), ignored_folders)
+
+
+def print_exception_info():
+ '''Print some information about the cause of an exception.'''
+ print("ERROR: Exception:")
+ print(textwrap.indent(str(sys.exc_info()[0])," "))
+ print(textwrap.indent(str(sys.exc_info()[1])," "))
+
+
+def decode_string(string):
+ '''Tries to decode a binary string into ASCII. It gives an error if it
+ finds non-ASCII characters, but it will return the string converted
+ anyway, ignoring these characters.'''
+ try:
+ string = string.decode("ascii")
+ except UnicodeDecodeError:
+ # Capture exceptions caused by non-ASCII characters.
+ print("ERROR:Non-ASCII characters detected.")
+ print_exception_info()
+ string = string.decode("ascii", "ignore")
+
+ return string
+
+
+def shell_command(cmd_line):
+ '''Executes a shell command. Returns (returncode, stdout, stderr), where
+ stdout and stderr are ASCII-encoded strings.'''
+
+ try:
+ p = subprocess.Popen(cmd_line, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ (stdout, stderr) = p.communicate()
+ # No need for p.wait(), p.communicate() does it by default.
+ except:
+ print("ERROR: Shell command: ", end="")
+ print(cmd_line)
+ print_exception_info()
+ return (1, None, None)
+
+ stdout = decode_string(stdout)
+ stderr = decode_string(stderr)
+
+ if p.returncode != 0:
+ print("ERROR: Shell command failed:")
+ print(textwrap.indent(str(cmd_line)," "))
+ print("ERROR: stdout:")
+ print(textwrap.indent(stdout," "))
+ print("ERROR: stderr:")
+ print(textwrap.indent(stderr," "))
+
+ return (p.returncode, stdout, stderr)
+