git_stk/commands/
review.rs1use 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};
8use crate::style;
9
10#[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 = detect_provider()?;
28 let review_provider = review_provider(provider.kind);
29
30 let Some(review) = review_provider.review_for_branch(&branch)? else {
31 bail!("no {} review found for {branch}", provider.kind);
32 };
33
34 anstream::println!(
35 "{} {} -> {} {} {}",
36 review.id,
37 style::branch(&review.branch),
38 style::branch(&review.base),
39 style::state(&review.state),
40 style::dim(&review.url)
41 );
42 Ok(())
43}