From 6803b2b8c79b1d2386417abcf46b8247ee2db57b Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Fri, 21 Feb 2020 18:21:19 +0100 Subject: [PATCH] Add pyproject.toml to set line length for black ... and rerun black. Signed-off-by: Nils Philippsen --- generate_changelog.py | 13 ++----- next_build.py | 75 ++++++++++++++++++---------------------- pyproject.toml | 2 ++ tests/test_next_build.py | 20 +++-------- 4 files changed, 42 insertions(+), 68 deletions(-) create mode 100644 pyproject.toml diff --git a/generate_changelog.py b/generate_changelog.py index 1875393..4930572 100644 --- a/generate_changelog.py +++ b/generate_changelog.py @@ -21,9 +21,7 @@ def run_command(command, cwd=None): try: output = subprocess.check_output(command, cwd=cwd, stderr=subprocess.PIPE) except subprocess.CalledProcessError as e: - _log.error( - "Command `{}` return code: `{}`".format(" ".join(command), e.returncode) - ) + _log.error("Command `{}` return code: `{}`".format(" ".join(command), e.returncode)) _log.error("stdout:\n-------\n{}".format(e.stdout)) _log.error("stderr:\n-------\n{}".format(e.stderr)) raise Exception("Command failed to run") @@ -53,8 +51,7 @@ def main(args): break repo_obj.checkout_tree( - commit, - strategy=pygit2.GIT_CHECKOUT_FORCE | pygit2.GIT_CHECKOUT_RECREATE_MISSING, + commit, strategy=pygit2.GIT_CHECKOUT_FORCE | pygit2.GIT_CHECKOUT_RECREATE_MISSING, ) if os.path.exists(os.path.join(args[0], f"{name}.spec")): try: @@ -71,11 +68,7 @@ def main(args): except Exception: continue output = tuple( - output.decode("utf-8") - .strip() - .split("\n")[0] - .rsplit(".", 1)[0] - .split(" ") + output.decode("utf-8").strip().split("\n")[0].rsplit(".", 1)[0].split(" ") ) nvr = "-".join(output) diff --git a/next_build.py b/next_build.py index e7f024d..b074a64 100644 --- a/next_build.py +++ b/next_build.py @@ -23,9 +23,7 @@ _evr_re = re.compile(r"^(?:(?P\d+):)?(?P[^-:]+)(?:-(?P[ def get_cli_arguments(args): """ Set the CLI argument parser and return the argument parsed. """ - parser = argparse.ArgumentParser( - description="Script to determine the next NVR of a build" - ) + parser = argparse.ArgumentParser(description="Script to determine the next NVR of a build") parser.add_argument( "--koji-url", help="The base URL of the Koji hub", @@ -41,10 +39,7 @@ def get_cli_arguments(args): parser.add_argument("package", help="The name of the package of interest") parser.add_argument("dist", help="The dist-tag of interest") parser.add_argument( - "evr", - help="The [epoch:]version[-release] of the package", - nargs="?", - type=parse_evr, + "evr", help="The [epoch:]version[-release] of the package", nargs="?", type=parse_evr, ) return parser.parse_args(args) @@ -56,10 +51,10 @@ def parse_evr(evr_str): if not match: raise ValueError(str) - epoch = match.group('epoch') or 0 + epoch = match.group("epoch") or 0 epoch = int(epoch) - return epoch, match.group('version'), match.group('release') + return epoch, match.group("version"), match.group("release") def parse_release_tag(tag): @@ -96,21 +91,19 @@ def main_sequential_builds_algo(args, client, pkgid): n_builds = max([pkgrel + 1, n_builds]) except TypeError: pass - print( - f"Next build: {last_build['name']}-{last_build['version']}-{n_builds}.{args.dist}" + print(f"Next build: {last_build['name']}-{last_build['version']}-{n_builds}.{args.dist}") + + +_rpmvercmp_key = cmp_to_key( + lambda b1, b2: rpm.labelCompare( + (str(b1["epoch"]), b1["version"], b1["release"]), + (str(b2["epoch"]), b2["version"], b2["release"]), ) - - -_rpmvercmp_key = cmp_to_key(lambda b1, b2: rpm.labelCompare( - (str(b1["epoch"]), b1["version"], b1["release"]), - (str(b2["epoch"]), b2["version"], b2["release"]), -)) +) def holistic_heuristic_calculate_release( - args: argparse.Namespace, - lower_bound: dict, - higher_bound: typing.Optional[dict], + args: argparse.Namespace, lower_bound: dict, higher_bound: typing.Optional[dict], ): dist = args.dist @@ -119,29 +112,29 @@ def holistic_heuristic_calculate_release( epoch, version, release = args.evr except TypeError: epoch, version, release = ( - lower_bound['epoch'], - lower_bound['version'], - lower_bound['release'], + lower_bound["epoch"], + lower_bound["version"], + lower_bound["release"], ) - new_evr = {'epoch': epoch, 'version': version, 'release': release} + new_evr = {"epoch": epoch, "version": version, "release": release} if _rpmvercmp_key(new_evr) > _rpmvercmp_key(lower_bound): lower_bound = new_evr if not release: - lower_bound['release'] = f"1.{dist}" + lower_bound["release"] = f"1.{dist}" - lpkgrel, _, lminorbump = parse_release_tag(lower_bound['release']) + lpkgrel, _, lminorbump = parse_release_tag(lower_bound["release"]) # If the higher bound has the same version, bump its release to give it enough wiggle-room for # parallel builds of the (almost) same EVRs against several Fedora versions. - if higher_bound and higher_bound['version'] == version: + if higher_bound and higher_bound["version"] == version: higher_bound = higher_bound.copy() - hbpkgrel, hbmiddle, _ = parse_release_tag(higher_bound['release']) - higher_bound['release'] = f"{hbpkgrel + 1}{hbmiddle}" + hbpkgrel, hbmiddle, _ = parse_release_tag(higher_bound["release"]) + higher_bound["release"] = f"{hbpkgrel + 1}{hbmiddle}" # Bump the left-most release number and check that it doesn't violate the higher bound, if it # exists. - new_evr['release'] = f"{lpkgrel + 1}.{dist}" + new_evr["release"] = f"{lpkgrel + 1}.{dist}" if not higher_bound or _rpmvercmp_key(new_evr) < _rpmvercmp_key(higher_bound): # No (satisfiable) higher bound exists or it has a higher epoch-version-release. @@ -152,19 +145,19 @@ def holistic_heuristic_calculate_release( else: nminorbump = 1 - new_evr['release'] = rel_bak = f"{lpkgrel}.{dist}.{nminorbump}" + new_evr["release"] = rel_bak = f"{lpkgrel}.{dist}.{nminorbump}" if _rpmvercmp_key(new_evr) < _rpmvercmp_key(higher_bound): return new_evr # Oops. Attempt appending '.1' to the minor bump, ... - new_evr['release'] += ".1" + new_evr["release"] += ".1" if _rpmvercmp_key(new_evr) < _rpmvercmp_key(higher_bound): return new_evr # ... otherwise don't bother. - new_evr['release'] = rel_bak + new_evr["release"] = rel_bak return new_evr @@ -183,22 +176,20 @@ def main_holistic_heuristic_algo(args, client, pkgid): dtag_re = re.compile(fr"\.{distcode}(?P\d+)") builds = [ - build - for build in client.listBuilds(pkgid, type="rpm") - if dtag_re.search(build['release']) + build for build in client.listBuilds(pkgid, type="rpm") if dtag_re.search(build["release"]) ] # builds by distro release builds_per_distver = defaultdict(list) for build in client.listBuilds(pkgid, type="rpm"): - match = dtag_re.search(build['release']) + match = dtag_re.search(build["release"]) if not match: # ignore builds for other distro types (e.g. Fedora vs. EPEL), or modular builds continue - distver = int(match.group('distver')) + distver = int(match.group("distver")) builds_per_distver[distver].append(build) if not builds_per_distver: @@ -221,7 +212,7 @@ def main_holistic_heuristic_algo(args, client, pkgid): # Lower bound: the RPM-wise "highest" build which this release has to exceed. lower_bound = lower_bound_builds[0] - lower_bound_nvr = lower_bound['nvr'] + lower_bound_nvr = lower_bound["nvr"] # All builds that should be 'higher' than what we are targetting, i.e. the highest build of each # newer release. We aim at a new release which is lower than every one of them, but if this @@ -230,7 +221,7 @@ def main_holistic_heuristic_algo(args, client, pkgid): (builds[0] for dver, builds in builds_per_distver.items() if dver > pkgdistver), key=_rpmvercmp_key, ) - higher_bound_builds_nvr = [b['nvr'] for b in higher_bound_builds] + higher_bound_builds_nvr = [b["nvr"] for b in higher_bound_builds] print(f"Highest build of lower or current distro versions: {lower_bound_nvr}") print(f"Highest builds of higher distro versions: {', '.join(higher_bound_builds_nvr)}") @@ -247,14 +238,14 @@ def main_holistic_heuristic_algo(args, client, pkgid): if satisfiable_higher_bound_builds: # Find the higher bound which we can stay below. higher_bound = satisfiable_higher_bound_builds[0] - higher_bound_nvr = higher_bound['nvr'] + higher_bound_nvr = higher_bound["nvr"] else: higher_bound = higher_bound_nvr = None print(f"Lowest satisfiable higher build in higher distro version: {higher_bound_nvr}") new_evr = holistic_heuristic_calculate_release(args, lower_bound, higher_bound) - if new_evr['epoch']: + if new_evr["epoch"]: new_evr_str = f"{new_evr['epoch']}:{new_evr['version']}-{new_evr['release']}" else: new_evr_str = f"{new_evr['version']}-{new_evr['release']}" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..2096b4c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,2 @@ +[tool.black] + line_length = 100 diff --git a/tests/test_next_build.py b/tests/test_next_build.py index 9357fcd..f63f61f 100644 --- a/tests/test_next_build.py +++ b/tests/test_next_build.py @@ -14,16 +14,8 @@ test_data = [ "package": "gimp", "expected_results": [ # 5 existing builds -> 6 - { - "dist": "fc32", - "last": "gimp-2.10.14-4.fc32.1", - "next": "gimp-2.10.14-6.fc32", - }, - { - "dist": "fc31", - "last": "gimp-2.10.14-3.fc31", - "next": "gimp-2.10.14-4.fc31", - }, + {"dist": "fc32", "last": "gimp-2.10.14-4.fc32.1", "next": "gimp-2.10.14-6.fc32",}, + {"dist": "fc31", "last": "gimp-2.10.14-3.fc31", "next": "gimp-2.10.14-4.fc31",}, ], }, ] @@ -45,9 +37,7 @@ class TestNextBuild: @pytest.mark.parametrize("test_data", data_as_test_parameters(test_data)) def test_main(self, test_data, capsys): with open( - os.path.join( - __here__, "koji-output", "list-builds", test_data["package"] + ".json" - ), + os.path.join(__here__, "koji-output", "list-builds", test_data["package"] + ".json"), "rb", ) as f: koji_list_builds_output = json.load(f) @@ -63,9 +53,7 @@ class TestNextBuild: mock_client.getPackageID.assert_called_once() mock_client.listBuilds.assert_called_once() - expected_output = ( - f"Last build: {test_data['last']}\n" f"Next build: {test_data['next']}\n" - ) + expected_output = f"Last build: {test_data['last']}\n" f"Next build: {test_data['next']}\n" captured_output = capsys.readouterr() assert captured_output.out == expected_output