(argv: list[str] | None = None)
| 538 | |
| 539 | |
| 540 | def main(argv: list[str] | None = None) -> int: |
| 541 | parser = argparse.ArgumentParser(description=__doc__) |
| 542 | parser.add_argument("--repo", default=".", help="repository path") |
| 543 | parser.add_argument("--base", default="origin/main", help="base ref") |
| 544 | parser.add_argument("--head", default="HEAD", help="head ref") |
| 545 | parser.add_argument( |
| 546 | "--github-pr-files-json", |
| 547 | help="analyze GitHub pull request files API JSON instead of running git diff", |
| 548 | ) |
| 549 | parser.add_argument( |
| 550 | "--expected-file-count", |
| 551 | type=int, |
| 552 | help="warn when GitHub reports more changed files than were provided", |
| 553 | ) |
| 554 | parser.add_argument("--markdown-output", help="write Markdown report here") |
| 555 | parser.add_argument("--json-output", help="write JSON report here") |
| 556 | parser.add_argument( |
| 557 | "--json", |
| 558 | action="store_true", |
| 559 | help="print JSON instead of Markdown to stdout", |
| 560 | ) |
| 561 | args = parser.parse_args(argv) |
| 562 | |
| 563 | if args.github_pr_files_json: |
| 564 | with Path(args.github_pr_files_json).open() as handle: |
| 565 | plan = analyze_github_pr_files( |
| 566 | json.load(handle), |
| 567 | expected_file_count=args.expected_file_count, |
| 568 | ) |
| 569 | else: |
| 570 | repo = Path(args.repo) |
| 571 | diff_range = f"{args.base}...{args.head}" |
| 572 | name_status = run_git(repo, ["diff", "--name-status", diff_range]) |
| 573 | patch = run_git(repo, ["diff", "--unified=0", diff_range]) |
| 574 | plan = analyze_diff(name_status, patch) |
| 575 | |
| 576 | markdown = render_markdown(plan) |
| 577 | payload = json.dumps(asdict(plan), indent=2, sort_keys=True) |
| 578 | write_text(args.markdown_output, markdown) |
| 579 | write_text(args.json_output, payload + "\n") |
| 580 | |
| 581 | if args.json: |
| 582 | sys.stdout.write(payload + "\n") |
| 583 | else: |
| 584 | sys.stdout.write(markdown) |
| 585 | return 0 |
| 586 | |
| 587 | |
| 588 | if __name__ == "__main__": |
no test coverage detected