diff --git a/CHANGELOG.md b/CHANGELOG.md index ba0e21e..53915fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +0.9.0 (2022-05-26) +------------------ + + - allow file:// mirrors + - /var/cache/apt/archives/ is now allowed to contain packages + - add file-mirror-automount hook-dir + - set $MMDEBSTRAP_VERBOSITY in hooks + - rewrite coverage with multiple individual and skippable shell scripts + 0.8.6 (2022-03-25) ------------------ diff --git a/coverage.py b/coverage.py index 97b50b1..b219bcb 100755 --- a/coverage.py +++ b/coverage.py @@ -5,6 +5,7 @@ import os import sys import shutil import subprocess +import argparse have_qemu = os.getenv("HAVE_QEMU", "yes") == "yes" have_unshare = os.getenv("HAVE_UNSHARE", "yes") == "yes" @@ -16,14 +17,24 @@ all_dists = ["oldstable", "stable", "testing", "unstable"] default_mode = "unshare" if have_unshare else "root" all_modes = ["auto", "root", "unshare", "fakechroot", "chrootless"] default_variant = "apt" -all_variants = ["extract", "custom", "essential", "apt", "minbase", "buildd", "-", "standard"] +all_variants = [ + "extract", + "custom", + "essential", + "apt", + "minbase", + "buildd", + "-", + "standard", +] default_format = "auto" all_formats = ["auto", "directory", "tar", "squashfs", "ext2", "null"] only_dists = [] -mirror=os.getenv("mirror", "http://127.0.0.1/debian") -hostarch=subprocess.check_output(["dpkg", "--print-architecture"]).decode().strip() +mirror = os.getenv("mirror", "http://127.0.0.1/debian") +hostarch = subprocess.check_output(["dpkg", "--print-architecture"]).decode().strip() + def skip(condition, dist, mode, variant, fmt): if not condition: @@ -37,7 +48,29 @@ def skip(condition, dist, mode, variant, fmt): break return toskip + def main(): + parser = argparse.ArgumentParser() + parser.add_argument("test", nargs="*", help="only run these tests") + parser.add_argument( + "-x", + "--exitfirst", + action="store_const", + dest="maxfail", + const=1, + help="exit instantly on first error or failed test.", + ) + parser.add_argument( + "--maxfail", + metavar="num", + action="store", + type=int, + dest="maxfail", + default=0, + help="exit after first num failures or errors.", + ) + args = parser.parse_args() + onlyrun = None if len(sys.argv) > 1: onlyrun = sys.argv[1] @@ -46,7 +79,7 @@ def main(): with open("coverage.txt") as f: for test in Deb822.iter_paragraphs(f): name = test["Test"] - if onlyrun and name != onlyrun: + if args.test and name not in args.text: continue tt = None if have_qemu: @@ -100,17 +133,21 @@ def main(): skipped = [] failed = [] for i, (test, name, dist, mode, variant, fmt) in enumerate(tests): - print("------------------------------------------------------------------------------") - print("(%d/%d) %s"%(i+1,len(tests),name)) - print("dist: %s"%dist) - print("mode: %s"%mode) - print("variant: %s"%variant) - print("format: %s"%fmt) - print("------------------------------------------------------------------------------") - with open("tests/"+name) as fin, open("shared/test.sh", "w") as fout: + print( + "------------------------------------------------------------------------------" + ) + print("(%d/%d) %s" % (i + 1, len(tests), name)) + print("dist: %s" % dist) + print("mode: %s" % mode) + print("variant: %s" % variant) + print("format: %s" % fmt) + print( + "------------------------------------------------------------------------------" + ) + with open("tests/" + name) as fin, open("shared/test.sh", "w") as fout: for line in fin: for e in ["CMD", "SOURCE_DATE_EPOCH"]: - line = line.replace("{{ "+e+" }}", os.getenv(e)) + line = line.replace("{{ " + e + " }}", os.getenv(e)) line = line.replace("{{ DIST }}", dist) line = line.replace("{{ MIRROR }}", mirror) line = line.replace("{{ MODE }}", mode) @@ -129,13 +166,16 @@ def main(): case "skip": skipped.append((name, dist, mode, variant, fmt)) continue - success = True + proc = subprocess.Popen(argv) try: - subprocess.check_call(argv) - except: - success = False - if not success: + proc.wait() + except KeyboardInterrupt: + proc.kill() + break + if proc.returncode != 0: failed.append((name, dist, mode, variant, fmt)) + if args.maxfail and len(failed) >= args.maxfail: + break if skipped: print("skipped:") for t in skipped: @@ -146,5 +186,6 @@ def main(): print(t) exit(1) -if __name__ == '__main__': + +if __name__ == "__main__": main() diff --git a/mmdebstrap b/mmdebstrap index 21939a0..2c5b6e3 100755 --- a/mmdebstrap +++ b/mmdebstrap @@ -23,7 +23,7 @@ use strict; use warnings; -our $VERSION = '0.8.6'; +our $VERSION = '0.9.0'; use English; use Getopt::Long;