Skip to main content

chronicle/cli/
show.rs

1use crate::error::Result;
2use crate::git::CliOps;
3
4pub fn run(path: String, anchor: Option<String>, commit: String, no_tui: bool) -> Result<()> {
5    let repo_dir = std::env::current_dir().map_err(|e| crate::error::ChronicleError::Io {
6        source: e,
7        location: snafu::Location::default(),
8    })?;
9    let git_ops = CliOps::new(repo_dir);
10
11    let data = crate::show::build_show_data(&git_ops, &path, &commit, anchor.as_deref())?;
12
13    let use_tui = !no_tui && std::io::IsTerminal::is_terminal(&std::io::stdout());
14
15    if use_tui {
16        #[cfg(feature = "tui")]
17        {
18            return crate::show::run_tui(data);
19        }
20        #[cfg(not(feature = "tui"))]
21        {
22            return run_plain_output(&data);
23        }
24    }
25
26    run_plain_output(&data)
27}
28
29fn run_plain_output(data: &crate::show::ShowData) -> Result<()> {
30    crate::show::run_plain(data, &mut std::io::stdout()).map_err(|e| {
31        crate::error::ChronicleError::Io {
32            source: e,
33            location: snafu::Location::default(),
34        }
35    })
36}