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_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, 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}