Makes test_debian_compatibility more robust

Ignores packages on HTTP error
pull/845/head
Tpt 9 months ago committed by Thomas Tanon
parent 1d5843fddc
commit 83aa8170ea
  1. 32
      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']}")

Loading…
Cancel
Save