def mirror_archive_filename(spec, fetcher, resourceId=None): """Get the name of the spec's archive in the mirror.""" if not spec.version.concrete: raise ValueError("mirror.path requires spec with concrete version.") if isinstance(fetcher, fs.URLFetchStrategy): if fetcher.expand_archive: # If we fetch with a URLFetchStrategy, use URL's archive type ext = url.determine_url_file_extension(fetcher.url) ext = ext or spec.package.versions[spec.package.version].get( 'extension', None) ext = ext.lstrip('.') if not ext: raise MirrorError( "%s version does not specify an extension" % spec.name + " and could not parse extension from %s" % fetcher.url) else: # If the archive shouldn't be expanded, don't check extension. ext = None else: # Otherwise we'll make a .tar.gz ourselves ext = 'tar.gz' if resourceId: filename = "%s-%s" % (resourceId, spec.version) + ".%s" % ext else: filename = "%s-%s" % (spec.package.name, spec.version) + ".%s" % ext return filename
def _determine_extension(fetcher): if isinstance(fetcher, fs.URLFetchStrategy): if fetcher.expand_archive: # If we fetch with a URLFetchStrategy, use URL's archive type ext = url.determine_url_file_extension(fetcher.url) if ext: # Remove any leading dots ext = ext.lstrip('.') else: msg = """\ Unable to parse extension from {0}. If this URL is for a tarball but does not include the file extension in the name, you can explicitly declare it with the following syntax: version('1.2.3', 'hash', extension='tar.gz') If this URL is for a download like a .jar or .whl that does not need to be expanded, or an uncompressed installation script, you can tell Spack not to expand it with the following syntax: version('1.2.3', 'hash', expand=False) """ raise MirrorError(msg.format(fetcher.url)) else: # If the archive shouldn't be expanded, don't check extension. ext = None else: # Otherwise we'll make a .tar.gz ourselves ext = 'tar.gz' return ext
def mirror_archive_filename(spec, fetcher, resource_id=None): """Get the name of the spec's archive in the mirror.""" if not spec.version.concrete: raise ValueError("mirror.path requires spec with concrete version.") if isinstance(fetcher, fs.URLFetchStrategy): if fetcher.expand_archive: # If we fetch with a URLFetchStrategy, use URL's archive type ext = url.determine_url_file_extension(fetcher.url) # If the filename does not end with a normal suffix, # see if the package explicitly declares the extension if not ext: ext = spec.package.versions[spec.package.version].get( 'extension', None) if ext: # Remove any leading dots ext = ext.lstrip('.') if not ext: msg = """\ Unable to parse extension from {0}. If this URL is for a tarball but does not include the file extension in the name, you can explicitly declare it with the following syntax: version('1.2.3', 'hash', extension='tar.gz') If this URL is for a download like a .jar or .whl that does not need to be expanded, or an uncompressed installation script, you can tell Spack not to expand it with the following syntax: version('1.2.3', 'hash', expand=False) """ raise MirrorError(msg.format(fetcher.url)) else: # If the archive shouldn't be expanded, don't check extension. ext = None else: # Otherwise we'll make a .tar.gz ourselves ext = 'tar.gz' if resource_id: filename = "%s-%s" % (resource_id, spec.version) + ".%s" % ext else: filename = "%s-%s" % (spec.package.name, spec.version) + ".%s" % ext return filename