# 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)