spack list: add --namesapce / --repo option (#41948)
				
					
				
			This adds options to `spack list` that allow you to list only packages from specific repositories/namespaces, e.g.: ```console spack list -r builtin ``` only lists packages from the `builtin` repo, while: ```console spack list -r myrepo -r myrepo2 ``` would list packages from `myrepo` and `myrepo2`, but not from `builtin`. Note that you can use the same argument multiple times. You can use either `-r` / `--repo` or `-N` / `--namespace`. `-N` is there to match the corresponding option on `spack find`. - [x] add `-r` / `--repo` / `-N` / `--namespace` argument - [x] add test
This commit is contained in:
		| @@ -40,6 +40,16 @@ def setup_parser(subparser): | ||||
|         nargs=argparse.REMAINDER, | ||||
|         help="optional case-insensitive glob patterns to filter results", | ||||
|     ) | ||||
|     subparser.add_argument( | ||||
|         "-r", | ||||
|         "--repo", | ||||
|         "-N", | ||||
|         "--namespace", | ||||
|         dest="repos", | ||||
|         action="append", | ||||
|         default=[], | ||||
|         help="only list packages from the specified repo/namespace", | ||||
|     ) | ||||
|     subparser.add_argument( | ||||
|         "-d", | ||||
|         "--search-description", | ||||
| @@ -307,7 +317,11 @@ def list(parser, args): | ||||
|     formatter = formatters[args.format] | ||||
| 
 | ||||
|     # Retrieve the names of all the packages | ||||
|     pkgs = set(spack.repo.all_package_names(args.virtuals)) | ||||
|     repos = [spack.repo.PATH] | ||||
|     if args.repos: | ||||
|         repos = [spack.repo.PATH.get_repo(name) for name in args.repos] | ||||
|     pkgs = set().union(*[set(repo.all_package_names(args.virtuals)) for repo in repos]) | ||||
| 
 | ||||
|     # Filter the set appropriately | ||||
|     sorted_packages = filter_by_name(pkgs, args) | ||||
| 
 | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| # | ||||
| # SPDX-License-Identifier: (Apache-2.0 OR MIT) | ||||
| 
 | ||||
| import os.path | ||||
| import sys | ||||
| from textwrap import dedent | ||||
| 
 | ||||
| @@ -134,3 +135,21 @@ def test_list_count(mock_packages): | ||||
|     assert int(output.strip()) == len( | ||||
|         [name for name in spack.repo.all_package_names() if "py-" in name] | ||||
|     ) | ||||
| 
 | ||||
| 
 | ||||
| # def test_list_repos(mock_packages, builder_test_repository): | ||||
| def test_list_repos(): | ||||
|     with spack.repo.use_repositories( | ||||
|         os.path.join(spack.paths.repos_path, "builtin.mock"), | ||||
|         os.path.join(spack.paths.repos_path, "builder.test"), | ||||
|     ): | ||||
|         total_pkgs = len(list().strip().split()) | ||||
| 
 | ||||
|         mock_pkgs = len(list("-r", "builtin.mock").strip().split()) | ||||
|         builder_pkgs = len(list("-r", "builder.test").strip().split()) | ||||
| 
 | ||||
|         assert builder_pkgs == 8 | ||||
|         assert total_pkgs > mock_pkgs > builder_pkgs | ||||
| 
 | ||||
|         both_repos = len(list("-r", "builtin.mock", "-r", "builder.test").strip().split()) | ||||
|         assert both_repos == total_pkgs | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Todd Gamblin
					Todd Gamblin