1- use std:: env;
1+ use std:: { env, path :: Path } ;
22
33use clap:: { Parser , Subcommand , ValueEnum } ;
44use directories:: ProjectDirs ;
5- use snafu:: { ResultExt , Snafu } ;
5+ use snafu:: { OptionExt , ResultExt , Snafu } ;
66use stackable_cockpit:: {
77 constants:: { HELM_REPO_NAME_DEV , HELM_REPO_NAME_STABLE , HELM_REPO_NAME_TEST } ,
88 helm,
@@ -19,6 +19,7 @@ use tracing::{Level, instrument};
1919use crate :: {
2020 args:: { CommonFileArgs , CommonOperatorConfigsArgs , CommonRepoArgs } ,
2121 cmds:: { cache, completions, debug, demo, operator, release, stack, stacklet} ,
22+ config:: UserConfig ,
2223 constants:: {
2324 DEMOS_REPOSITORY_DEMOS_SUBPATH , DEMOS_REPOSITORY_STACKS_SUBPATH , DEMOS_REPOSITORY_URL_BASE ,
2425 ENV_KEY_DEMO_FILES , ENV_KEY_RELEASE_FILES , ENV_KEY_STACK_FILES , REMOTE_RELEASE_FILE ,
@@ -55,6 +56,9 @@ pub enum Error {
5556
5657 #[ snafu( display( "helm error" ) ) ]
5758 Helm { source : helm:: Error } ,
59+
60+ #[ snafu( display( "failed to retrieve XDG directories" ) ) ]
61+ RetrieveXdgDirectories ,
5862}
5963
6064#[ derive( Debug , Parser ) ]
@@ -148,27 +152,29 @@ impl Cli {
148152 Ok ( ( ) )
149153 }
150154
151- pub fn cache_settings ( & self ) -> Result < Settings , CacheSettingsError > {
155+ fn cache_settings ( & self , cache_directory : & Path ) -> Result < Settings , CacheSettingsError > {
152156 if self . no_cache {
153157 tracing:: debug!( "Cache disabled" ) ;
154158 Ok ( Settings :: disabled ( ) )
155159 } else {
156- let project_dir = ProjectDirs :: from (
157- USER_DIR_QUALIFIER ,
158- USER_DIR_ORGANIZATION_NAME ,
159- USER_DIR_APPLICATION_NAME ,
160- )
161- . ok_or ( CacheSettingsError :: UserDir ) ?;
162-
163- let cache_dir = project_dir. cache_dir ( ) ;
164160 tracing:: debug!(
165- cache_dir = %cache_dir . to_string_lossy( ) ,
161+ cache_directory = %cache_directory . to_string_lossy( ) ,
166162 "Setting cache directory"
167163 ) ;
168- Ok ( Settings :: disk ( cache_dir ) )
164+ Ok ( Settings :: disk ( cache_directory ) )
169165 }
170166 }
171167
168+ #[ allow( clippy:: result_large_err) ]
169+ fn xdg_directories ( ) -> Result < ProjectDirs , Error > {
170+ ProjectDirs :: from (
171+ USER_DIR_QUALIFIER ,
172+ USER_DIR_ORGANIZATION_NAME ,
173+ USER_DIR_APPLICATION_NAME ,
174+ )
175+ . context ( RetrieveXdgDirectoriesSnafu )
176+ }
177+
172178 #[ instrument( skip_all) ]
173179 pub async fn run ( & self ) -> Result < String , Error > {
174180 // FIXME (Techassi): There might be a better way to handle this with
@@ -181,8 +187,16 @@ impl Cli {
181187 _ => self . add_helm_repos ( ) . context ( HelmSnafu ) ?,
182188 }
183189
190+ let xdg_directories = Cli :: xdg_directories ( ) ?;
191+ let user_config_path = xdg_directories. config_dir ( ) . join ( "config.toml" ) ;
192+
193+ let _user_config = UserConfig :: from_file ( user_config_path)
194+ . unwrap ( )
195+ . unwrap_or_default ( ) ;
196+ dbg ! ( _user_config) ;
197+
184198 let cache = self
185- . cache_settings ( )
199+ . cache_settings ( xdg_directories . cache_dir ( ) )
186200 . unwrap ( )
187201 . try_into_cache ( )
188202 . await
0 commit comments