2012-11-24 00:42:11 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
import re
|
2019-12-05 17:46:19 +01:00
|
|
|
import urllib.request, urllib.error, urllib.parse
|
2012-11-24 00:42:11 +01:00
|
|
|
|
|
|
|
try:
|
|
|
|
import simplejson as json
|
|
|
|
except ImportError:
|
|
|
|
import json
|
|
|
|
|
|
|
|
import portage
|
|
|
|
|
|
|
|
from euscan import mangling, helpers, output
|
|
|
|
|
|
|
|
HANDLER_NAME = "gnome"
|
|
|
|
CONFIDENCE = 100
|
|
|
|
PRIORITY = 90
|
|
|
|
|
2023-11-14 22:03:53 +01:00
|
|
|
GNOME_URL_SOURCE = "http://ftp.gnome.org/pub/GNOME/sources"
|
2012-11-24 00:42:11 +01:00
|
|
|
|
2012-12-05 18:43:16 +01:00
|
|
|
|
2012-11-24 00:42:11 +01:00
|
|
|
def can_handle(_pkg, url=None):
|
2023-11-14 22:03:53 +01:00
|
|
|
return url and url.startswith("mirror://gnome/")
|
2012-11-24 00:42:11 +01:00
|
|
|
|
|
|
|
|
|
|
|
def guess_package(cp, url):
|
2023-11-14 22:03:53 +01:00
|
|
|
match = re.search("mirror://gnome/sources/([^/]+)/.*", url)
|
2012-11-24 00:42:11 +01:00
|
|
|
if match:
|
|
|
|
return match.group(1)
|
|
|
|
|
|
|
|
_cat, pkg = cp.split("/")
|
|
|
|
|
|
|
|
return pkg
|
|
|
|
|
|
|
|
|
|
|
|
def scan_url(pkg, url, options):
|
2023-11-14 22:03:53 +01:00
|
|
|
"http://ftp.gnome.org/pub/GNOME/sources/"
|
2012-11-30 23:39:25 +01:00
|
|
|
package = {
|
2023-11-14 22:03:53 +01:00
|
|
|
"data": guess_package(pkg.cpv, url),
|
|
|
|
"type": "gnome",
|
2012-11-30 23:39:25 +01:00
|
|
|
}
|
2012-11-24 00:42:11 +01:00
|
|
|
return scan_pkg(pkg, package)
|
|
|
|
|
|
|
|
|
|
|
|
def scan_pkg(pkg, options):
|
2023-11-14 22:03:53 +01:00
|
|
|
package = options["data"]
|
2012-11-24 00:42:11 +01:00
|
|
|
|
|
|
|
output.einfo("Using Gnome json cache: " + package)
|
|
|
|
|
2023-11-14 22:03:53 +01:00
|
|
|
fp = urllib.request.urlopen("/".join([GNOME_URL_SOURCE, package, "cache.json"]))
|
2012-11-24 00:42:11 +01:00
|
|
|
content = fp.read()
|
|
|
|
fp.close()
|
|
|
|
|
2023-11-14 22:03:53 +01:00
|
|
|
cache = json.loads(content, encoding="ascii")
|
2012-11-24 00:42:11 +01:00
|
|
|
|
|
|
|
if cache[0] != 4:
|
2023-11-14 22:03:53 +01:00
|
|
|
output.eerror("Unknow cache format detected")
|
2012-11-30 23:39:25 +01:00
|
|
|
return []
|
2012-11-24 00:42:11 +01:00
|
|
|
|
|
|
|
versions = cache[2][package]
|
|
|
|
|
|
|
|
if not versions:
|
2012-11-30 23:39:25 +01:00
|
|
|
return []
|
2012-11-24 00:42:11 +01:00
|
|
|
|
|
|
|
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]
|
2023-11-14 22:03:53 +01:00
|
|
|
for tarball_comp in ("tar.xz", "tar.bz2", "tar.gz"):
|
2012-11-24 00:42:11 +01:00
|
|
|
if tarball_comp in up_files:
|
2023-11-14 22:03:53 +01:00
|
|
|
url = "/".join([GNOME_URL_SOURCE, package, up_files[tarball_comp]])
|
2012-11-24 00:42:11 +01:00
|
|
|
break
|
|
|
|
else:
|
2023-11-14 22:03:53 +01:00
|
|
|
output.ewarn("No tarball for release %s" % up_pv)
|
2012-11-24 00:42:11 +01:00
|
|
|
ret.append((url, pv, HANDLER_NAME, CONFIDENCE))
|
2012-11-30 23:39:25 +01:00
|
|
|
|
2012-11-24 00:42:11 +01:00
|
|
|
return ret
|