def checksum(parser, args): # Make sure the user provided a package and not a URL if not valid_fully_qualified_module_name(args.package): tty.die("`spack checksum` accepts package names, not URLs.") # Get the package we're going to generate checksums for pkg = spack.repo.get(args.package) if args.versions: # If the user asked for specific versions, use those url_dict = {} for version in args.versions: version = ver(version) if not isinstance(version, Version): tty.die("Cannot generate checksums for version lists or " "version ranges. Use unambiguous versions.") url_dict[version] = pkg.url_for_version(version) else: # Otherwise, see what versions we can find online url_dict = pkg.fetch_remote_versions() if not url_dict: tty.die("Could not find any versions for {0}".format(pkg.name)) version_lines = spack.util.web.get_checksums_for_versions( url_dict, pkg.name, keep_stage=args.keep_stage) print() print(version_lines)
def checksum(parser, args): # Did the user pass 'package@version' string? if len(args.versions) == 0 and '@' in args.package: args.versions = [args.package.split('@')[1]] args.package = args.package.split('@')[0] # Make sure the user provided a package and not a URL if not valid_fully_qualified_module_name(args.package): tty.die("`spack checksum` accepts package names, not URLs.") # Get the package we're going to generate checksums for pkg = spack.repo.get(args.package) url_dict = {} if args.versions: # If the user asked for specific versions, use those for version in args.versions: version = ver(version) if not isinstance(version, Version): tty.die("Cannot generate checksums for version lists or " "version ranges. Use unambiguous versions.") url_dict[version] = pkg.url_for_version(version) elif args.preferred: version = preferred_version(pkg) url_dict = dict([(version, pkg.url_for_version(version))]) else: # Otherwise, see what versions we can find online url_dict = pkg.fetch_remote_versions() if not url_dict: tty.die("Could not find any versions for {0}".format(pkg.name)) # And ensure the specified version URLs take precedence, if available try: explicit_dict = {} for v in pkg.versions: if not v.isdevelop(): explicit_dict[v] = pkg.url_for_version(v) url_dict.update(explicit_dict) except spack.package.NoURLError: pass version_lines = spack.stage.get_checksums_for_versions( url_dict, pkg.name, keep_stage=args.keep_stage, batch=(args.batch or len(args.versions) > 0 or len(url_dict) == 1), latest=args.latest, fetch_options=pkg.fetch_options) print() print(version_lines) print()
def checksum(parser, args): # Did the user pass 'package@version' string? if len(args.versions) == 0 and '@' in args.package: args.versions = [args.package.split('@')[1]] args.package = args.package.split('@')[0] # Make sure the user provided a package and not a URL if not valid_fully_qualified_module_name(args.package): tty.die("`spack checksum` accepts package names, not URLs.") # Get the package we're going to generate checksums for pkg = spack.repo.get(args.package) url_dict = {} versions = args.versions if (not versions) and args.preferred: versions = [preferred_version(pkg)] if versions: remote_versions = None for version in versions: version = ver(version) if not isinstance(version, Version): tty.die("Cannot generate checksums for version lists or " "version ranges. Use unambiguous versions.") url = pkg.find_valid_url_for_version(version) if url is not None: url_dict[version] = url continue # if we get here, it's because no valid url was provided by the package # do expensive fallback to try to recover if remote_versions is None: remote_versions = pkg.fetch_remote_versions() if version in remote_versions: url_dict[version] = remote_versions[version] else: url_dict = pkg.fetch_remote_versions() if not url_dict: tty.die("Could not find any versions for {0}".format(pkg.name)) version_lines = spack.stage.get_checksums_for_versions( url_dict, pkg.name, keep_stage=args.keep_stage, batch=(args.batch or len(args.versions) > 0 or len(url_dict) == 1), latest=args.latest, fetch_options=pkg.fetch_options) print() print(version_lines) print()
def get_name(args): """Get the name of the package based on the supplied arguments. If a name was provided, always use that. Otherwise, if a URL was provided, extract the name from that. Otherwise, use a default. Args: args (param argparse.Namespace): The arguments given to ``spack create`` Returns: str: The name of the package """ # Default package name name = 'example' if args.name is not None: # Use a user-supplied name if one is present name = args.name if len(args.name.strip()) > 0: tty.msg("Using specified package name: '{0}'".format(name)) else: tty.die("A package name must be provided when using the option.") elif args.url is not None: # Try to guess the package name based on the URL try: name = parse_name(args.url) if name != args.url: desc = 'URL' else: desc = 'package name' tty.msg("This looks like a {0} for {1}".format(desc, name)) except UndetectableNameError: tty.die("Couldn't guess a name for this package.", " Please report this bug. In the meantime, try running:", " `spack create --name <name> <url>`") name = simplify_name(name) if not valid_fully_qualified_module_name(name): tty.die("Package name can only contain a-z, 0-9, and '-'") return name
def get_name(args): """Get the name of the package based on the supplied arguments. If a name was provided, always use that. Otherwise, if a URL was provided, extract the name from that. Otherwise, use a default. Args: args (param argparse.Namespace): The arguments given to ``spack create`` Returns: str: The name of the package """ # Default package name name = 'example' if args.name: # Use a user-supplied name if one is present name = args.name tty.msg("Using specified package name: '{0}'".format(name)) elif args.url: # Try to guess the package name based on the URL try: name = parse_name(args.url) tty.msg("This looks like a URL for {0}".format(name)) except UndetectableNameError: tty.die("Couldn't guess a name for this package.", " Please report this bug. In the meantime, try running:", " `spack create --name <name> <url>`") name = simplify_name(name) if not valid_fully_qualified_module_name(name): tty.die("Package name can only contain a-z, 0-9, and '-'") return name