Bug fixes for URLs and mirror fetching.
This commit is contained in:
parent
6fdfd83e6b
commit
fb3003f664
@ -71,8 +71,12 @@ def setup_parser(subparser):
|
|||||||
|
|
||||||
def mirror_add(args):
|
def mirror_add(args):
|
||||||
"""Add a mirror to Spack."""
|
"""Add a mirror to Spack."""
|
||||||
|
url = args.url
|
||||||
|
if url.startswith('/'):
|
||||||
|
url = 'file://' + url
|
||||||
|
|
||||||
config = spack.config.get_config('user')
|
config = spack.config.get_config('user')
|
||||||
config.set_value('mirror', args.name, 'url', args.url)
|
config.set_value('mirror', args.name, 'url', url)
|
||||||
config.write()
|
config.write()
|
||||||
|
|
||||||
|
|
||||||
@ -158,6 +162,9 @@ def mirror_create(args):
|
|||||||
" %-4d already present" % p,
|
" %-4d already present" % p,
|
||||||
" %-4d added" % m,
|
" %-4d added" % m,
|
||||||
" %-4d failed to fetch." % e)
|
" %-4d failed to fetch." % e)
|
||||||
|
if error:
|
||||||
|
tty.error("Failed downloads:")
|
||||||
|
colify(s.format("$_$@") for s in error)
|
||||||
|
|
||||||
|
|
||||||
def mirror(parser, args):
|
def mirror(parser, args):
|
||||||
|
@ -70,6 +70,7 @@ def concretize_version(self, spec):
|
|||||||
pkg = spec.package
|
pkg = spec.package
|
||||||
valid_versions = [v for v in pkg.available_versions
|
valid_versions = [v for v in pkg.available_versions
|
||||||
if any(v.satisfies(sv) for sv in spec.versions)]
|
if any(v.satisfies(sv) for sv in spec.versions)]
|
||||||
|
|
||||||
if valid_versions:
|
if valid_versions:
|
||||||
spec.versions = ver([valid_versions[-1]])
|
spec.versions = ver([valid_versions[-1]])
|
||||||
else:
|
else:
|
||||||
|
@ -559,7 +559,7 @@ def for_package_version(pkg, version):
|
|||||||
url = pkg.url_for_verison(version)
|
url = pkg.url_for_verison(version)
|
||||||
if not url:
|
if not url:
|
||||||
raise InvalidArgsError(pkg, version)
|
raise InvalidArgsError(pkg, version)
|
||||||
return URLFetchStrategy()
|
return URLFetchStrategy(url)
|
||||||
|
|
||||||
# Grab a dict of args out of the package version dict
|
# Grab a dict of args out of the package version dict
|
||||||
args = pkg.versions[version]
|
args = pkg.versions[version]
|
||||||
@ -574,6 +574,8 @@ def for_package_version(pkg, version):
|
|||||||
for fetcher in all_strategies:
|
for fetcher in all_strategies:
|
||||||
attrs = dict((attr, getattr(pkg, attr, None))
|
attrs = dict((attr, getattr(pkg, attr, None))
|
||||||
for attr in fetcher.required_attributes)
|
for attr in fetcher.required_attributes)
|
||||||
|
if 'url' in attrs:
|
||||||
|
attrs['url'] = pkg.url_for_version(version)
|
||||||
attrs.update(args)
|
attrs.update(args)
|
||||||
if fetcher.matches(attrs):
|
if fetcher.matches(attrs):
|
||||||
return fetcher(**attrs)
|
return fetcher(**attrs)
|
||||||
@ -581,12 +583,12 @@ def for_package_version(pkg, version):
|
|||||||
raise InvalidArgsError(pkg, version)
|
raise InvalidArgsError(pkg, version)
|
||||||
|
|
||||||
|
|
||||||
class FetchStrategyError(spack.error.SpackError):
|
class FetchError(spack.error.SpackError):
|
||||||
def __init__(self, msg, long_msg):
|
def __init__(self, msg, long_msg):
|
||||||
super(FetchStrategyError, self).__init__(msg, long_msg)
|
super(FetchError, self).__init__(msg, long_msg)
|
||||||
|
|
||||||
|
|
||||||
class FailedDownloadError(FetchStrategyError):
|
class FailedDownloadError(FetchError):
|
||||||
"""Raised wen a download fails."""
|
"""Raised wen a download fails."""
|
||||||
def __init__(self, url, msg=""):
|
def __init__(self, url, msg=""):
|
||||||
super(FailedDownloadError, self).__init__(
|
super(FailedDownloadError, self).__init__(
|
||||||
@ -594,18 +596,26 @@ def __init__(self, url, msg=""):
|
|||||||
self.url = url
|
self.url = url
|
||||||
|
|
||||||
|
|
||||||
class NoArchiveFileError(FetchStrategyError):
|
class NoArchiveFileError(FetchError):
|
||||||
def __init__(self, msg, long_msg):
|
def __init__(self, msg, long_msg):
|
||||||
super(NoArchiveFileError, self).__init__(msg, long_msg)
|
super(NoArchiveFileError, self).__init__(msg, long_msg)
|
||||||
|
|
||||||
|
|
||||||
class NoDigestError(FetchStrategyError):
|
class NoDigestError(FetchError):
|
||||||
def __init__(self, msg, long_msg):
|
def __init__(self, msg, long_msg):
|
||||||
super(NoDigestError, self).__init__(msg, long_msg)
|
super(NoDigestError, self).__init__(msg, long_msg)
|
||||||
|
|
||||||
|
|
||||||
class InvalidArgsError(FetchStrategyError):
|
class InvalidArgsError(FetchError):
|
||||||
def __init__(self, pkg, version):
|
def __init__(self, pkg, version):
|
||||||
msg = "Could not construct a fetch strategy for package %s at version %s"
|
msg = "Could not construct a fetch strategy for package %s at version %s"
|
||||||
msg %= (pkg.name, version)
|
msg %= (pkg.name, version)
|
||||||
super(InvalidArgsError, self).__init__(msg)
|
super(InvalidArgsError, self).__init__(msg)
|
||||||
|
|
||||||
|
|
||||||
|
class ChecksumError(FetchError):
|
||||||
|
"""Raised when archive fails to checksum."""
|
||||||
|
def __init__(self, message, long_msg=None):
|
||||||
|
super(ChecksumError, self).__init__(message, long_msg)
|
||||||
|
|
||||||
|
|
||||||
|
@ -146,7 +146,7 @@ def create(path, specs, **kwargs):
|
|||||||
archive_file = mirror_archive_filename(spec)
|
archive_file = mirror_archive_filename(spec)
|
||||||
archive_path = join_path(subdir, archive_file)
|
archive_path = join_path(subdir, archive_file)
|
||||||
|
|
||||||
if os.path.exists(archive_file):
|
if os.path.exists(archive_path):
|
||||||
tty.msg("%s is already present. Skipping." % spec.format("$_$@"))
|
tty.msg("%s is already present. Skipping." % spec.format("$_$@"))
|
||||||
present.append(spec)
|
present.append(spec)
|
||||||
continue
|
continue
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
import spack
|
import spack
|
||||||
import spack.config
|
import spack.config
|
||||||
import spack.fetch_strategy as fetch_strategy
|
import spack.fetch_strategy as fs
|
||||||
import spack.error
|
import spack.error
|
||||||
|
|
||||||
|
|
||||||
@ -83,8 +83,8 @@ def __init__(self, url_or_fetch_strategy, **kwargs):
|
|||||||
stage will be given a unique name automatically.
|
stage will be given a unique name automatically.
|
||||||
"""
|
"""
|
||||||
if isinstance(url_or_fetch_strategy, basestring):
|
if isinstance(url_or_fetch_strategy, basestring):
|
||||||
self.fetcher = fetch_strategy.from_url(url_or_fetch_strategy)
|
self.fetcher = fs.from_url(url_or_fetch_strategy)
|
||||||
elif isinstance(url_or_fetch_strategy, fetch_strategy.FetchStrategy):
|
elif isinstance(url_or_fetch_strategy, fs.FetchStrategy):
|
||||||
self.fetcher = url_or_fetch_strategy
|
self.fetcher = url_or_fetch_strategy
|
||||||
else:
|
else:
|
||||||
raise ValueError("Can't construct Stage without url or fetch strategy")
|
raise ValueError("Can't construct Stage without url or fetch strategy")
|
||||||
@ -198,7 +198,10 @@ def _setup(self):
|
|||||||
@property
|
@property
|
||||||
def archive_file(self):
|
def archive_file(self):
|
||||||
"""Path to the source archive within this stage directory."""
|
"""Path to the source archive within this stage directory."""
|
||||||
paths = [os.path.join(self.path, os.path.basename(self.url))]
|
if not isinstance(self.fetcher, fs.URLFetchStrategy):
|
||||||
|
return None
|
||||||
|
|
||||||
|
paths = [os.path.join(self.path, os.path.basename(self.fetcher.url))]
|
||||||
if self.mirror_path:
|
if self.mirror_path:
|
||||||
paths.append(os.path.join(self.path, os.path.basename(self.mirror_path)))
|
paths.append(os.path.join(self.path, os.path.basename(self.mirror_path)))
|
||||||
|
|
||||||
@ -242,9 +245,9 @@ def fetch(self):
|
|||||||
urls = ["%s/%s" % (m, self.mirror_path) for m in _get_mirrors()]
|
urls = ["%s/%s" % (m, self.mirror_path) for m in _get_mirrors()]
|
||||||
|
|
||||||
digest = None
|
digest = None
|
||||||
if isinstance(self.fetcher, fetch_strategy.URLFetchStrategy):
|
if isinstance(self.fetcher, fs.URLFetchStrategy):
|
||||||
digest = self.fetcher.digest
|
digest = self.fetcher.digest
|
||||||
fetchers = [fetch_strategy.URLFetchStrategy(url, digest)
|
fetchers = [fs.URLFetchStrategy(url, digest)
|
||||||
for url in urls] + fetchers
|
for url in urls] + fetchers
|
||||||
for f in fetchers:
|
for f in fetchers:
|
||||||
f.set_stage(self)
|
f.set_stage(self)
|
||||||
@ -365,12 +368,6 @@ def __init__(self, message, long_message=None):
|
|||||||
super(self, StageError).__init__(message, long_message)
|
super(self, StageError).__init__(message, long_message)
|
||||||
|
|
||||||
|
|
||||||
class ChecksumError(StageError):
|
|
||||||
"""Raised when archive fails to checksum."""
|
|
||||||
def __init__(self, message, long_msg=None):
|
|
||||||
super(ChecksumError, self).__init__(message, long_msg)
|
|
||||||
|
|
||||||
|
|
||||||
class RestageError(StageError):
|
class RestageError(StageError):
|
||||||
def __init__(self, message, long_msg=None):
|
def __init__(self, message, long_msg=None):
|
||||||
super(RestageError, self).__init__(message, long_msg)
|
super(RestageError, self).__init__(message, long_msg)
|
||||||
@ -382,4 +379,4 @@ def __init__(self, message, long_msg=None):
|
|||||||
|
|
||||||
|
|
||||||
# Keep this in namespace for convenience
|
# Keep this in namespace for convenience
|
||||||
FailedDownloadError = spack.fetch_strategy.FailedDownloadError
|
FailedDownloadError = fs.FailedDownloadError
|
||||||
|
@ -27,9 +27,8 @@
|
|||||||
class Libmonitor(Package):
|
class Libmonitor(Package):
|
||||||
"""Libmonitor is a library for process and thread control."""
|
"""Libmonitor is a library for process and thread control."""
|
||||||
homepage = "http://hpctoolkit.org"
|
homepage = "http://hpctoolkit.org"
|
||||||
url = "file:///g/g0/legendre/tools/oss/openspeedshop-release-2.1/SOURCES/libmonitor-20130218.tar.gz"
|
|
||||||
|
|
||||||
version('20130218', 'aa85c2c580e2dafb823cc47b09374279')
|
version('20130218', svn='https://outreach.scidac.gov/svn/libmonitor/trunk', revision=146)
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=" + prefix)
|
configure("--prefix=" + prefix)
|
||||||
|
@ -7,9 +7,9 @@ class Paraver(Package):
|
|||||||
is expressed on its input trace format. Traces for parallel MPI,
|
is expressed on its input trace format. Traces for parallel MPI,
|
||||||
OpenMP and other programs can be genereated with Extrae."""
|
OpenMP and other programs can be genereated with Extrae."""
|
||||||
homepage = "http://www.bsc.es/computer-sciences/performance-tools/paraver"
|
homepage = "http://www.bsc.es/computer-sciences/performance-tools/paraver"
|
||||||
url = "http://www.bsc.es/ssl/apps/performanceTools/files/paraver-sources-4.5.2.tar.gz"
|
url = "http://www.bsc.es/ssl/apps/performanceTools/files/paraver-sources-4.5.3.tar.gz"
|
||||||
|
|
||||||
version('4.5.2', 'ea463dd494519395c99ebae294edee17')
|
version('4.5.3', '625de9ec0d639acd18d1aaa644b38f72')
|
||||||
|
|
||||||
depends_on("boost")
|
depends_on("boost")
|
||||||
#depends_on("extrae")
|
#depends_on("extrae")
|
||||||
|
@ -5,8 +5,8 @@ class Stat(Package):
|
|||||||
homepage = "http://paradyn.org/STAT/STAT.html"
|
homepage = "http://paradyn.org/STAT/STAT.html"
|
||||||
url = "https://github.com/lee218llnl/stat/archive/v2.0.0.tar.gz"
|
url = "https://github.com/lee218llnl/stat/archive/v2.0.0.tar.gz"
|
||||||
|
|
||||||
version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b')
|
|
||||||
version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91')
|
version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91')
|
||||||
|
version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b')
|
||||||
|
|
||||||
depends_on('libdwarf')
|
depends_on('libdwarf')
|
||||||
depends_on('dyninst')
|
depends_on('dyninst')
|
||||||
|
Loading…
Reference in New Issue
Block a user