pmbootstrap-meow/test/check_checksums.py
Oliver Smith 74e103d1f2 static code analysis: make it pass flake8 3.5.0
This commit adds two new ignores to the flake8 call:
* W504 line break after binary operator
* W605 invalid escape sequence 'x'

Without these, newer flake8 versions, such as the one shipped by Arch
Linux, don't run through on the code base (which leads to not running
it at all locally, only in CI).

Additional changes:
* Don't give the exception instance of subprocess.CalledProcessError a
  name, so it does not trigger F841
* Dont' advise to run "autopep8" anymore, because that will likely
  touch unrelated code.

For reference, here is the list of error codes:
https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes
2018-07-11 18:58:29 +00:00

99 lines
3 KiB
Python
Executable file

#!/usr/bin/env python3
import os
import subprocess
import sys
def get_changed_files():
try:
branch = os.environ['CI_COMMIT_REF_NAME']
raw = subprocess.check_output(['git', 'diff', '--name-only',
'master...{}'.format(branch)])
except (KeyError, subprocess.CalledProcessError):
raw = subprocess.check_output(['git', 'diff', '--name-only',
'HEAD~1'])
return raw.decode().splitlines()
def get_changed_packages():
files = get_changed_files()
packages = set()
for file in files:
if not file.startswith("aports/"):
continue
name = file.split("/")[2]
package_path = "/".join(file.split("/")[0:3])
apkbuild_path = os.path.join(package_path, "APKBUILD")
if not os.path.exists(apkbuild_path):
print("No APKBUILD found at {}".format(package_path))
continue
packages.add(name)
return packages
def check_output_always(command):
try:
return subprocess.check_output(command)
except subprocess.CalledProcessError as e:
return e.output
def check_checksums(package):
command = ['./pmbootstrap.py', 'checksum', package]
try:
subprocess.check_output(command)
except subprocess.CalledProcessError:
print("Something gone wrong in pmbootstrap. Log:")
logfile = os.path.expanduser("~/.local/var/pmbootstrap/log.txt")
with open(logfile) as log:
print(log.read())
print("Test script failed on checksumming package '{}'".format(package))
exit(1)
result = check_output_always(['git', 'status', '--porcelain', '--untracked-files=no']).decode()
if result == "":
print("** The checksums are correct")
else:
print(result)
result = check_output_always(['git', 'diff']).decode()
print(result)
print("** The checksums are not correct")
exit(1)
def check_build(packages):
# Initialize build environment with less logging
commands = [["build_init"],
["--details-to-stdout", "build", "--strict"] + list(packages)]
for command in commands:
process = subprocess.Popen(["./pmbootstrap.py"] + command)
process.communicate()
if process.returncode != 0:
print("** Building failed")
exit(1)
if __name__ == "__main__":
# Allow to specify "--build" to build instead of only verifying checksums
build = False
if len(sys.argv) > 1:
if sys.argv[1] == "--build":
build = True
else:
print("usage: {} [--build]".format(sys.argv[0]))
exit(1)
packages = get_changed_packages()
if len(packages) == 0:
print("No aports packages changed in this commit")
exit(0)
if build:
print("Building in strict mode: " + ", ".join(packages))
check_build(packages)
else:
for package in packages:
print("Checking {} for correct checksums".format(package))
check_checksums(package)