Remove view print
for now.
This commit is contained in:
parent
1bbe6409e1
commit
126fc10b9d
2 changed files with 3 additions and 187 deletions
|
@ -330,124 +330,6 @@ of libelf would look like this:
|
||||||
|
|
||||||
The full spec syntax is discussed in detail in :ref:`sec-specs`.
|
The full spec syntax is discussed in detail in :ref:`sec-specs`.
|
||||||
|
|
||||||
``spack view print``
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
``spack view print`` is a subcommand of ``spack view`` which displays information about one or more installed packages and their dependencies using a user-provided format string. The string can reverence variables in a shell-like manner for example ``$variable`` or ``${variable}text``. It can also include ``\t`` for tabs and ``\n`` for new lines.
|
|
||||||
|
|
||||||
Some of the supported variables are:
|
|
||||||
|
|
||||||
``name``
|
|
||||||
The package name.
|
|
||||||
|
|
||||||
``version``
|
|
||||||
The package version.
|
|
||||||
|
|
||||||
``spec``
|
|
||||||
The package specification.
|
|
||||||
|
|
||||||
``root``
|
|
||||||
The root specification.
|
|
||||||
|
|
||||||
``prefix``
|
|
||||||
The installation directory.
|
|
||||||
|
|
||||||
``variants``
|
|
||||||
The collection of variants, if any.
|
|
||||||
|
|
||||||
``namespace``
|
|
||||||
The package repository name space.
|
|
||||||
|
|
||||||
``compiler``
|
|
||||||
The compiler \`name@versoin\` used to build the package.
|
|
||||||
|
|
||||||
``architecture``
|
|
||||||
The architecture targeted by the compiler.
|
|
||||||
|
|
||||||
``dependencies``
|
|
||||||
A comma-separated list of names of packages on which the package depends.
|
|
||||||
|
|
||||||
``dependents``
|
|
||||||
A comma-separated list of names of packages which depend on the package.
|
|
||||||
|
|
||||||
``hash``
|
|
||||||
The Spack hash for the package.
|
|
||||||
|
|
||||||
``url``
|
|
||||||
The source URL for the package.
|
|
||||||
|
|
||||||
``stage``
|
|
||||||
The directory for staging the build.
|
|
||||||
|
|
||||||
``build_log``
|
|
||||||
The path to the build log file.
|
|
||||||
|
|
||||||
``rpath``
|
|
||||||
The colon-separated library \`RPATH\` used in building the package.
|
|
||||||
|
|
||||||
Here are some example uses of `spack view print`. A simple line-oriented report of information can be produced:
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
$ spack view print '$name\t$version\t$hash\n' cmake@3.5.2
|
|
||||||
ncurses 6.0 bvbu4ixbnvtodpik4qzljlx3ukpyfrcz
|
|
||||||
zlib 1.2.8 ckki7zlryxrsetfqkgoxxahlhqqjni7n
|
|
||||||
openssl 1.0.2g 6zbar63sciso253nptxyrnhupymo7oyi
|
|
||||||
cmake 3.5.2 wprvmoczkpw4tiy5ybuk5zr7saus2d7g
|
|
||||||
|
|
||||||
There are better ways to do this but a slow-and-dirty shell init procedure can be formed:
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
$ spack view print 'export PATH="${prefix}/bin:$$PATH"\n' m4
|
|
||||||
export PATH="/spack/opt/spack/linux-x86_64/gcc-5.2.1/libsigsegv-2.10-h6hsv76hffcjoe3nsaihzxemniwiedu2/bin:$PATH"
|
|
||||||
export PATH="/spack/opt/spack/linux-x86_64/gcc-5.2.1/m4-1.4.17-a4ikhddnk2zonr66mbwaqb226uhigcrp/bin:$PATH"
|
|
||||||
$ eval $(spack view print 'export PATH="${prefix}/bin:$$PATH"\n' m4)
|
|
||||||
|
|
||||||
Or, maybe you have some external application that can chew on Spack data in which case you can dump it to some easily parsed markup syntax such as YAML:
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
|
|
||||||
$ spack view print '${name}:\n - version: ${version}\n - url : ${url}\n - spec: ${spec}\n - prefix: ${prefix}\n - root : ${root}\n - stage : ${stage}\n - log: ${build_log}\n' m4
|
|
||||||
|
|
||||||
Which might produce something like:
|
|
||||||
|
|
||||||
.. code-block:: yaml
|
|
||||||
|
|
||||||
libsigsegv:
|
|
||||||
- version: 2.10
|
|
||||||
- url : ftp://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.10.tar.gz
|
|
||||||
- spec: libsigsegv@2.10%gcc@5.2.1=linux-x86_64-h6hsv76
|
|
||||||
- prefix: /spack/opt/spack/linux-x86_64/gcc-5.2.1/libsigsegv-2.10-h6hsv76hffcjoe3nsaihzxemniwiedu2
|
|
||||||
- root : m4@1.4.17%gcc@5.2.1+sigsegv=linux-x86_64^libsigsegv@2.10%gcc@5.2.1=linux-x86_64
|
|
||||||
- stage : /spack/var/spack/stage/libsigsegv-2.10-h6hsv76hffcjoe3nsaihzxemniwiedu2
|
|
||||||
- log: /spack/opt/spack/linux-x86_64/gcc-5.2.1/libsigsegv-2.10-h6hsv76hffcjoe3nsaihzxemniwiedu2/.spack/build.out
|
|
||||||
m4:
|
|
||||||
- version: 1.4.17
|
|
||||||
- url : ftp://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.gz
|
|
||||||
- spec: m4@1.4.17%gcc@5.2.1+sigsegv=linux-x86_64-a4ikhdd
|
|
||||||
- prefix: /spack/opt/spack/linux-x86_64/gcc-5.2.1/m4-1.4.17-a4ikhddnk2zonr66mbwaqb226uhigcrp
|
|
||||||
- root : m4@1.4.17%gcc@5.2.1+sigsegv=linux-x86_64^libsigsegv@2.10%gcc@5.2.1=linux-x86_64
|
|
||||||
- stage : /spack/var/spack/stage/m4-1.4.17-a4ikhddnk2zonr66mbwaqb226uhigcrp
|
|
||||||
- log: /spack/opt/spack/linux-x86_64/gcc-5.2.1/m4-1.4.17-a4ikhddnk2zonr66mbwaqb226uhigcrp/.spack/build.out
|
|
||||||
|
|
||||||
Or, maybe you want to do something with information about package dependencies by generating some ready-to-import Python code holding the tree:
|
|
||||||
|
|
||||||
.. code-block:: sh
|
|
||||||
|
|
||||||
$ spack view print '$name = dict(name = "$name", parents = [$dependencies], children = [$dependents])\n' cmake@3.5.2
|
|
||||||
|
|
||||||
Producing this Python code
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
ncurses = dict(name = "ncurses", parents = []])
|
|
||||||
zlib = dict(name = "zlib", parents = []])
|
|
||||||
openssl = dict(name = "openssl", parents = [zlib]])
|
|
||||||
cmake = dict(name = "cmake", parents = [ncurses,openssl]])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Compiler configuration
|
Compiler configuration
|
||||||
|
|
|
@ -24,9 +24,8 @@
|
||||||
##############################################################################
|
##############################################################################
|
||||||
'''Produce a "view" of a Spack DAG.
|
'''Produce a "view" of a Spack DAG.
|
||||||
|
|
||||||
A "view" is the product of applying a function on a set of package specs.
|
A "view" is file hierarchy representing the union of a number of
|
||||||
|
Spack-installed package file hierarchies. The union is formed from:
|
||||||
This set consists of:
|
|
||||||
|
|
||||||
- specs resolved from the package names given by the user (the seeds)
|
- specs resolved from the package names given by the user (the seeds)
|
||||||
|
|
||||||
|
@ -35,7 +34,7 @@
|
||||||
- less any specs with names matching the regular expressions given by
|
- less any specs with names matching the regular expressions given by
|
||||||
`--exclude`
|
`--exclude`
|
||||||
|
|
||||||
The `view` command provides a number of functions (the "actions"):
|
The `view` can be built and tore down via a number of methods (the "actions"):
|
||||||
|
|
||||||
- symlink :: a file system view which is a directory hierarchy that is
|
- symlink :: a file system view which is a directory hierarchy that is
|
||||||
the union of the hierarchies of the installed packages in the DAG
|
the union of the hierarchies of the installed packages in the DAG
|
||||||
|
@ -46,8 +45,6 @@
|
||||||
- statlink :: a view producing a status report of a symlink or
|
- statlink :: a view producing a status report of a symlink or
|
||||||
hardlink view.
|
hardlink view.
|
||||||
|
|
||||||
- format :: a view printing one string per spec following a given format.
|
|
||||||
|
|
||||||
The file system view concept is imspired by Nix, implemented by
|
The file system view concept is imspired by Nix, implemented by
|
||||||
brett.viren@gmail.com ca 2016.
|
brett.viren@gmail.com ca 2016.
|
||||||
|
|
||||||
|
@ -68,7 +65,6 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
|
||||||
import spack
|
import spack
|
||||||
import spack.cmd
|
import spack.cmd
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
|
@ -117,13 +113,6 @@ def setup_parser(sp):
|
||||||
help="Path to file system view directory.")
|
help="Path to file system view directory.")
|
||||||
act.add_argument('specs', **specs_opts)
|
act.add_argument('specs', **specs_opts)
|
||||||
|
|
||||||
# The formatted print action.
|
|
||||||
act = ssp.add_parser('print',
|
|
||||||
help="Print a string to stdout based on given format")
|
|
||||||
act.add_argument('format', nargs=1,
|
|
||||||
help="Format describing per-package printout.")
|
|
||||||
act.add_argument('specs', **specs_opts)
|
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -190,42 +179,6 @@ def flatten(seeds, descend=True):
|
||||||
return flat
|
return flat
|
||||||
|
|
||||||
|
|
||||||
def spec2dict(spec):
|
|
||||||
'Convert info in a spec into a simple dictionary.'
|
|
||||||
|
|
||||||
# Expclitly convert instead of just returning spec.__dict__ as
|
|
||||||
# some things need processing or are properties.
|
|
||||||
#
|
|
||||||
pkg = spec.package
|
|
||||||
inst_deps = ','.join([s.name for s in pkg.installed_dependents]),
|
|
||||||
ret = dict(name=spec.name,
|
|
||||||
spec=spec.short_spec,
|
|
||||||
colorspec=spec.cshort_spec, # color
|
|
||||||
root=spec.root,
|
|
||||||
prefix=spec.prefix,
|
|
||||||
version=spec.version,
|
|
||||||
variants=spec.variants,
|
|
||||||
namespace=spec.namespace,
|
|
||||||
compiler=spec.compiler,
|
|
||||||
architecture=spec.architecture,
|
|
||||||
dependencies=','.join(spec.dependencies.keys()),
|
|
||||||
dependents=','.join(spec.dependents.keys()),
|
|
||||||
external=spec.external or "False",
|
|
||||||
hash=spec.dag_hash(),
|
|
||||||
|
|
||||||
# package related:
|
|
||||||
url=pkg.url,
|
|
||||||
stage=pkg.stage.path,
|
|
||||||
installed=pkg.installed,
|
|
||||||
installed_dependents=inst_deps,
|
|
||||||
build_log=pkg.build_log_path,
|
|
||||||
rpath=':'.join(pkg.rpath),
|
|
||||||
|
|
||||||
# ...
|
|
||||||
)
|
|
||||||
return ret
|
|
||||||
|
|
||||||
|
|
||||||
def check_one(spec, path, verbose=False):
|
def check_one(spec, path, verbose=False):
|
||||||
'Check status of view in path against spec'
|
'Check status of view in path against spec'
|
||||||
dotspack = os.path.join(path, '.spack', spec.name)
|
dotspack = os.path.join(path, '.spack', spec.name)
|
||||||
|
@ -326,25 +279,6 @@ def visitor_statlink(specs, args):
|
||||||
visitor_check = visitor_statlink
|
visitor_check = visitor_statlink
|
||||||
|
|
||||||
|
|
||||||
def visitor_print(specs, args):
|
|
||||||
'Print a string for each spec using args.format.'
|
|
||||||
fmt = args.format[0]
|
|
||||||
from string import Template
|
|
||||||
t = Template(fmt)
|
|
||||||
|
|
||||||
for spec in specs:
|
|
||||||
kwds = spec2dict(spec)
|
|
||||||
try:
|
|
||||||
text = t.substitute(kwds)
|
|
||||||
except KeyError:
|
|
||||||
tty.error("Format error, use keywords: %s" %
|
|
||||||
(', '.join(kwds.keys()), ))
|
|
||||||
raise
|
|
||||||
# argparser escapes these
|
|
||||||
text = text.replace(r'\n', '\n').replace(r'\t', '\t')
|
|
||||||
sys.stdout.write(text)
|
|
||||||
|
|
||||||
|
|
||||||
def view(parser, args):
|
def view(parser, args):
|
||||||
'Produce a view of a set of packages.'
|
'Produce a view of a set of packages.'
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue