feat: move -N/--namespace(s) to common args, allow in buildcache list (#36719)
				
					
				
			`spack buildcache list` did not have a way to display the namespace of packages in the buildcache. This PR adds that functionality. For consistency's sake, it moves the `-N/--namespace` arg definition to the `common/arguments.py` and modifies `find`, `solve`, `spec` to use the common definition. Previously, `find` was using `--namespace` (singular) to control whether to display the namespace (it doesn't restrict the search to that namespace). The other commands were using `--namespaces` (plural). For backwards compatibility and for consistency with `--deps`, `--tags`, etc, the plural `--namespaces` was chosen. The argument parser ensures that `find --namespace` will continue to behave as before. Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl>
This commit is contained in:
		@@ -383,7 +383,7 @@ def display_specs(specs, args=None, **kwargs):
 | 
			
		||||
        deps (bool): Display dependencies with specs
 | 
			
		||||
        long (bool): Display short hashes with specs
 | 
			
		||||
        very_long (bool): Display full hashes with specs (supersedes ``long``)
 | 
			
		||||
        namespace (bool): Print namespaces along with names
 | 
			
		||||
        namespaces (bool): Print namespaces along with names
 | 
			
		||||
        show_flags (bool): Show compiler flags with specs
 | 
			
		||||
        variants (bool): Show variants with specs
 | 
			
		||||
        indent (int): indent each line this much
 | 
			
		||||
@@ -407,7 +407,7 @@ def get_arg(name, default=None):
 | 
			
		||||
    paths = get_arg("paths", False)
 | 
			
		||||
    deps = get_arg("deps", False)
 | 
			
		||||
    hashes = get_arg("long", False)
 | 
			
		||||
    namespace = get_arg("namespace", False)
 | 
			
		||||
    namespaces = get_arg("namespaces", False)
 | 
			
		||||
    flags = get_arg("show_flags", False)
 | 
			
		||||
    full_compiler = get_arg("show_full_compiler", False)
 | 
			
		||||
    variants = get_arg("variants", False)
 | 
			
		||||
@@ -428,7 +428,7 @@ def get_arg(name, default=None):
 | 
			
		||||
 | 
			
		||||
    format_string = get_arg("format", None)
 | 
			
		||||
    if format_string is None:
 | 
			
		||||
        nfmt = "{fullname}" if namespace else "{name}"
 | 
			
		||||
        nfmt = "{fullname}" if namespaces else "{name}"
 | 
			
		||||
        ffmt = ""
 | 
			
		||||
        if full_compiler or flags:
 | 
			
		||||
            ffmt += "{%compiler.name}"
 | 
			
		||||
 
 | 
			
		||||
@@ -105,7 +105,7 @@ def setup_parser(subparser):
 | 
			
		||||
    install.set_defaults(func=install_fn)
 | 
			
		||||
 | 
			
		||||
    listcache = subparsers.add_parser("list", help=list_fn.__doc__)
 | 
			
		||||
    arguments.add_common_arguments(listcache, ["long", "very_long"])
 | 
			
		||||
    arguments.add_common_arguments(listcache, ["long", "very_long", "namespaces"])
 | 
			
		||||
    listcache.add_argument(
 | 
			
		||||
        "-v",
 | 
			
		||||
        "--variants",
 | 
			
		||||
 
 | 
			
		||||
@@ -331,6 +331,17 @@ def tags():
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@arg
 | 
			
		||||
def namespaces():
 | 
			
		||||
    return Args(
 | 
			
		||||
        "-N",
 | 
			
		||||
        "--namespaces",
 | 
			
		||||
        action="store_true",
 | 
			
		||||
        default=False,
 | 
			
		||||
        help="show fully qualified package names",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@arg
 | 
			
		||||
def jobs():
 | 
			
		||||
    return Args(
 | 
			
		||||
 
 | 
			
		||||
@@ -67,7 +67,7 @@ def setup_parser(subparser):
 | 
			
		||||
        help="do not group specs by arch/compiler",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    arguments.add_common_arguments(subparser, ["long", "very_long", "tags"])
 | 
			
		||||
    arguments.add_common_arguments(subparser, ["long", "very_long", "tags", "namespaces"])
 | 
			
		||||
 | 
			
		||||
    subparser.add_argument(
 | 
			
		||||
        "-c",
 | 
			
		||||
@@ -140,9 +140,6 @@ def setup_parser(subparser):
 | 
			
		||||
    subparser.add_argument(
 | 
			
		||||
        "--only-deprecated", action="store_true", help="show only deprecated packages"
 | 
			
		||||
    )
 | 
			
		||||
    subparser.add_argument(
 | 
			
		||||
        "-N", "--namespace", action="store_true", help="show fully qualified package names"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    subparser.add_argument("--start-date", help="earliest date of installation [YYYY-MM-DD]")
 | 
			
		||||
    subparser.add_argument("--end-date", help="latest date of installation [YYYY-MM-DD]")
 | 
			
		||||
@@ -230,7 +227,7 @@ def display_env(env, args, decorator, results):
 | 
			
		||||
            env.user_specs,
 | 
			
		||||
            root_args,
 | 
			
		||||
            decorator=lambda s, f: color.colorize("@*{%s}" % f),
 | 
			
		||||
            namespace=True,
 | 
			
		||||
            namespaces=True,
 | 
			
		||||
            show_flags=True,
 | 
			
		||||
            show_full_compiler=True,
 | 
			
		||||
            variants=True,
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ def setup_parser(subparser):
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    # Below are arguments w.r.t. spec display (like spack spec)
 | 
			
		||||
    arguments.add_common_arguments(subparser, ["long", "very_long"])
 | 
			
		||||
    arguments.add_common_arguments(subparser, ["long", "very_long", "namespaces"])
 | 
			
		||||
 | 
			
		||||
    install_status_group = subparser.add_mutually_exclusive_group()
 | 
			
		||||
    arguments.add_common_arguments(install_status_group, ["install_status", "no_install_status"])
 | 
			
		||||
@@ -73,13 +73,6 @@ def setup_parser(subparser):
 | 
			
		||||
        choices=["nodes", "edges", "paths"],
 | 
			
		||||
        help="how extensively to traverse the DAG (default: nodes)",
 | 
			
		||||
    )
 | 
			
		||||
    subparser.add_argument(
 | 
			
		||||
        "-N",
 | 
			
		||||
        "--namespaces",
 | 
			
		||||
        action="store_true",
 | 
			
		||||
        default=False,
 | 
			
		||||
        help="show fully qualified package names",
 | 
			
		||||
    )
 | 
			
		||||
    subparser.add_argument(
 | 
			
		||||
        "-t", "--types", action="store_true", default=False, help="show dependency types"
 | 
			
		||||
    )
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ def setup_parser(subparser):
 | 
			
		||||
for further documentation regarding the spec syntax, see:
 | 
			
		||||
    spack help --spec
 | 
			
		||||
"""
 | 
			
		||||
    arguments.add_common_arguments(subparser, ["long", "very_long"])
 | 
			
		||||
    arguments.add_common_arguments(subparser, ["long", "very_long", "namespaces"])
 | 
			
		||||
 | 
			
		||||
    install_status_group = subparser.add_mutually_exclusive_group()
 | 
			
		||||
    arguments.add_common_arguments(install_status_group, ["install_status", "no_install_status"])
 | 
			
		||||
@@ -67,13 +67,6 @@ def setup_parser(subparser):
 | 
			
		||||
        choices=["nodes", "edges", "paths"],
 | 
			
		||||
        help="how extensively to traverse the DAG (default: nodes)",
 | 
			
		||||
    )
 | 
			
		||||
    subparser.add_argument(
 | 
			
		||||
        "-N",
 | 
			
		||||
        "--namespaces",
 | 
			
		||||
        action="store_true",
 | 
			
		||||
        default=False,
 | 
			
		||||
        help="show fully qualified package names",
 | 
			
		||||
    )
 | 
			
		||||
    subparser.add_argument(
 | 
			
		||||
        "-t", "--types", action="store_true", default=False, help="show dependency types"
 | 
			
		||||
    )
 | 
			
		||||
 
 | 
			
		||||
@@ -117,13 +117,13 @@ def test_tag2_tag3(parser, specs):
 | 
			
		||||
    assert len(specs) == 0
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.parametrize(
 | 
			
		||||
    "args,with_namespace", [([], False), (["--namespace"], True), (["--namespaces"], True)]
 | 
			
		||||
)
 | 
			
		||||
@pytest.mark.db
 | 
			
		||||
def test_namespaces_shown_correctly(database):
 | 
			
		||||
    out = find()
 | 
			
		||||
    assert "builtin.mock.zmpi" not in out
 | 
			
		||||
 | 
			
		||||
    out = find("--namespace")
 | 
			
		||||
    assert "builtin.mock.zmpi" in out
 | 
			
		||||
def test_namespaces_shown_correctly(args, with_namespace, database):
 | 
			
		||||
    """Test that --namespace(s) works. Old syntax is --namespace"""
 | 
			
		||||
    assert ("builtin.mock.zmpi" in find(*args)) == with_namespace
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@pytest.mark.db
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user