aboutsummaryrefslogtreecommitdiff
path: root/pym
diff options
context:
space:
mode:
authorCorentin Chary <corentin.chary@gmail.com>2012-08-06 23:30:29 +0200
committerCorentin Chary <corentin.chary@gmail.com>2012-08-06 23:30:29 +0200
commitf6e2882b445a7c81679b649c03e4a4d2130ff85c (patch)
tree66305ac61a40d2a13a935805e419627b441b949e /pym
parenteuscan/handlers: fix cpan version comparaisons (diff)
downloadeuscan-f6e2882b445a7c81679b649c03e4a4d2130ff85c.tar.gz
euscan-f6e2882b445a7c81679b649c03e4a4d2130ff85c.tar.bz2
euscan-f6e2882b445a7c81679b649c03e4a4d2130ff85c.zip
euscan: optimize SRC_URI fetching
Signed-off-by: Corentin Chary <corentin.chary@gmail.com>
Diffstat (limited to 'pym')
-rw-r--r--pym/euscan/out.py22
-rw-r--r--pym/euscan/scan.py54
2 files changed, 53 insertions, 23 deletions
diff --git a/pym/euscan/out.py b/pym/euscan/out.py
index 65947ee..ab97b69 100644
--- a/pym/euscan/out.py
+++ b/pym/euscan/out.py
@@ -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]
diff --git a/pym/euscan/scan.py b/pym/euscan/scan.py
index a55c6d9..cbbd97f 100644
--- a/pym/euscan/scan.py
+++ b/pym/euscan/scan.py
@@ -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)