def get_versions(args, name): """Returns a list of versions and hashes for a package. Also returns a BuildSystemGuesser object. Returns default values if no URL is provided. Args: args (argparse.Namespace): The arguments given to ``spack create`` name (str): The name of the package Returns: tuple: versions and hashes, and a BuildSystemGuesser object """ # Default version with hash hashed_versions = """\ # FIXME: Add proper versions and checksums here. # version('1.2.3', '0123456789abcdef0123456789abcdef')""" # Default version without hash unhashed_versions = """\ # FIXME: Add proper versions here. # version('1.2.4')""" # Default guesser guesser = BuildSystemGuesser() valid_url = True try: spack.util.url.require_url_format(args.url) if args.url.startswith('file://'): valid_url = False # No point in spidering these except (ValueError, TypeError): valid_url = False if args.url is not None and args.template != 'bundle' and valid_url: # Find available versions try: url_dict = spack.util.web.find_versions_of_archive(args.url) except UndetectableVersionError: # Use fake versions tty.warn("Couldn't detect version in: {0}".format(args.url)) return hashed_versions, guesser if not url_dict: # If no versions were found, revert to what the user provided version = parse_version(args.url) url_dict = {version: args.url} versions = spack.stage.get_checksums_for_versions( url_dict, name, first_stage_function=guesser, keep_stage=args.keep_stage, batch=(args.batch or len(url_dict) == 1)) else: versions = unhashed_versions return versions, guesser
def test_url_versions(self): """Ensure that url_for_version does the right thing for at least the default version of each package. """ for pkg in spack.db.all_packages(): v = url.parse_version(pkg.url) self.assertEqual(pkg.url, pkg.url_for_version(v))
def default_version(self): """Get the version in the default URL for this package, or fails.""" try: return url.parse_version(self.__class__.url) except UndetectableVersionError: raise PackageError( "Couldn't extract a default version from %s." % self.url, " You must specify it explicitly in the package file.")
def url_list_parsing(args, urls, url, pkg): """Helper function for :func:`url_list`. Args: args (argparse.Namespace): The arguments given to ``spack url list`` urls (set): List of URLs that have already been added url (str or None): A URL to potentially add to ``urls`` depending on ``args`` pkg (spack.package.PackageBase): The Spack package Returns: set: The updated set of ``urls`` """ if url: if args.correct_name or args.incorrect_name: # Attempt to parse the name try: name = parse_name(url) if (args.correct_name and name_parsed_correctly(pkg, name)): # Add correctly parsed URLs urls.add(url) elif (args.incorrect_name and not name_parsed_correctly(pkg, name)): # Add incorrectly parsed URLs urls.add(url) except UndetectableNameError: if args.incorrect_name: # Add incorrectly parsed URLs urls.add(url) elif args.correct_version or args.incorrect_version: # Attempt to parse the version try: version = parse_version(url) if (args.correct_version and version_parsed_correctly(pkg, version)): # Add correctly parsed URLs urls.add(url) elif (args.incorrect_version and not version_parsed_correctly(pkg, version)): # Add incorrectly parsed URLs urls.add(url) except UndetectableVersionError: if args.incorrect_version: # Add incorrectly parsed URLs urls.add(url) else: urls.add(url) return urls
def get_versions(args, name): """Returns a list of versions and hashes for a package. Also returns a BuildSystemGuesser object. Returns default values if no URL is provided. Args: args (argparse.Namespace): The arguments given to ``spack create`` name (str): The name of the package Returns: str and BuildSystemGuesser: Versions and hashes, and a BuildSystemGuesser object """ # Default version, hash, and guesser versions = """\ # FIXME: Add proper versions and checksums here. # version('1.2.3', '0123456789abcdef0123456789abcdef')""" guesser = BuildSystemGuesser() if args.url: # Find available versions try: url_dict = spack.util.web.find_versions_of_archive(args.url) except UndetectableVersionError: # Use fake versions tty.warn("Couldn't detect version in: {0}".format(args.url)) return versions, guesser if not url_dict: # If no versions were found, revert to what the user provided version = parse_version(args.url) url_dict = {version: args.url} versions = spack.util.web.get_checksums_for_versions( url_dict, name, first_stage_function=guesser, keep_stage=args.keep_stage) return versions, guesser