hive-forge: pr request-review verb — set/withdraw requested reviewers (closes #2153)
This commit is contained in:
parent
2f43077e31
commit
a97d159009
5 changed files with 51 additions and 0 deletions
41
hive-forge/src/verbs/pr_request_review.rs
Normal file
41
hive-forge/src/verbs/pr_request_review.rs
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
//! `pr-request-review <number> <user> [--remove]` — add or remove a
|
||||
//! requested reviewer on a PR. Unlike `assign` (assignees, mutate +
|
||||
//! PATCH the issue) Forgejo has a dedicated endpoint pair for review
|
||||
//! requests: `POST /repos/{repo}/pulls/{index}/requested_reviewers`
|
||||
//! adds, `DELETE` (same path + body) removes. Requesting a review from
|
||||
//! a user who is already requested is a Forgejo-side no-op, so the verb
|
||||
//! is idempotent in both directions.
|
||||
|
||||
use anyhow::Result;
|
||||
use clap::Args as ClapArgs;
|
||||
use serde_json::json;
|
||||
|
||||
use crate::client::Client;
|
||||
|
||||
#[derive(ClapArgs)]
|
||||
pub struct Args {
|
||||
/// PR number.
|
||||
pub(crate) number: u64,
|
||||
/// User login to request a review from (or withdraw with `--remove`).
|
||||
user: String,
|
||||
/// Withdraw the review request instead of adding it.
|
||||
#[arg(long)]
|
||||
remove: bool,
|
||||
}
|
||||
|
||||
pub fn run(client: &Client, args: Args) -> Result<()> {
|
||||
let repo = client.repo();
|
||||
let path = format!("/repos/{repo}/pulls/{}/requested_reviewers", args.number);
|
||||
let body = json!({ "reviewers": [args.user] });
|
||||
if args.remove {
|
||||
client.delete(&path, Some(&body))?;
|
||||
println!(
|
||||
"review request withdrawn: {} on #{}",
|
||||
args.user, args.number
|
||||
);
|
||||
} else {
|
||||
client.post_json(&path, &body)?;
|
||||
println!("review requested: {} on #{}", args.user, args.number);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
Loading…
Reference in a new issue