diff --git a/src/setuptools_scm/__main__.py b/src/setuptools_scm/__main__.py index dab6068a..3f56d42a 100644 --- a/src/setuptools_scm/__main__.py +++ b/src/setuptools_scm/__main__.py @@ -3,4 +3,4 @@ from ._cli import main if __name__ == "__main__": - main() + raise SystemExit(main()) diff --git a/src/setuptools_scm/_cli.py b/src/setuptools_scm/_cli.py index 66099b12..5869ded0 100644 --- a/src/setuptools_scm/_cli.py +++ b/src/setuptools_scm/_cli.py @@ -10,7 +10,7 @@ from setuptools_scm.discover import walk_potential_roots -def main(args: list[str] | None = None) -> None: +def main(args: list[str] | None = None) -> int: opts = _get_cli_opts(args) inferred_root: str = opts.root or "." @@ -31,16 +31,34 @@ def main(args: list[str] | None = None) -> None: ) config = Configuration(inferred_root) + if opts.command == "ls": + for fname in find_files(config.root): + print(fname) + return 0 + + if opts.command == "info": + code = 0 + if not opts.query: + print("\n".join(config.__dataclass_fields__.keys())) + else: + for q in opts.query: + try: + if q.startswith("_"): + raise AttributeError() + print(f"{q} = {getattr(config, q)}") + except AttributeError: + print(f"'{q}' unknown query!") + code = 1 + return code + version = _get_version(config, force_write_version_files=False) if version is None: raise SystemExit("ERROR: no version found for", opts) if opts.strip_dev: version = version.partition(".dev")[0] - print(version) - if opts.command == "ls": - for fname in find_files(config.root): - print(fname) + print(version) + return 0 def _get_cli_opts(args: list[str] | None) -> argparse.Namespace: @@ -71,6 +89,12 @@ def _get_cli_opts(args: list[str] | None) -> argparse.Namespace: # We avoid `metavar` to prevent printing repetitive information desc = "List files managed by the SCM" sub.add_parser("ls", help=desc[0].lower() + desc[1:], description=desc) + desc = "Display setuptools_scm settings according to query\ne.g. dist_name" + nfo_parser = sub.add_parser( + "info", help=desc[0].lower() + desc[1:], description=desc + ) + desc = "query for the desired information, omit to list of valid queries" + nfo_parser.add_argument("query", nargs="*", help=desc) return parser.parse_args(args)