Source code for spack.cmd.resource

# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from __future__ import print_function

import os

import llnl.util.tty as tty
import llnl.util.tty.color as color

import spack.repo

description = "list downloadable resources (tarballs, repos, patches, etc.)"
section = "basic"
level = "long"

[docs]def setup_parser(subparser): sp = subparser.add_subparsers( metavar='SUBCOMMAND', dest='resource_command') list_parser = sp.add_parser('list', help=resource_list.__doc__) list_parser.add_argument('--only-hashes', action='store_true', help='only print sha256 hashes of resources') show_parser = sp.add_parser('show', help=resource_show.__doc__) show_parser.add_argument('hash', action='store')
def _show_patch(sha256): """Show a record from the patch index.""" patches = spack.repo.path.patch_index.index data = patches.get(sha256) if not data: candidates = [k for k in patches if k.startswith(sha256)] if not candidates: tty.die('no such resource: %s' % sha256) elif len(candidates) > 1: tty.die('%s: ambiguous hash prefix. Options are:', *candidates) sha256 = candidates[0] data = patches.get(sha256) color.cprint('@c{%s}' % sha256) for package, rec in data.items(): owner = rec['owner'] if 'relative_path' in rec: pkg_dir = spack.repo.get(owner).package_dir path = os.path.join(pkg_dir, rec['relative_path']) print(" path: %s" % path) else: print(" url: %s" % rec['url']) print(" applies to: %s" % package) if owner != package: print(" patched by: %s" % owner)
[docs]def resource_list(args): """list all resources known to spack (currently just patches)""" patches = spack.repo.path.patch_index.index for sha256 in patches: if args.only_hashes: print(sha256) else: _show_patch(sha256)
[docs]def resource_show(args): """show a resource, identified by its checksum""" _show_patch(args.hash)
[docs]def resource(parser, args): action = { 'list': resource_list, 'show': resource_show } action[args.resource_command](args)