Env help: expand and refine subcommand help and descriptions (#47089)

This PR is in response to a question in the `environments` slack channel (https://spackpm.slack.com/archives/CMHK7MF51/p1729200068557219) about inadequate CLI help/documentation for one specific subcommand.

This PR uses the approach I took for the descriptions and help for `spack test` subcommands.  Namely, I use the first line of the relevant docstring as the description, which is shown per subcommand in `spack env -h`, and the entire docstring as the help.  I then added, where it seemed appropriate, help.  I also tweaked argument docstrings to tighten them up, make consistent with similar arguments elsewhere in the command, and elaborate when it seemed important.  (The only subcommand I didn't touch is `loads`.)

For example, before:
```
$ spack env update -h
usage: spack env update [-hy] env

positional arguments:
  env               name or directory of the environment to activate

optional arguments:
  -h, --help        show this help message and exit
  -y, --yes-to-all  assume "yes" is the answer to every confirmation request
```

After the changes in this PR:
```
$ spack env update -h
usage: spack env update [-hy] env

update the environment manifest to the latest schema format

    update the environment to the latest schema format, which may not be
    readable by older versions of spack

    a backup copy of the manifest is retained in case there is a need to revert
    this operation
    

positional arguments:
  env               name or directory of the environment

optional arguments:
  -h, --help        show this help message and exit
  -y, --yes-to-all  assume "yes" is the answer to every confirmation request
```

---------

Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
This commit is contained in:
Tamara Dahlgren 2024-10-24 13:55:00 -07:00 committed by GitHub
parent 65bb3a12ea
commit 1b0631b69e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 130 additions and 95 deletions

View File

@ -57,35 +57,41 @@
# env create # env create
# #
def env_create_setup_parser(subparser): def env_create_setup_parser(subparser):
"""create a new environment""" """create a new environment
subparser.add_argument("env_name", metavar="env", help="name or directory of environment")
create a new environment or, optionally, copy an existing environment
a manifest file results in a new abstract environment while a lock file
creates a new concrete environment
"""
subparser.add_argument(
"env_name", metavar="env", help="name or directory of the new environment"
)
subparser.add_argument( subparser.add_argument(
"-d", "--dir", action="store_true", help="create an environment in a specific directory" "-d", "--dir", action="store_true", help="create an environment in a specific directory"
) )
subparser.add_argument( subparser.add_argument(
"--keep-relative", "--keep-relative",
action="store_true", action="store_true",
help="copy relative develop paths verbatim into the new environment" help="copy envfile's relative develop paths verbatim",
" when initializing from envfile",
) )
view_opts = subparser.add_mutually_exclusive_group() view_opts = subparser.add_mutually_exclusive_group()
view_opts.add_argument( view_opts.add_argument(
"--without-view", action="store_true", help="do not maintain a view for this environment" "--without-view", action="store_true", help="do not maintain a view for this environment"
) )
view_opts.add_argument( view_opts.add_argument(
"--with-view", "--with-view", help="maintain view at WITH_VIEW (vs. environment's directory)"
help="specify that this environment should maintain a view at the"
" specified path (by default the view is maintained in the"
" environment directory)",
) )
subparser.add_argument( subparser.add_argument(
"envfile", "envfile",
nargs="?", nargs="?",
default=None, default=None,
help="either a lockfile (must end with '.json' or '.lock') or a manifest file", help="manifest or lock file (ends with '.json' or '.lock')",
) )
subparser.add_argument( subparser.add_argument(
"--include-concrete", action="append", help="name of old environment to copy specs from" "--include-concrete",
action="append",
help="copy concrete specs from INCLUDE_CONCRETE's environment",
) )
@ -173,7 +179,7 @@ def _env_create(
# env activate # env activate
# #
def env_activate_setup_parser(subparser): def env_activate_setup_parser(subparser):
"""set the current environment""" """set the active environment"""
shells = subparser.add_mutually_exclusive_group() shells = subparser.add_mutually_exclusive_group()
shells.add_argument( shells.add_argument(
"--sh", "--sh",
@ -213,14 +219,14 @@ def env_activate_setup_parser(subparser):
view_options = subparser.add_mutually_exclusive_group() view_options = subparser.add_mutually_exclusive_group()
view_options.add_argument( view_options.add_argument(
"--with-view",
"-v", "-v",
"--with-view",
metavar="name", metavar="name",
help="set runtime environment variables for specific view", help="set runtime environment variables for the named view",
) )
view_options.add_argument( view_options.add_argument(
"--without-view",
"-V", "-V",
"--without-view",
action="store_true", action="store_true",
help="do not set runtime environment variables for any view", help="do not set runtime environment variables for any view",
) )
@ -230,14 +236,14 @@ def env_activate_setup_parser(subparser):
"--prompt", "--prompt",
action="store_true", action="store_true",
default=False, default=False,
help="decorate the command line prompt when activating", help="add the active environment to the command line prompt",
) )
subparser.add_argument( subparser.add_argument(
"--temp", "--temp",
action="store_true", action="store_true",
default=False, default=False,
help="create and activate an environment in a temporary directory", help="create and activate in a temporary directory",
) )
subparser.add_argument( subparser.add_argument(
"--create", "--create",
@ -249,13 +255,12 @@ def env_activate_setup_parser(subparser):
"--envfile", "--envfile",
nargs="?", nargs="?",
default=None, default=None,
help="either a lockfile (must end with '.json' or '.lock') or a manifest file", help="manifest or lock file (ends with '.json' or '.lock')",
) )
subparser.add_argument( subparser.add_argument(
"--keep-relative", "--keep-relative",
action="store_true", action="store_true",
help="copy relative develop paths verbatim into the new environment" help="copy envfile's relative develop paths verbatim when create",
" when initializing from envfile",
) )
subparser.add_argument( subparser.add_argument(
"-d", "-d",
@ -269,10 +274,7 @@ def env_activate_setup_parser(subparser):
dest="env_name", dest="env_name",
nargs="?", nargs="?",
default=None, default=None,
help=( help=("name or directory of the environment being activated"),
"name of managed environment or directory of the independent env"
" (when using --dir/-d) to activate"
),
) )
@ -385,7 +387,7 @@ def env_activate(args):
# env deactivate # env deactivate
# #
def env_deactivate_setup_parser(subparser): def env_deactivate_setup_parser(subparser):
"""deactivate any active environment in the shell""" """deactivate the active environment"""
shells = subparser.add_mutually_exclusive_group() shells = subparser.add_mutually_exclusive_group()
shells.add_argument( shells.add_argument(
"--sh", "--sh",
@ -448,23 +450,27 @@ def env_deactivate(args):
# env remove # env remove
# #
def env_remove_setup_parser(subparser): def env_remove_setup_parser(subparser):
"""remove an existing environment""" """remove managed environment(s)
subparser.add_argument("rm_env", metavar="env", nargs="+", help="environment(s) to remove")
remove existing environment(s) managed by Spack
directory environments and manifests embedded in repositories must be
removed manually
"""
subparser.add_argument(
"rm_env", metavar="env", nargs="+", help="name(s) of the environment(s) being removed"
)
arguments.add_common_arguments(subparser, ["yes_to_all"]) arguments.add_common_arguments(subparser, ["yes_to_all"])
subparser.add_argument( subparser.add_argument(
"-f", "-f",
"--force", "--force",
action="store_true", action="store_true",
help="remove the environment even if it is included in another environment", help="force removal even when included in other environment(s)",
) )
def env_remove(args): def env_remove(args):
"""Remove a *named* environment. """remove existing environment(s)"""
This removes an environment managed by Spack. Directory environments
and manifests embedded in repositories should be removed manually.
"""
remove_envs = [] remove_envs = []
valid_envs = [] valid_envs = []
bad_envs = [] bad_envs = []
@ -519,29 +525,32 @@ def env_remove(args):
# env rename # env rename
# #
def env_rename_setup_parser(subparser): def env_rename_setup_parser(subparser):
"""rename an existing environment""" """rename an existing environment
rename a managed environment or move an independent/directory environment
operation cannot be performed to or from an active environment
"""
subparser.add_argument( subparser.add_argument(
"mv_from", metavar="from", help="name (or path) of existing environment" "mv_from", metavar="from", help="current name or directory of the environment"
)
subparser.add_argument(
"mv_to", metavar="to", help="new name (or path) for existing environment"
) )
subparser.add_argument("mv_to", metavar="to", help="new name or directory for the environment")
subparser.add_argument( subparser.add_argument(
"-d", "-d",
"--dir", "--dir",
action="store_true", action="store_true",
help="the specified arguments correspond to directory paths", help="positional arguments are environment directory paths",
) )
subparser.add_argument( subparser.add_argument(
"-f", "--force", action="store_true", help="allow overwriting of an existing environment" "-f",
"--force",
action="store_true",
help="force renaming even if overwriting an existing environment",
) )
def env_rename(args): def env_rename(args):
"""Rename an environment. """rename or move an existing environment"""
This renames a managed environment or moves an independent environment.
"""
# Directory option has been specified # Directory option has been specified
if args.dir: if args.dir:
@ -590,7 +599,7 @@ def env_rename(args):
# env list # env list
# #
def env_list_setup_parser(subparser): def env_list_setup_parser(subparser):
"""list managed environments""" """list all managed environments"""
def env_list(args): def env_list(args):
@ -626,13 +635,14 @@ def actions():
# env view # env view
# #
def env_view_setup_parser(subparser): def env_view_setup_parser(subparser):
"""manage a view associated with the environment""" """manage the environment's view
provide the path when enabling a view with a non-default path
"""
subparser.add_argument( subparser.add_argument(
"action", choices=ViewAction.actions(), help="action to take for the environment's view" "action", choices=ViewAction.actions(), help="action to take for the environment's view"
) )
subparser.add_argument( subparser.add_argument("view_path", nargs="?", help="view's non-default path when enabling it")
"view_path", nargs="?", help="when enabling a view, optionally set the path manually"
)
def env_view(args): def env_view(args):
@ -660,7 +670,7 @@ def env_view(args):
# env status # env status
# #
def env_status_setup_parser(subparser): def env_status_setup_parser(subparser):
"""print whether there is an active environment""" """print active environment status"""
def env_status(args): def env_status(args):
@ -720,14 +730,22 @@ def env_loads(args):
def env_update_setup_parser(subparser): def env_update_setup_parser(subparser):
"""update environments to the latest format""" """update the environment manifest to the latest schema format
update the environment to the latest schema format, which may not be
readable by older versions of spack
a backup copy of the manifest is retained in case there is a need to revert
this operation
"""
subparser.add_argument( subparser.add_argument(
metavar="env", dest="update_env", help="name or directory of the environment to activate" metavar="env", dest="update_env", help="name or directory of the environment"
) )
spack.cmd.common.arguments.add_common_arguments(subparser, ["yes_to_all"]) spack.cmd.common.arguments.add_common_arguments(subparser, ["yes_to_all"])
def env_update(args): def env_update(args):
"""update the manifest to the latest format"""
manifest_file = ev.manifest_file(args.update_env) manifest_file = ev.manifest_file(args.update_env)
backup_file = manifest_file + ".bkp" backup_file = manifest_file + ".bkp"
@ -757,14 +775,22 @@ def env_update(args):
def env_revert_setup_parser(subparser): def env_revert_setup_parser(subparser):
"""restore environments to their state before update""" """restore the environment manifest to its previous format
revert the environment's manifest to the schema format from its last
'spack env update'
the current manifest will be overwritten by the backup copy and the backup
copy will be removed
"""
subparser.add_argument( subparser.add_argument(
metavar="env", dest="revert_env", help="name or directory of the environment to activate" metavar="env", dest="revert_env", help="name or directory of the environment"
) )
spack.cmd.common.arguments.add_common_arguments(subparser, ["yes_to_all"]) spack.cmd.common.arguments.add_common_arguments(subparser, ["yes_to_all"])
def env_revert(args): def env_revert(args):
"""restore the environment manifest to its previous format"""
manifest_file = ev.manifest_file(args.revert_env) manifest_file = ev.manifest_file(args.revert_env)
backup_file = manifest_file + ".bkp" backup_file = manifest_file + ".bkp"
@ -796,15 +822,19 @@ def env_revert(args):
def env_depfile_setup_parser(subparser): def env_depfile_setup_parser(subparser):
"""generate a depfile from the concrete environment specs""" """generate a depfile to exploit parallel builds across specs
requires the active environment to be concrete
"""
subparser.add_argument( subparser.add_argument(
"--make-prefix", "--make-prefix",
"--make-target-prefix", "--make-target-prefix",
default=None, default=None,
metavar="TARGET", metavar="TARGET",
help="prefix Makefile targets (and variables) with <TARGET>/<name>\n\nby default " help="prefix Makefile targets/variables with <TARGET>/<name>,\n"
"the absolute path to the directory makedeps under the environment metadata dir is " "which can be an empty string (--make-prefix '')\n"
"used. can be set to an empty string --make-prefix ''", "defaults to the absolute path of the environment's makedeps\n"
"environment metadata dir\n",
) )
subparser.add_argument( subparser.add_argument(
"--make-disable-jobserver", "--make-disable-jobserver",
@ -819,8 +849,8 @@ def env_depfile_setup_parser(subparser):
type=arguments.use_buildcache, type=arguments.use_buildcache,
default="package:auto,dependencies:auto", default="package:auto,dependencies:auto",
metavar="[{auto,only,never},][package:{auto,only,never},][dependencies:{auto,only,never}]", metavar="[{auto,only,never},][package:{auto,only,never},][dependencies:{auto,only,never}]",
help="when using `only`, redundant build dependencies are pruned from the DAG\n\n" help="use `only` to prune redundant build dependencies\n"
"this flag is passed on to the generated spack install commands", "option is also passed to generated spack install commands",
) )
subparser.add_argument( subparser.add_argument(
"-o", "-o",
@ -834,14 +864,14 @@ def env_depfile_setup_parser(subparser):
"--generator", "--generator",
default="make", default="make",
choices=("make",), choices=("make",),
help="specify the depfile type\n\ncurrently only make is supported", help="specify the depfile type (only supports `make`)",
) )
subparser.add_argument( subparser.add_argument(
metavar="specs", metavar="specs",
dest="specs", dest="specs",
nargs=argparse.REMAINDER, nargs=argparse.REMAINDER,
default=None, default=None,
help="generate a depfile only for matching specs in the environment", help="limit the generated file to matching specs",
) )
@ -910,7 +940,12 @@ def setup_parser(subparser):
setup_parser_cmd_name = "env_%s_setup_parser" % name setup_parser_cmd_name = "env_%s_setup_parser" % name
setup_parser_cmd = globals()[setup_parser_cmd_name] setup_parser_cmd = globals()[setup_parser_cmd_name]
subsubparser = sp.add_parser(name, aliases=aliases, help=setup_parser_cmd.__doc__) subsubparser = sp.add_parser(
name,
aliases=aliases,
description=setup_parser_cmd.__doc__,
help=spack.cmd.first_line(setup_parser_cmd.__doc__),
)
setup_parser_cmd(subsubparser) setup_parser_cmd(subsubparser)

View File

@ -1030,7 +1030,7 @@ _spack_env() {
_spack_env_activate() { _spack_env_activate() {
if $list_options if $list_options
then then
SPACK_COMPREPLY="-h --help --sh --csh --fish --bat --pwsh --with-view -v --without-view -V -p --prompt --temp --create --envfile --keep-relative -d --dir" SPACK_COMPREPLY="-h --help --sh --csh --fish --bat --pwsh -v --with-view -V --without-view -p --prompt --temp --create --envfile --keep-relative -d --dir"
else else
_environments _environments
fi fi

View File

@ -1472,22 +1472,22 @@ complete -c spack -n '__fish_spack_using_command edit' -s N -l namespace -r -d '
# spack env # spack env
set -g __fish_spack_optspecs_spack_env h/help set -g __fish_spack_optspecs_spack_env h/help
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a activate -d 'set the current environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a activate -d 'set the active environment'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a deactivate -d 'deactivate any active environment in the shell' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a deactivate -d 'deactivate the active environment'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a create -d 'create a new environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a create -d 'create a new environment'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a remove -d 'remove an existing environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a remove -d 'remove managed environment(s)'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a rm -d 'remove an existing environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a rm -d 'remove managed environment(s)'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a rename -d 'rename an existing environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a rename -d 'rename an existing environment'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a mv -d 'rename an existing environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a mv -d 'rename an existing environment'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a list -d 'list managed environments' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a list -d 'list all managed environments'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a ls -d 'list managed environments' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a ls -d 'list all managed environments'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a status -d 'print whether there is an active environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a status -d 'print active environment status'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a st -d 'print whether there is an active environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a st -d 'print active environment status'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a loads -d 'list modules for an installed environment '"'"'(see spack module loads)'"'"'' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a loads -d 'list modules for an installed environment '"'"'(see spack module loads)'"'"''
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a view -d 'manage a view associated with the environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a view -d 'manage the environment'"'"'s view'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a update -d 'update environments to the latest format' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a update -d 'update the environment manifest to the latest schema format'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a revert -d 'restore environments to their state before update' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a revert -d 'restore the environment manifest to its previous format'
complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a depfile -d 'generate a depfile from the concrete environment specs' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a depfile -d 'generate a depfile to exploit parallel builds across specs'
complete -c spack -n '__fish_spack_using_command env' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command env' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command env' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command env' -s h -l help -d 'show this help message and exit'
@ -1506,20 +1506,20 @@ complete -c spack -n '__fish_spack_using_command env activate' -l bat -f -a shel
complete -c spack -n '__fish_spack_using_command env activate' -l bat -d 'print bat commands to activate the environment' complete -c spack -n '__fish_spack_using_command env activate' -l bat -d 'print bat commands to activate the environment'
complete -c spack -n '__fish_spack_using_command env activate' -l pwsh -f -a shell complete -c spack -n '__fish_spack_using_command env activate' -l pwsh -f -a shell
complete -c spack -n '__fish_spack_using_command env activate' -l pwsh -d 'print powershell commands to activate environment' complete -c spack -n '__fish_spack_using_command env activate' -l pwsh -d 'print powershell commands to activate environment'
complete -c spack -n '__fish_spack_using_command env activate' -l with-view -s v -r -f -a with_view complete -c spack -n '__fish_spack_using_command env activate' -s v -l with-view -r -f -a with_view
complete -c spack -n '__fish_spack_using_command env activate' -l with-view -s v -r -d 'set runtime environment variables for specific view' complete -c spack -n '__fish_spack_using_command env activate' -s v -l with-view -r -d 'set runtime environment variables for the named view'
complete -c spack -n '__fish_spack_using_command env activate' -l without-view -s V -f -a without_view complete -c spack -n '__fish_spack_using_command env activate' -s V -l without-view -f -a without_view
complete -c spack -n '__fish_spack_using_command env activate' -l without-view -s V -d 'do not set runtime environment variables for any view' complete -c spack -n '__fish_spack_using_command env activate' -s V -l without-view -d 'do not set runtime environment variables for any view'
complete -c spack -n '__fish_spack_using_command env activate' -s p -l prompt -f -a prompt complete -c spack -n '__fish_spack_using_command env activate' -s p -l prompt -f -a prompt
complete -c spack -n '__fish_spack_using_command env activate' -s p -l prompt -d 'decorate the command line prompt when activating' complete -c spack -n '__fish_spack_using_command env activate' -s p -l prompt -d 'add the active environment to the command line prompt'
complete -c spack -n '__fish_spack_using_command env activate' -l temp -f -a temp complete -c spack -n '__fish_spack_using_command env activate' -l temp -f -a temp
complete -c spack -n '__fish_spack_using_command env activate' -l temp -d 'create and activate an environment in a temporary directory' complete -c spack -n '__fish_spack_using_command env activate' -l temp -d 'create and activate in a temporary directory'
complete -c spack -n '__fish_spack_using_command env activate' -l create -f -a create complete -c spack -n '__fish_spack_using_command env activate' -l create -f -a create
complete -c spack -n '__fish_spack_using_command env activate' -l create -d 'create and activate the environment if it doesn'"'"'t exist' complete -c spack -n '__fish_spack_using_command env activate' -l create -d 'create and activate the environment if it doesn'"'"'t exist'
complete -c spack -n '__fish_spack_using_command env activate' -l envfile -r -f -a envfile complete -c spack -n '__fish_spack_using_command env activate' -l envfile -r -f -a envfile
complete -c spack -n '__fish_spack_using_command env activate' -l envfile -r -d 'either a lockfile (must end with '"'"'.json'"'"' or '"'"'.lock'"'"') or a manifest file' complete -c spack -n '__fish_spack_using_command env activate' -l envfile -r -d 'manifest or lock file (ends with '"'"'.json'"'"' or '"'"'.lock'"'"')'
complete -c spack -n '__fish_spack_using_command env activate' -l keep-relative -f -a keep_relative complete -c spack -n '__fish_spack_using_command env activate' -l keep-relative -f -a keep_relative
complete -c spack -n '__fish_spack_using_command env activate' -l keep-relative -d 'copy relative develop paths verbatim into the new environment when initializing from envfile' complete -c spack -n '__fish_spack_using_command env activate' -l keep-relative -d 'copy envfile'"'"'s relative develop paths verbatim when create'
complete -c spack -n '__fish_spack_using_command env activate' -s d -l dir -f -a dir complete -c spack -n '__fish_spack_using_command env activate' -s d -l dir -f -a dir
complete -c spack -n '__fish_spack_using_command env activate' -s d -l dir -d 'activate environment based on the directory supplied' complete -c spack -n '__fish_spack_using_command env activate' -s d -l dir -d 'activate environment based on the directory supplied'
@ -1546,13 +1546,13 @@ complete -c spack -n '__fish_spack_using_command env create' -s h -l help -d 'sh
complete -c spack -n '__fish_spack_using_command env create' -s d -l dir -f -a dir complete -c spack -n '__fish_spack_using_command env create' -s d -l dir -f -a dir
complete -c spack -n '__fish_spack_using_command env create' -s d -l dir -d 'create an environment in a specific directory' complete -c spack -n '__fish_spack_using_command env create' -s d -l dir -d 'create an environment in a specific directory'
complete -c spack -n '__fish_spack_using_command env create' -l keep-relative -f -a keep_relative complete -c spack -n '__fish_spack_using_command env create' -l keep-relative -f -a keep_relative
complete -c spack -n '__fish_spack_using_command env create' -l keep-relative -d 'copy relative develop paths verbatim into the new environment when initializing from envfile' complete -c spack -n '__fish_spack_using_command env create' -l keep-relative -d 'copy envfile'"'"'s relative develop paths verbatim'
complete -c spack -n '__fish_spack_using_command env create' -l without-view -f -a without_view complete -c spack -n '__fish_spack_using_command env create' -l without-view -f -a without_view
complete -c spack -n '__fish_spack_using_command env create' -l without-view -d 'do not maintain a view for this environment' complete -c spack -n '__fish_spack_using_command env create' -l without-view -d 'do not maintain a view for this environment'
complete -c spack -n '__fish_spack_using_command env create' -l with-view -r -f -a with_view complete -c spack -n '__fish_spack_using_command env create' -l with-view -r -f -a with_view
complete -c spack -n '__fish_spack_using_command env create' -l with-view -r -d 'specify that this environment should maintain a view at the specified path (by default the view is maintained in the environment directory)' complete -c spack -n '__fish_spack_using_command env create' -l with-view -r -d 'maintain view at WITH_VIEW (vs. environment'"'"'s directory)'
complete -c spack -n '__fish_spack_using_command env create' -l include-concrete -r -f -a include_concrete complete -c spack -n '__fish_spack_using_command env create' -l include-concrete -r -f -a include_concrete
complete -c spack -n '__fish_spack_using_command env create' -l include-concrete -r -d 'name of old environment to copy specs from' complete -c spack -n '__fish_spack_using_command env create' -l include-concrete -r -d 'copy concrete specs from INCLUDE_CONCRETE'"'"'s environment'
# spack env remove # spack env remove
set -g __fish_spack_optspecs_spack_env_remove h/help y/yes-to-all f/force set -g __fish_spack_optspecs_spack_env_remove h/help y/yes-to-all f/force
@ -1562,7 +1562,7 @@ complete -c spack -n '__fish_spack_using_command env remove' -s h -l help -d 'sh
complete -c spack -n '__fish_spack_using_command env remove' -s y -l yes-to-all -f -a yes_to_all complete -c spack -n '__fish_spack_using_command env remove' -s y -l yes-to-all -f -a yes_to_all
complete -c spack -n '__fish_spack_using_command env remove' -s y -l yes-to-all -d 'assume "yes" is the answer to every confirmation request' complete -c spack -n '__fish_spack_using_command env remove' -s y -l yes-to-all -d 'assume "yes" is the answer to every confirmation request'
complete -c spack -n '__fish_spack_using_command env remove' -s f -l force -f -a force complete -c spack -n '__fish_spack_using_command env remove' -s f -l force -f -a force
complete -c spack -n '__fish_spack_using_command env remove' -s f -l force -d 'remove the environment even if it is included in another environment' complete -c spack -n '__fish_spack_using_command env remove' -s f -l force -d 'force removal even when included in other environment(s)'
# spack env rm # spack env rm
set -g __fish_spack_optspecs_spack_env_rm h/help y/yes-to-all f/force set -g __fish_spack_optspecs_spack_env_rm h/help y/yes-to-all f/force
@ -1572,7 +1572,7 @@ complete -c spack -n '__fish_spack_using_command env rm' -s h -l help -d 'show t
complete -c spack -n '__fish_spack_using_command env rm' -s y -l yes-to-all -f -a yes_to_all complete -c spack -n '__fish_spack_using_command env rm' -s y -l yes-to-all -f -a yes_to_all
complete -c spack -n '__fish_spack_using_command env rm' -s y -l yes-to-all -d 'assume "yes" is the answer to every confirmation request' complete -c spack -n '__fish_spack_using_command env rm' -s y -l yes-to-all -d 'assume "yes" is the answer to every confirmation request'
complete -c spack -n '__fish_spack_using_command env rm' -s f -l force -f -a force complete -c spack -n '__fish_spack_using_command env rm' -s f -l force -f -a force
complete -c spack -n '__fish_spack_using_command env rm' -s f -l force -d 'remove the environment even if it is included in another environment' complete -c spack -n '__fish_spack_using_command env rm' -s f -l force -d 'force removal even when included in other environment(s)'
# spack env rename # spack env rename
set -g __fish_spack_optspecs_spack_env_rename h/help d/dir f/force set -g __fish_spack_optspecs_spack_env_rename h/help d/dir f/force
@ -1580,9 +1580,9 @@ set -g __fish_spack_optspecs_spack_env_rename h/help d/dir f/force
complete -c spack -n '__fish_spack_using_command env rename' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command env rename' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command env rename' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command env rename' -s h -l help -d 'show this help message and exit'
complete -c spack -n '__fish_spack_using_command env rename' -s d -l dir -f -a dir complete -c spack -n '__fish_spack_using_command env rename' -s d -l dir -f -a dir
complete -c spack -n '__fish_spack_using_command env rename' -s d -l dir -d 'the specified arguments correspond to directory paths' complete -c spack -n '__fish_spack_using_command env rename' -s d -l dir -d 'positional arguments are environment directory paths'
complete -c spack -n '__fish_spack_using_command env rename' -s f -l force -f -a force complete -c spack -n '__fish_spack_using_command env rename' -s f -l force -f -a force
complete -c spack -n '__fish_spack_using_command env rename' -s f -l force -d 'allow overwriting of an existing environment' complete -c spack -n '__fish_spack_using_command env rename' -s f -l force -d 'force renaming even if overwriting an existing environment'
# spack env mv # spack env mv
set -g __fish_spack_optspecs_spack_env_mv h/help d/dir f/force set -g __fish_spack_optspecs_spack_env_mv h/help d/dir f/force
@ -1590,9 +1590,9 @@ set -g __fish_spack_optspecs_spack_env_mv h/help d/dir f/force
complete -c spack -n '__fish_spack_using_command env mv' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command env mv' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command env mv' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command env mv' -s h -l help -d 'show this help message and exit'
complete -c spack -n '__fish_spack_using_command env mv' -s d -l dir -f -a dir complete -c spack -n '__fish_spack_using_command env mv' -s d -l dir -f -a dir
complete -c spack -n '__fish_spack_using_command env mv' -s d -l dir -d 'the specified arguments correspond to directory paths' complete -c spack -n '__fish_spack_using_command env mv' -s d -l dir -d 'positional arguments are environment directory paths'
complete -c spack -n '__fish_spack_using_command env mv' -s f -l force -f -a force complete -c spack -n '__fish_spack_using_command env mv' -s f -l force -f -a force
complete -c spack -n '__fish_spack_using_command env mv' -s f -l force -d 'allow overwriting of an existing environment' complete -c spack -n '__fish_spack_using_command env mv' -s f -l force -d 'force renaming even if overwriting an existing environment'
# spack env list # spack env list
set -g __fish_spack_optspecs_spack_env_list h/help set -g __fish_spack_optspecs_spack_env_list h/help
@ -1659,15 +1659,15 @@ complete -c spack -n '__fish_spack_using_command_pos_remainder 0 env depfile' -f
complete -c spack -n '__fish_spack_using_command env depfile' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command env depfile' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command env depfile' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command env depfile' -s h -l help -d 'show this help message and exit'
complete -c spack -n '__fish_spack_using_command env depfile' -l make-prefix -l make-target-prefix -r -f -a make_prefix complete -c spack -n '__fish_spack_using_command env depfile' -l make-prefix -l make-target-prefix -r -f -a make_prefix
complete -c spack -n '__fish_spack_using_command env depfile' -l make-prefix -l make-target-prefix -r -d 'prefix Makefile targets (and variables) with <TARGET>/<name>' complete -c spack -n '__fish_spack_using_command env depfile' -l make-prefix -l make-target-prefix -r -d 'prefix Makefile targets/variables with <TARGET>/<name>,'
complete -c spack -n '__fish_spack_using_command env depfile' -l make-disable-jobserver -f -a jobserver complete -c spack -n '__fish_spack_using_command env depfile' -l make-disable-jobserver -f -a jobserver
complete -c spack -n '__fish_spack_using_command env depfile' -l make-disable-jobserver -d 'disable POSIX jobserver support' complete -c spack -n '__fish_spack_using_command env depfile' -l make-disable-jobserver -d 'disable POSIX jobserver support'
complete -c spack -n '__fish_spack_using_command env depfile' -l use-buildcache -r -f -a use_buildcache complete -c spack -n '__fish_spack_using_command env depfile' -l use-buildcache -r -f -a use_buildcache
complete -c spack -n '__fish_spack_using_command env depfile' -l use-buildcache -r -d 'when using `only`, redundant build dependencies are pruned from the DAG' complete -c spack -n '__fish_spack_using_command env depfile' -l use-buildcache -r -d 'use `only` to prune redundant build dependencies'
complete -c spack -n '__fish_spack_using_command env depfile' -s o -l output -r -f -a output complete -c spack -n '__fish_spack_using_command env depfile' -s o -l output -r -f -a output
complete -c spack -n '__fish_spack_using_command env depfile' -s o -l output -r -d 'write the depfile to FILE rather than to stdout' complete -c spack -n '__fish_spack_using_command env depfile' -s o -l output -r -d 'write the depfile to FILE rather than to stdout'
complete -c spack -n '__fish_spack_using_command env depfile' -s G -l generator -r -f -a make complete -c spack -n '__fish_spack_using_command env depfile' -s G -l generator -r -f -a make
complete -c spack -n '__fish_spack_using_command env depfile' -s G -l generator -r -d 'specify the depfile type' complete -c spack -n '__fish_spack_using_command env depfile' -s G -l generator -r -d 'specify the depfile type (only supports `make`)'
# spack extensions # spack extensions
set -g __fish_spack_optspecs_spack_extensions h/help l/long L/very-long d/deps p/paths s/show= set -g __fish_spack_optspecs_spack_extensions h/help l/long L/very-long d/deps p/paths s/show=