33 lines
974 B
Rust
33 lines
974 B
Rust
//! `pr <number> [repo]` — print key fields of a PR as JSON.
|
|
|
|
use anyhow::Result;
|
|
use clap::Args as ClapArgs;
|
|
use serde_json::json;
|
|
|
|
use crate::client::{Client, index};
|
|
use crate::verbs::print_json;
|
|
|
|
#[derive(ClapArgs)]
|
|
pub struct Args {
|
|
/// PR number.
|
|
number: u64,
|
|
}
|
|
|
|
pub fn run(client: &Client, args: Args) -> Result<()> {
|
|
let (owner, name) = client.owner_repo()?;
|
|
let pull = client
|
|
.api()
|
|
.repo_get_pull_request(owner, name, index(args.number)?)
|
|
.send()?;
|
|
let trimmed = json!({
|
|
"number": pull.number,
|
|
"title": pull.title,
|
|
"state": pull.state,
|
|
"merged": pull.merged,
|
|
"user": pull.user.as_ref().and_then(|u| u.login.as_deref()),
|
|
"head_sha": pull.head.as_ref().and_then(|h| h.sha.as_deref()),
|
|
"head_branch": pull.head.as_ref().and_then(|h| h.label.as_deref()),
|
|
"base_branch": pull.base.as_ref().and_then(|b| b.label.as_deref()),
|
|
});
|
|
print_json(&trimmed)
|
|
}
|