Skip to main content

git_stk/commands/
config.rs

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