Skip to main content

git_stk/commands/
config.rs

1use anyhow::Result;
2
3use crate::commands::Run;
4use crate::git;
5use crate::settings::SETTINGS;
6use crate::style;
7
8/// Print all stk git config settings and branch metadata.
9#[derive(Debug, clap::Args)]
10pub struct Config {}
11
12impl Run for Config {
13    fn run(self) -> Result<()> {
14        print_config()
15    }
16}
17
18/// Print every stk-owned git config value: the `[stk]` settings (with
19/// defaults for unset keys) and the per-branch stack metadata.
20pub fn print_config() -> Result<()> {
21    for (key, default) in SETTINGS {
22        match git::config_get(key)? {
23            Some(value) => println!("{key} = {value}"),
24            None => anstream::println!("{key} {}", style::dim(&format!("(default: {default})"))),
25        }
26    }
27
28    let metadata = git::config_get_regexp(r"^branch\..*\.stk(parent|base)$")?;
29    if metadata.is_empty() {
30        println!();
31        anstream::println!("{}", style::dim("no branch metadata (no stacked branches)"));
32        return Ok(());
33    }
34
35    println!();
36    println!("branch metadata:");
37    for (key, value) in metadata {
38        println!("  {key} = {value}");
39    }
40    Ok(())
41}