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_provider, review_provider};
8
9/// Print the review request for a branch.
10#[derive(Debug, clap::Args)]
11pub struct Review {
12    #[arg(add = ArgValueCompleter::new(completions::branch_candidates))]
13    branch: Option<String>,
14}
15
16impl Run for Review {
17    fn run(self) -> Result<()> {
18        print_review(self.branch.as_deref())
19    }
20}
21
22pub fn print_review(branch: Option<&str>) -> Result<()> {
23    let branch = branch
24        .map(str::to_owned)
25        .map_or_else(git::current_branch, Ok)?;
26    let provider = detect_provider()?;
27    let review_provider = review_provider(provider.kind);
28
29    let Some(review) = review_provider.review_for_branch(&branch)? else {
30        bail!("no {} review found for {branch}", provider.kind);
31    };
32
33    println!(
34        "{} {} -> {} {} {}",
35        review.id, review.branch, review.base, review.state, review.url
36    );
37    Ok(())
38}