mirror of
https://github.com/openSUSE/osc.git
synced 2025-09-06 13:18:42 +02:00
Add '--reviewer' option to 'git-obs pr review {approve,decline,interactive}' to support group reviews via group review bot
This commit is contained in:
@@ -23,6 +23,10 @@ class PullRequestReviewApproveCommand(osc.commandline_git.GitObsCommand):
|
||||
"--commit",
|
||||
help="Pin the review to the specified commit",
|
||||
)
|
||||
self.add_argument(
|
||||
"--reviewer",
|
||||
help="Review on behalf of the specified reviewer that is associated to group review bot",
|
||||
)
|
||||
|
||||
def run(self, args):
|
||||
from osc import gitea_api
|
||||
@@ -32,12 +36,18 @@ class PullRequestReviewApproveCommand(osc.commandline_git.GitObsCommand):
|
||||
|
||||
self.print_gitea_settings()
|
||||
|
||||
if args.reviewer:
|
||||
try:
|
||||
gitea_api.User.get(self.gitea_conn, args.reviewer)
|
||||
except gitea_api.UserDoesNotExist as e:
|
||||
self.parser.error(f"Invalid reviewer: {e}")
|
||||
|
||||
pull_request_ids = args.id
|
||||
|
||||
for pr_index, pr_id in enumerate(pull_request_ids):
|
||||
self.print_gitea_settings()
|
||||
|
||||
print(f"Approving {pr_id}...")
|
||||
print(f"Approving {pr_id} ...")
|
||||
|
||||
owner, repo, number = gitea_api.PullRequest.split_id(pr_id)
|
||||
gitea_api.PullRequest.approve_review(self.gitea_conn, owner, repo, number, msg=args.message, commit=args.commit)
|
||||
gitea_api.PullRequest.approve_review(self.gitea_conn, owner, repo, number, msg=args.message, commit=args.commit, reviewer=args.reviewer)
|
||||
|
@@ -24,6 +24,10 @@ class PullRequestReviewDeclineCommand(osc.commandline_git.GitObsCommand):
|
||||
"--commit",
|
||||
help="Pin the review to the specified commit",
|
||||
)
|
||||
self.add_argument(
|
||||
"--reviewer",
|
||||
help="Review on behalf of the specified reviewer that is associated to group review bot",
|
||||
)
|
||||
|
||||
def run(self, args):
|
||||
from osc import gitea_api
|
||||
@@ -33,12 +37,18 @@ class PullRequestReviewDeclineCommand(osc.commandline_git.GitObsCommand):
|
||||
|
||||
self.print_gitea_settings()
|
||||
|
||||
if args.reviewer:
|
||||
try:
|
||||
gitea_api.User.get(self.gitea_conn, args.reviewer)
|
||||
except gitea_api.UserDoesNotExist as e:
|
||||
self.parser.error(f"Invalid reviewer: {e}")
|
||||
|
||||
pull_request_ids = args.id
|
||||
|
||||
for pr_index, pr_id in enumerate(pull_request_ids):
|
||||
self.print_gitea_settings()
|
||||
|
||||
print(f"Declining {pr_id}...")
|
||||
print(f"Declining {pr_id} ...")
|
||||
|
||||
owner, repo, number = gitea_api.PullRequest.split_id(pr_id)
|
||||
gitea_api.PullRequest.decline_review(self.gitea_conn, owner, repo, number, msg=args.message, commit=args.commit)
|
||||
gitea_api.PullRequest.decline_review(self.gitea_conn, owner, repo, number, msg=args.message, commit=args.commit, reviewer=args.reviewer)
|
||||
|
@@ -50,11 +50,21 @@ class PullRequestReviewInteractiveCommand(osc.commandline_git.GitObsCommand):
|
||||
nargs="*",
|
||||
help="Pull request ID in <owner>/<repo>#<number> format",
|
||||
)
|
||||
self.add_argument(
|
||||
"--reviewer",
|
||||
help="Review on behalf of the specified reviewer that is associated to group review bot",
|
||||
)
|
||||
|
||||
def run(self, args):
|
||||
from osc import gitea_api
|
||||
from osc.output import get_user_input
|
||||
|
||||
if args.reviewer:
|
||||
try:
|
||||
gitea_api.User.get(self.gitea_conn, args.reviewer)
|
||||
except gitea_api.UserDoesNotExist as e:
|
||||
self.parser.error(f"Invalid reviewer: {e}")
|
||||
|
||||
if args.id:
|
||||
# TODO: deduplicate, skip those that do not require a review (print to stderr)
|
||||
pull_request_ids = args.id
|
||||
@@ -128,12 +138,12 @@ class PullRequestReviewInteractiveCommand(osc.commandline_git.GitObsCommand):
|
||||
|
||||
sys.exit(return_code)
|
||||
|
||||
def approve(self, owner: str, repo: str, number: int, *, commit: str):
|
||||
def approve(self, owner: str, repo: str, number: int, *, commit: str, reviewer: Optional[str] = None):
|
||||
from osc import gitea_api
|
||||
|
||||
gitea_api.PullRequest.approve_review(self.gitea_conn, owner, repo, number, commit=commit)
|
||||
gitea_api.PullRequest.approve_review(self.gitea_conn, owner, repo, number, commit=commit, reviewer=reviewer)
|
||||
|
||||
def decline(self, owner: str, repo: str, number: int):
|
||||
def decline(self, owner: str, repo: str, number: int, reviewer: Optional[str] = None):
|
||||
from osc import gitea_api
|
||||
|
||||
message = gitea_api.edit_message(template=DECLINE_REVIEW_TEMPLATE.format(**locals()))
|
||||
@@ -144,7 +154,7 @@ class PullRequestReviewInteractiveCommand(osc.commandline_git.GitObsCommand):
|
||||
# strip leading and trailing spaces
|
||||
message = message.strip()
|
||||
|
||||
gitea_api.PullRequest.decline_review(self.gitea_conn, owner, repo, number, msg=message)
|
||||
gitea_api.PullRequest.decline_review(self.gitea_conn, owner, repo, number, msg=message, reviewer=reviewer)
|
||||
|
||||
def comment(self, owner: str, repo: str, number: int):
|
||||
from osc import gitea_api
|
||||
|
@@ -426,6 +426,7 @@ class PullRequest:
|
||||
*,
|
||||
msg: Optional[str] = None,
|
||||
commit: Optional[str] = None,
|
||||
reviewer: Optional[str] = None,
|
||||
) -> GiteaHTTPResponse:
|
||||
"""
|
||||
Approve review in a pull request.
|
||||
@@ -435,6 +436,12 @@ class PullRequest:
|
||||
if pr_obj.head_commit != commit:
|
||||
raise RuntimeError("The pull request '{owner}/{repo}#{number}' has changed during the review")
|
||||
|
||||
if reviewer:
|
||||
# group review bot is controlled via messages in comments
|
||||
msg = f"@{reviewer} : approve\n\n" + (msg or "")
|
||||
msg = msg.strip()
|
||||
return cls.add_comment(conn, owner, repo, number, msg=msg)
|
||||
|
||||
url = conn.makeurl("repos", owner, repo, "pulls", str(number), "reviews")
|
||||
# XXX[dmach]: commit_id has no effect; I thought it's going to approve if the commit matches with head and errors out otherwise
|
||||
json_data = {
|
||||
@@ -454,10 +461,17 @@ class PullRequest:
|
||||
*,
|
||||
msg: str,
|
||||
commit: Optional[str] = None,
|
||||
reviewer: Optional[str] = None,
|
||||
) -> GiteaHTTPResponse:
|
||||
"""
|
||||
Decline review (request changes) in a pull request.
|
||||
"""
|
||||
if reviewer:
|
||||
# group review bot is controlled via messages in comments
|
||||
msg = f"@{reviewer} : decline\n\n" + (msg or "")
|
||||
msg = msg.strip()
|
||||
return cls.add_comment(conn, owner, repo, number, msg=msg)
|
||||
|
||||
url = conn.makeurl("repos", owner, repo, "pulls", str(number), "reviews")
|
||||
json_data = {
|
||||
"event": "REQUEST_CHANGES",
|
||||
|
Reference in New Issue
Block a user