From 1698992de6a601e65a0598ed132cab5419f7e578 Mon Sep 17 00:00:00 2001 From: Alex Vinyals Date: Sun, 9 Jul 2023 16:35:07 +0200 Subject: [PATCH] Fix `:log-open` when `--log` is specified (#7573) --- helix-loader/src/lib.rs | 44 ++++++++++++++++++++++++++--------------- helix-term/src/main.rs | 24 ++++++---------------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/helix-loader/src/lib.rs b/helix-loader/src/lib.rs index ad4ad899d..c51c9c7de 100644 --- a/helix-loader/src/lib.rs +++ b/helix-loader/src/lib.rs @@ -11,21 +11,20 @@ static CONFIG_FILE: once_cell::sync::OnceCell = once_cell::sync::OnceCell::new(); +static LOG_FILE: once_cell::sync::OnceCell = once_cell::sync::OnceCell::new(); + pub fn initialize_config_file(specified_file: Option) { - let config_file = specified_file.unwrap_or_else(|| { - let config_dir = config_dir(); - - if !config_dir.exists() { - std::fs::create_dir_all(&config_dir).ok(); - } - - config_dir.join("config.toml") - }); - - // We should only initialize this value once. + let config_file = specified_file.unwrap_or_else(default_config_file); + ensure_parent_dir(&config_file); CONFIG_FILE.set(config_file).ok(); } +pub fn initialize_log_file(specified_file: Option) { + let log_file = specified_file.unwrap_or_else(default_log_file); + ensure_parent_dir(&log_file); + LOG_FILE.set(log_file).ok(); +} + /// A list of runtime directories from highest to lowest priority /// /// The priority is: @@ -122,10 +121,11 @@ pub fn cache_dir() -> PathBuf { } pub fn config_file() -> PathBuf { - CONFIG_FILE - .get() - .map(|path| path.to_path_buf()) - .unwrap_or_else(|| config_dir().join("config.toml")) + CONFIG_FILE.get().map(|path| path.to_path_buf()).unwrap() +} + +pub fn log_file() -> PathBuf { + LOG_FILE.get().map(|path| path.to_path_buf()).unwrap() } pub fn workspace_config_file() -> PathBuf { @@ -136,7 +136,7 @@ pub fn lang_config_file() -> PathBuf { config_dir().join("languages.toml") } -pub fn log_file() -> PathBuf { +pub fn default_log_file() -> PathBuf { cache_dir().join("helix.log") } @@ -227,6 +227,18 @@ pub fn find_workspace() -> (PathBuf, bool) { (current_dir, true) } +fn default_config_file() -> PathBuf { + config_dir().join("config.toml") +} + +fn ensure_parent_dir(path: &Path) { + if let Some(parent) = path.parent() { + if !parent.exists() { + std::fs::create_dir_all(parent).ok(); + } + } +} + #[cfg(test)] mod merge_toml_tests { use std::str; diff --git a/helix-term/src/main.rs b/helix-term/src/main.rs index 73513bf39..97e962e0d 100644 --- a/helix-term/src/main.rs +++ b/helix-term/src/main.rs @@ -4,9 +4,8 @@ use helix_term::application::Application; use helix_term::args::Args; use helix_term::config::{Config, ConfigLoadError}; -use std::path::PathBuf; -fn setup_logging(logpath: PathBuf, verbosity: u64) -> Result<()> { +fn setup_logging(verbosity: u64) -> Result<()> { let mut base_config = fern::Dispatch::new(); base_config = match verbosity { @@ -27,7 +26,7 @@ fn setup_logging(logpath: PathBuf, verbosity: u64) -> Result<()> { message )) }) - .chain(fern::log_file(logpath)?); + .chain(fern::log_file(helix_loader::log_file())?); base_config.chain(file_config).apply()?; @@ -41,12 +40,6 @@ fn main() -> Result<()> { #[tokio::main] async fn main_impl() -> Result { - let logpath = helix_loader::log_file(); - let parent = logpath.parent().unwrap(); - if !parent.exists() { - std::fs::create_dir_all(parent).ok(); - } - let help = format!( "\ {} {} @@ -78,7 +71,7 @@ async fn main_impl() -> Result { VERSION_AND_GIT_HASH, env!("CARGO_PKG_AUTHORS"), env!("CARGO_PKG_DESCRIPTION"), - logpath.display(), + helix_loader::default_log_file().display(), ); let args = Args::parse_args().context("could not parse arguments")?; @@ -116,15 +109,10 @@ async fn main_impl() -> Result { return Ok(0); } - let logpath = args.log_file.as_ref().cloned().unwrap_or(logpath); - setup_logging(logpath, args.verbosity).context("failed to initialize logging")?; - - let config_dir = helix_loader::config_dir(); - if !config_dir.exists() { - std::fs::create_dir_all(&config_dir).ok(); - } - helix_loader::initialize_config_file(args.config_file.clone()); + helix_loader::initialize_log_file(args.log_file.clone()); + + setup_logging(args.verbosity).context("failed to initialize logging")?; let config = match Config::load_default() { Ok(config) => config,