diff --git a/src/start/python/sample_force_env.py b/src/start/python/sample_force_env.py index d421e22085..711f054665 100755 --- a/src/start/python/sample_force_env.py +++ b/src/start/python/sample_force_env.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # vim: set ts=4 sw=4 tw=0 : from tempfile import NamedTemporaryFile diff --git a/src/start/python/setup.py b/src/start/python/setup.py index 9731e4b371..1bc5ab4ff4 100755 --- a/src/start/python/setup.py +++ b/src/start/python/setup.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # vim: set ts=4 sw=4 tw=0 : from distutils.core import setup diff --git a/src/start/python/test/test_force_env.py b/src/start/python/test/test_force_env.py index e642fc0f11..a5e7cc7b13 100755 --- a/src/start/python/test/test_force_env.py +++ b/src/start/python/test/test_force_env.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # vim: set ts=4 sw=4 tw=0 : import unittest diff --git a/src/start/python/test/test_standalone.py b/src/start/python/test/test_standalone.py index 808473b87a..4c57c64108 100755 --- a/src/start/python/test/test_standalone.py +++ b/src/start/python/test/test_standalone.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest from tempfile import NamedTemporaryFile diff --git a/tools/precommit/check_file_properties.py b/tools/precommit/check_file_properties.py index 0c2f3a6c49..462da9e72b 100755 --- a/tools/precommit/check_file_properties.py +++ b/tools/precommit/check_file_properties.py @@ -3,6 +3,7 @@ # author: Ole Schuett & Tiziano Müller import argparse +import os import pathlib import re import sys @@ -125,6 +126,7 @@ def check_file(path: pathlib.Path) -> typing.List[str]: fn_ext = path.suffix abspath = path.resolve() basefn = path.name + is_executable = os.access(abspath, os.X_OK) if not PORTABLE_FILENAME_RE.match(str(path)): warnings += [f"Filename '{path}' not portable"] @@ -155,6 +157,11 @@ def check_file(path: pathlib.Path) -> typing.List[str]: if fn_ext in C_EXTENSIONS and not content.startswith(BANNER_C.format(year, spdx)): warnings += [f"{path}: Copyright banner malformed"] + # check shebang + PY_SHEBANG = "#!/usr/bin/env python3" + if fn_ext == ".py" and is_executable and not content.startswith(f"{PY_SHEBANG}\n"): + warnings += [f"{path}: Wrong shebang, please use '{PY_SHEBANG}'"] + # find all flags flags = set() line_continuation = False