1
0
mirror of https://github.com/openSUSE/osc.git synced 2025-08-20 21:48:53 +02:00
Files

82 lines
2.8 KiB
Python

import sys
import osc.commandline_git
class PullRequestGetCommand(osc.commandline_git.GitObsCommand):
"""
Get details about the specified pull requests
"""
name = "get"
aliases = ["show"] # for compatibility with osc
parent = "PullRequestCommand"
def init_arguments(self):
from osc.commandline_git import complete_pr
self.add_argument_owner_repo_pull(nargs="+").completer = complete_pr
self.add_argument(
"-p",
"--patch",
action="store_true",
help="Show patches associated with the pull requests",
)
self.add_argument(
"--timeline",
action="store_true",
help="Show timelines of the pull requests",
)
def run(self, args):
from osc import gitea_api
from osc.core import highlight_diff
from osc.output import tty
self.print_gitea_settings()
num_entries = 0
failed_entries = []
for owner, repo, pull in args.owner_repo_pull:
try:
pr_obj = gitea_api.PullRequest.get(self.gitea_conn, owner, repo, int(pull))
num_entries += 1
except gitea_api.GiteaException as e:
if e.status == 404:
failed_entries.append(f"{owner}/{repo}#{pull}")
continue
raise
print(pr_obj.to_human_readable_string())
if args.timeline:
print()
print(tty.colorize("Timeline:", "bold"))
timeline = gitea_api.IssueTimelineEntry.list(self.gitea_conn, owner, repo, pull)
for entry in timeline:
if entry._data is None:
print(f"{tty.colorize('ERROR', 'red,bold,blink')}: Gitea returned ``None`` instead of a timeline entry")
continue
text, body = entry.format()
if text is None:
continue
print(f"{gitea_api.dt_sanitize(entry.created_at)} {entry.user} {text}")
for line in (body or "").strip().splitlines():
print(f" | {line}")
if args.patch:
print("")
print(tty.colorize("Patch:", "bold"))
patch = gitea_api.PullRequest.get_patch(self.gitea_conn, owner, repo, pull)
patch = highlight_diff(patch)
print(patch.decode("utf-8"))
print()
print(f"Total entries: {num_entries}", file=sys.stderr)
if failed_entries:
print(
f"{tty.colorize('ERROR', 'red,bold')}: Couldn't retrieve the following pull requests: {', '.join(failed_entries)}",
file=sys.stderr,
)
sys.exit(1)