Files
Gitea-Tools/list_prs.py

54 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
"""List Gitea pull requests.
Usage:
list_prs.py --remote dadeschools
"""
import os
import sys
import argparse
# Auto-execute using the project's local virtual environment Python
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
venv_python = os.path.join(PROJECT_ROOT, "venv", "bin", "python3")
if os.path.exists(venv_python) and sys.executable != venv_python:
os.execv(venv_python, [venv_python] + sys.argv)
from gitea_auth import get_auth_header, resolve_remote, add_remote_args, api_request, repo_api_url
def main(argv=None):
parser = argparse.ArgumentParser(description="List Gitea pull requests.")
add_remote_args(parser)
parser.add_argument("--state", choices=["open", "closed", "all"], default="open",
help="Filter by PR state (default: open).")
args = parser.parse_args(argv)
host, org, repo = resolve_remote(args)
auth = get_auth_header(host)
if not auth:
print(f"Could not get credentials or token for {host}.", file=sys.stderr)
return 1
url = f"{repo_api_url(host, org, repo)}/pulls?state={args.state}"
try:
prs = api_request("GET", url, auth)
if not prs:
print("No pull requests found.")
return 0
for pr in prs:
merge_status = "Mergeable" if pr.get("mergeable") else "Conflicted/Not Mergeable"
print(f"PR #{pr['number']}: {pr['title']}")
print(f" Branch: {pr['head']['ref']} -> {pr['base']['ref']} ({merge_status})")
print(f" URL: {pr['html_url']}")
return 0
except Exception as e:
print(f"Error listing PRs: {e}", file=sys.stderr)
return 1
if __name__ == "__main__":
sys.exit(main())