Skip to main content

git_stk/commands/
review.rs

1use anyhow::{Result, bail};
2use clap_complete::engine::ArgValueCompleter;
3
4use crate::commands::Run;
5use crate::completions;
6use crate::git;
7use crate::providers::detect_review_provider;
8use crate::style;
9
10/// Print the review request for a branch.
11#[derive(Debug, clap::Args)]
12pub struct Review {
13    #[arg(add = ArgValueCompleter::new(completions::branch_candidates))]
14    branch: Option<String>,
15}
16
17impl Run for Review {
18    fn run(self) -> Result<()> {
19        print_review(self.branch.as_deref())
20    }
21}
22
23pub fn print_review(branch: Option<&str>) -> Result<()> {
24    let branch = branch
25        .map(str::to_owned)
26        .map_or_else(git::current_branch, Ok)?;
27    let (provider, review_provider) = detect_review_provider()?;
28
29    let Some(review) = review_provider.review_for_branch(&branch)? else {
30        bail!("no {} review found for {branch}", provider.kind);
31    };
32
33    anstream::println!(
34        "{} {} -> {} {} {}",
35        review.id,
36        style::branch(&review.branch),
37        style::branch(&review.base),
38        style::state(&review.state),
39        style::dim(&review.url)
40    );
41    Ok(())
42}