From 83aa8170eaa8e97d09b8292876095864794633fc Mon Sep 17 00:00:00 2001 From: Tpt Date: Sat, 30 Mar 2024 18:29:39 +0100 Subject: [PATCH] Makes test_debian_compatibility more robust Ignores packages on HTTP error --- lints/test_debian_compatibility.py | 32 ++++++++++-------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/lints/test_debian_compatibility.py b/lints/test_debian_compatibility.py index 41dd7bb2..173dc659 100644 --- a/lints/test_debian_compatibility.py +++ b/lints/test_debian_compatibility.py @@ -1,7 +1,6 @@ import json import subprocess from pathlib import Path -from time import sleep from urllib.error import HTTPError from urllib.request import urlopen @@ -22,10 +21,6 @@ cargo_metadata = json.loads( subprocess.check_output(["cargo", "metadata", "--format-version", "1"]) ) package_by_id = {package["id"]: package for package in cargo_metadata["packages"]} -workspace_packages = { - package_id.split(" ")[0] - for package_id in cargo_metadata["workspace_default_members"] -} debian_cache = {} errors = set() @@ -34,34 +29,27 @@ def parse_version(version): return tuple(int(e) for e in version.split("-")[0].split(".")) -def fetch_debian_package_desc(debian_name): - url = f"https://sources.debian.org/api/src/{debian_name}/" - for i in range(0, 10): - try: - with urlopen(url) as response: - return json.loads(response.read().decode()) - except HTTPError as e: - wait = 2**i - print(f"Error {e} from {url}, retrying after {wait}s") - sleep(wait) - raise Exception(f"Failed to fetch {url}") - - for package_id in cargo_metadata["workspace_default_members"]: package = package_by_id[package_id] if package["name"] in IGNORE_PACKAGES: continue for dependency in package["dependencies"]: if ( - dependency["name"] in workspace_packages + "path" in dependency or dependency["name"] in ALLOWED_MISSING_PACKAGES ): continue candidate_debian_name = f"rust-{dependency['name'].replace('_', '-')}" if dependency["name"] not in debian_cache: - debian_cache[candidate_debian_name] = fetch_debian_package_desc( - candidate_debian_name - ) + url = f"https://sources.debian.org/api/src/{candidate_debian_name}/" + try: + with urlopen(url) as response: + debian_cache[candidate_debian_name] = json.loads( + response.read().decode() + ) + except HTTPError as e: + print(f"Error {e} from {url}, skipping {dependency['name']}") + continue debian_package = debian_cache[candidate_debian_name] if "error" in debian_package: errors.add(f"No Debian package found for {dependency['name']}")