euscan: optimize SRC_URI fetching
Signed-off-by: Corentin Chary <corentin.chary@gmail.com>
This commit is contained in:
parent
f37b9a7740
commit
f6e2882b44
@ -10,6 +10,7 @@ import portage
|
||||
from portage.output import EOutput, TermProgressBar
|
||||
from gentoolkit import pprinter as pp
|
||||
|
||||
mirrors_ = None
|
||||
|
||||
class ProgressHandler(object):
|
||||
def __init__(self, progress_bar):
|
||||
@ -96,10 +97,27 @@ def to_ebuild_uri(cpv, url):
|
||||
url = url.replace(src, '${%s}' % dst)
|
||||
return url
|
||||
|
||||
def from_mirror(url):
|
||||
if not url.startswith('mirror://'):
|
||||
return url
|
||||
|
||||
global mirrors_
|
||||
if mirrors_ is None:
|
||||
mirrors_ = portage.settings.thirdpartymirrors()
|
||||
|
||||
for mirror_name in mirrors_:
|
||||
prefix = 'mirror://' + mirror_name
|
||||
if url.startswith(prefix):
|
||||
return url.replace(prefix, mirrors_[mirror_name][0])
|
||||
|
||||
return url
|
||||
|
||||
def to_mirror(url):
|
||||
mirrors = portage.settings.thirdpartymirrors()
|
||||
for mirror_name in mirrors:
|
||||
global mirrors_
|
||||
if mirrors_ is None:
|
||||
mirrors_ = portage.settings.thirdpartymirrors()
|
||||
|
||||
for mirror_name in mirrors_:
|
||||
for mirror_url in mirrors[mirror_name]:
|
||||
if url.startswith(mirror_url):
|
||||
url_part = url.split(mirror_url)[1]
|
||||
|
@ -13,6 +13,7 @@ from gentoolkit.package import Package
|
||||
|
||||
from euscan import CONFIG, BLACKLIST_PACKAGES
|
||||
from euscan import handlers, output
|
||||
from euscan.out import from_mirror
|
||||
from euscan.helpers import version_blacklisted
|
||||
from euscan.version import is_version_stable
|
||||
from euscan.ebuild import package_from_ebuild
|
||||
@ -43,6 +44,31 @@ def filter_versions(cp, versions):
|
||||
for version in filtered
|
||||
]
|
||||
|
||||
def parse_src_uri(uris):
|
||||
ret = {}
|
||||
|
||||
uris = uris.split()
|
||||
uris.reverse()
|
||||
while uris:
|
||||
uri = uris.pop()
|
||||
|
||||
if '://' not in uri:
|
||||
continue
|
||||
if 'mirror://' in uri:
|
||||
uri = from_mirror(uri)
|
||||
|
||||
if uris and uris[-1] == "->":
|
||||
operator = uris.pop()
|
||||
file = uris.pop()
|
||||
else:
|
||||
file = os.path.basename(uri)
|
||||
|
||||
if file not in ret:
|
||||
ret[file] = []
|
||||
|
||||
ret[file].append(uri)
|
||||
|
||||
return ret
|
||||
|
||||
def scan_upstream(query, on_progress=None):
|
||||
"""
|
||||
@ -110,30 +136,16 @@ def scan_upstream(query, on_progress=None):
|
||||
"ebuild", pp.path(os.path.normpath(ebuild_path))
|
||||
)
|
||||
|
||||
uris, homepage, description = pkg.environment(('SRC_URI', 'HOMEPAGE', 'DESCRIPTION'))
|
||||
|
||||
output.metadata("repository", pkg.repo_name())
|
||||
output.metadata("homepage", pkg.environment("HOMEPAGE"))
|
||||
output.metadata("description", pkg.environment("DESCRIPTION"))
|
||||
output.metadata("homepage", homepage)
|
||||
output.metadata("description", description)
|
||||
else:
|
||||
uris = pkg.environment('SRC_URI')
|
||||
|
||||
cpv = pkg.cpv
|
||||
metadata = {
|
||||
"EAPI": portage.settings["EAPI"],
|
||||
"SRC_URI": pkg.environment("SRC_URI", False),
|
||||
}
|
||||
use = frozenset(portage.settings["PORTAGE_USE"].split())
|
||||
try:
|
||||
alist = porttree._parse_uri_map(cpv, metadata, use=use)
|
||||
aalist = porttree._parse_uri_map(cpv, metadata)
|
||||
except Exception as e:
|
||||
output.ewarn(pp.warn("%s\n" % str(e)))
|
||||
output.ewarn(
|
||||
pp.warn("Invalid SRC_URI for '%s'" % pp.pkgquery(cpv))
|
||||
)
|
||||
return None
|
||||
|
||||
if "mirror" in portage.settings.features:
|
||||
urls = aalist
|
||||
else:
|
||||
urls = alist
|
||||
urls = parse_src_uri(uris)
|
||||
|
||||
versions = handlers.scan(pkg, urls, on_progress)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user