# Copyright 2011 Corentin Chary # Copyright 2020-2023 src_prepare group # Distributed under the terms of the GNU General Public License v2 import re import urllib.error import urllib.parse import urllib.request try: import simplejson as json except ImportError: import json import portage from euscan import helpers, mangling, output HANDLER_NAME = "gnome" CONFIDENCE = 100 PRIORITY = 90 GNOME_URL_SOURCE = "https://download.gnome.org/sources" def can_handle(_pkg, url=None): return url and url.startswith("mirror://gnome/") def guess_package(cp, url): match = re.search("mirror://gnome/sources/([^/]+)/.*", url) if match: return match.group(1) _cat, pkg = cp.split("/") return pkg def scan_url(pkg, url, options): "https://download.gnome.org/sources/" package = { "data": guess_package(pkg.cpv, url), "type": "gnome", } return scan_pkg(pkg, package) def scan_pkg(pkg, options): package = options["data"] output.einfo("Using Gnome json cache: " + package) fp = urllib.request.urlopen("/".join([GNOME_URL_SOURCE, package, "cache.json"])) content = fp.read() fp.close() cache = json.loads(content) if cache[0] != 4: output.eerror("Unknow cache format detected") return [] versions = cache[2][package] if not versions: return [] versions.reverse() cp, ver, _rev = portage.pkgsplit(pkg.cpv) ret = [] for up_pv in versions: pv = mangling.mangle_version(up_pv, options) if helpers.version_filtered(cp, ver, pv): continue up_files = cache[1][package][up_pv] for tarball_comp in ("tar.xz", "tar.bz2", "tar.gz"): if tarball_comp in up_files: url = "/".join([GNOME_URL_SOURCE, package, up_files[tarball_comp]]) break else: output.ewarn("No tarball for release %s" % up_pv) ret.append((url, pv, HANDLER_NAME, CONFIDENCE)) return ret