| 223 | |
| 224 | |
| 225 | def list_main(argv: list[str] | None = None) -> int: |
| 226 | args = build_list_parser().parse_args(argv) |
| 227 | repo_root = Path(args.repo_root).resolve() |
| 228 | metadata = load_metadata(repo_root, args.metadata) |
| 229 | errors = validate_metadata(repo_root, metadata) if args.validate_metadata else [] |
| 230 | if errors: |
| 231 | for error in errors: |
| 232 | print(f"metadata error: {error}", file=sys.stderr) |
| 233 | return 1 |
| 234 | |
| 235 | projects = discover_projects(repo_root, metadata) |
| 236 | if args.changed_from: |
| 237 | projects = projects_for_changed_files( |
| 238 | projects, |
| 239 | changed_files(repo_root, args.changed_from, args.changed_to), |
| 240 | ) |
| 241 | print(_format_projects(projects, args.format)) |
| 242 | return 0 |
| 243 | |
| 244 | |
| 245 | def build_validate_parser() -> argparse.ArgumentParser: |