cascade_cli/config/
mod.rs1pub mod auth;
2pub mod settings;
3
4pub use auth::{AuthConfig, AuthManager};
5pub use settings::{BitbucketConfig, CascadeConfig, CascadeSettings, GitConfig, Settings};
6
7use crate::errors::{CascadeError, Result};
8use std::fs;
9use std::path::{Path, PathBuf};
10
11pub fn get_config_dir() -> Result<PathBuf> {
13 let home_dir =
14 dirs::home_dir().ok_or_else(|| CascadeError::config("Could not find home directory"))?;
15 Ok(home_dir.join(".cascade"))
16}
17
18pub fn get_repo_config_dir(repo_path: &Path) -> Result<PathBuf> {
20 let config_dir = repo_path.join(".cascade");
21 Ok(config_dir)
22}
23
24pub fn ensure_config_dir(config_dir: &Path) -> Result<()> {
26 if !config_dir.exists() {
27 fs::create_dir_all(config_dir)
28 .map_err(|e| CascadeError::config(format!("Failed to create config directory: {e}")))?;
29 }
30
31 let stacks_dir = config_dir.join("stacks");
33 if !stacks_dir.exists() {
34 fs::create_dir_all(&stacks_dir)
35 .map_err(|e| CascadeError::config(format!("Failed to create stacks directory: {e}")))?;
36 }
37
38 let cache_dir = config_dir.join("cache");
39 if !cache_dir.exists() {
40 fs::create_dir_all(&cache_dir)
41 .map_err(|e| CascadeError::config(format!("Failed to create cache directory: {e}")))?;
42 }
43
44 Ok(())
45}
46
47pub fn is_repo_initialized(repo_path: &Path) -> bool {
49 let config_dir = repo_path.join(".cascade");
50 config_dir.exists() && config_dir.join("config.json").exists()
51}
52
53pub fn initialize_repo(repo_path: &Path, bitbucket_url: Option<String>) -> Result<()> {
55 let config_dir = get_repo_config_dir(repo_path)?;
56 ensure_config_dir(&config_dir)?;
57
58 let settings = Settings::default_for_repo(bitbucket_url);
60 settings.save_to_file(&config_dir.join("config.json"))?;
61
62 tracing::info!("Initialized Cascade repository at {}", repo_path.display());
63 Ok(())
64}