1use anyhow::Result;
4
5use crate::cli::PushMode;
6use crate::git;
7
8pub const PROVIDER_KEY: &str = "stk.provider";
9pub const REMOTE_KEY: &str = "stk.remote";
10pub const UPDATE_REFS_KEY: &str = "stk.updateRefs";
11pub const PUSH_ON_RESTACK_KEY: &str = "stk.pushOnRestack";
12pub const PUSH_ON_SUBMIT_KEY: &str = "stk.pushOnSubmit";
13pub const SUBMIT_STACK_KEY: &str = "stk.submitStack";
14pub const MERGE_STRATEGY_KEY: &str = "stk.mergeStrategy";
15pub const NO_UPDATE_CHECK_KEY: &str = "stk.noUpdateCheck";
16pub const DEFAULT_REMOTE: &str = "origin";
17
18pub const SETTINGS: &[(&str, &str)] = &[
21 (PROVIDER_KEY, "auto-detect from the remote URL"),
22 (REMOTE_KEY, DEFAULT_REMOTE),
23 (UPDATE_REFS_KEY, "false"),
24 (PUSH_ON_RESTACK_KEY, "false"),
25 (PUSH_ON_SUBMIT_KEY, "false"),
26 (SUBMIT_STACK_KEY, "false"),
27 (MERGE_STRATEGY_KEY, "squash"),
28 (NO_UPDATE_CHECK_KEY, "false"),
29];
30
31pub fn remote() -> Result<String> {
33 Ok(git::config_get(REMOTE_KEY)?.unwrap_or_else(|| DEFAULT_REMOTE.to_owned()))
34}
35
36pub fn merge_strategy() -> Result<String> {
38 let strategy = git::config_get(MERGE_STRATEGY_KEY)?.unwrap_or_else(|| "squash".to_owned());
39 match strategy.as_str() {
40 "squash" | "rebase" | "merge" => Ok(strategy),
41 other => anyhow::bail!(
42 "unsupported stk.mergeStrategy value {other:?}; expected squash, rebase, or merge"
43 ),
44 }
45}
46
47pub fn bool_setting(key: &str) -> Result<bool> {
49 Ok(git::config_get_bool(key)?.unwrap_or(false))
50}
51
52pub fn push_enabled(mode: PushMode, key: &str) -> Result<bool> {
54 match mode {
55 PushMode::Config => Ok(git::config_get_bool(key)?.unwrap_or(false)),
56 PushMode::Enabled => Ok(true),
57 PushMode::Disabled => Ok(false),
58 }
59}