mirror of
https://github.com/openSUSE/osc.git
synced 2025-11-04 21:38:54 +01:00
Implement '--reviewer' and '--review-state' options for 'git-obs pr list'
This commit is contained in:
@@ -19,6 +19,19 @@ class PullRequestListCommand(osc.commandline_git.GitObsCommand):
|
|||||||
default="open",
|
default="open",
|
||||||
help="State of the pull requests (default: open)",
|
help="State of the pull requests (default: open)",
|
||||||
)
|
)
|
||||||
|
self.add_argument(
|
||||||
|
"--reviewer",
|
||||||
|
dest="reviewers",
|
||||||
|
action="append",
|
||||||
|
help="Filter by reviewer. Team reviewers start with '@'.",
|
||||||
|
)
|
||||||
|
self.add_argument(
|
||||||
|
"--review-state",
|
||||||
|
dest="review_states",
|
||||||
|
action="append",
|
||||||
|
choices=("REQUEST_REVIEW", "APPROVED"),
|
||||||
|
help="Filter by review state. Needs to be used with ``--reviewer``.",
|
||||||
|
)
|
||||||
|
|
||||||
def run(self, args):
|
def run(self, args):
|
||||||
from osc import gitea_api
|
from osc import gitea_api
|
||||||
@@ -28,6 +41,25 @@ class PullRequestListCommand(osc.commandline_git.GitObsCommand):
|
|||||||
total_entries = 0
|
total_entries = 0
|
||||||
for owner, repo in args.owner_repo:
|
for owner, repo in args.owner_repo:
|
||||||
data = gitea_api.PullRequest.list(self.gitea_conn, owner, repo, state=args.state).json()
|
data = gitea_api.PullRequest.list(self.gitea_conn, owner, repo, state=args.state).json()
|
||||||
|
|
||||||
|
review_states = args.review_states or ["REQUEST_REVIEW"]
|
||||||
|
|
||||||
|
if args.reviewers:
|
||||||
|
new_data = []
|
||||||
|
for entry in data:
|
||||||
|
all_reviews = gitea_api.PullRequest.get_reviews(self.gitea_conn, owner, repo, entry["number"]).json()
|
||||||
|
user_reviews = {i["user"]["login"]: i["state"] for i in all_reviews if i["user"] and i["state"] in review_states}
|
||||||
|
team_reviews = {i["team"]["name"]: i["state"] for i in all_reviews if i["team"] and i["state"] in review_states}
|
||||||
|
|
||||||
|
user_reviewers = [i for i in args.reviewers if not i.startswith("@")]
|
||||||
|
team_reviewers = [i[1:] for i in args.reviewers if i.startswith("@")]
|
||||||
|
|
||||||
|
if set(user_reviews) & set(user_reviewers) or set(team_reviews) & set(team_reviewers):
|
||||||
|
print(set(user_reviews) & set(user_reviewers), set(team_reviews) & set(team_reviewers))
|
||||||
|
new_data.append(entry)
|
||||||
|
|
||||||
|
data = new_data
|
||||||
|
|
||||||
total_entries += len(data)
|
total_entries += len(data)
|
||||||
|
|
||||||
text = gitea_api.PullRequest.list_to_human_readable_string(data, sort=True)
|
text = gitea_api.PullRequest.list_to_human_readable_string(data, sort=True)
|
||||||
|
|||||||
@@ -261,6 +261,17 @@ class PullRequest:
|
|||||||
}
|
}
|
||||||
return conn.request("POST", url, json_data=json_data)
|
return conn.request("POST", url, json_data=json_data)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_reviews(
|
||||||
|
cls,
|
||||||
|
conn: Connection,
|
||||||
|
owner: str,
|
||||||
|
repo: str,
|
||||||
|
number: int,
|
||||||
|
):
|
||||||
|
url = conn.makeurl("repos", owner, repo, "pulls", str(number), "reviews")
|
||||||
|
return conn.request("GET", url)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def approve_review(
|
def approve_review(
|
||||||
cls,
|
cls,
|
||||||
|
|||||||
Reference in New Issue
Block a user