feat(core): introduce command line argument and env variables to customize config path. #267
This commit is contained in:
parent
f252c6a119
commit
47587681bd
|
@ -20,17 +20,20 @@
|
|||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
|
||||
use clap::{App, AppSettings, Arg, SubCommand};
|
||||
use std::path::PathBuf;
|
||||
|
||||
use clap::{App, AppSettings, Arg, ArgMatches, SubCommand};
|
||||
use cli::{CliModule, CliModuleArgs};
|
||||
use log::{error, info};
|
||||
use logging::FileProxy;
|
||||
use simplelog::{
|
||||
CombinedLogger, ConfigBuilder, LevelFilter, TermLogger, TerminalMode, WriteLogger,
|
||||
};
|
||||
|
||||
mod cli;
|
||||
mod util;
|
||||
mod engine;
|
||||
mod logging;
|
||||
mod util;
|
||||
|
||||
const VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
const LOG_FILE_NAME: &str = "espanso.log";
|
||||
|
@ -82,6 +85,18 @@ fn main() {
|
|||
.multiple(true)
|
||||
.help("Sets the level of verbosity"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("config_dir")
|
||||
.long("config_dir")
|
||||
.takes_value(true)
|
||||
.help("Specify a custom path from which espanso should read the configuration"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("runtime_dir")
|
||||
.long("runtime_dir")
|
||||
.takes_value(true)
|
||||
.help("Specify a custom path for the espanso runtime directory"),
|
||||
)
|
||||
// .subcommand(SubCommand::with_name("cmd")
|
||||
// .about("Send a command to the espanso daemon.")
|
||||
// .subcommand(SubCommand::with_name("exit")
|
||||
|
@ -239,8 +254,14 @@ fn main() {
|
|||
let mut cli_args: CliModuleArgs = CliModuleArgs::default();
|
||||
|
||||
if handler.requires_paths || handler.requires_config {
|
||||
// TODO: here take into account env variable and/or command line flag
|
||||
let paths = espanso_path::resolve_paths();
|
||||
let force_config_path = get_path_override(&matches, "config_dir", "ESPANSO_CONFIG_DIR");
|
||||
let force_runtime_path = get_path_override(&matches, "runtime_dir", "ESPANSO_RUNTIME_DIR");
|
||||
|
||||
let paths = espanso_path::resolve_paths(force_config_path.as_deref(), force_runtime_path.as_deref());
|
||||
|
||||
info!("reading configs from: {:?}", paths.config);
|
||||
info!("reading packages from: {:?}", paths.packages);
|
||||
info!("using runtime dir: {:?}", paths.runtime);
|
||||
|
||||
if handler.requires_config {
|
||||
let (config_store, match_store, is_legacy_config) =
|
||||
|
@ -281,3 +302,25 @@ fn main() {
|
|||
println!();
|
||||
}
|
||||
}
|
||||
|
||||
fn get_path_override(matches: &ArgMatches, argument: &str, env_var: &str) -> Option<PathBuf> {
|
||||
if let Some(path) = matches.value_of(argument) {
|
||||
let path = PathBuf::from(path.trim());
|
||||
if path.is_dir() {
|
||||
return Some(path)
|
||||
} else {
|
||||
error!("{} argument was specified, but it doesn't point to a valid directory. Make sure to create it first.", argument);
|
||||
std::process::exit(1);
|
||||
}
|
||||
} else if let Ok(path) = std::env::var(env_var) {
|
||||
let path = PathBuf::from(path.trim());
|
||||
if path.is_dir() {
|
||||
return Some(path)
|
||||
} else {
|
||||
error!("{} env variable was specified, but it doesn't point to a valid directory. Make sure to create it first.", env_var);
|
||||
std::process::exit(1);
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user