From 69f7565746b253b0d0dbda7b9f6edf8b0e8b0265 Mon Sep 17 00:00:00 2001 From: Daniel Karzel Date: Fri, 30 Apr 2021 11:01:30 +1000 Subject: [PATCH] !fixup Different default directories for CLI and ASB Using the same default directory as data-/config-dir has caused unwanted side effects when running both applications on the same machine. Use these directory names: - ASB: xmr-btc-swap/asb - CLI: xmr-btc-swap/cli Since the functionality is now application specific the respective functions were moved into the appropriate module of the application. --- CHANGELOG.md | 8 ++++---- swap/src/asb/config.rs | 28 +++++++++++++--------------- swap/src/cli/command.rs | 11 +++++------ swap/src/fs.rs | 23 +++++++++++++++++++++-- 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20c99674..4ee491b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,11 +10,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - An issue where both the ASB and the CLI point to the same default directory `xmr-btc-swap` for storing data. - The asb now uses `xmr-btc-swap-asb` and the CLI `xmr-btc-swap-cli` as default directory. + The asb now uses `xmr-btc-swap/asb` and the CLI `xmr-btc-swap/cli` as default directory. This is a breaking change. - If you want to access data created by a previous version you will have to rename the data folder or one of the following. - For the CLI you can use `--data-dir` to point to the old directory. - For the ASB you can change the data-dir in the config file of the ASB. + If you want to access data created by a previous version you will have to rename the data folder or one of the following: + 1. For the CLI you can use `--data-dir` to point to the old directory. + 2. For the ASB you can change the data-dir in the config file of the ASB. ## [0.5.0] - 2021-04-17 diff --git a/swap/src/asb/config.rs b/swap/src/asb/config.rs index 51a9d08c..2c1e86e9 100644 --- a/swap/src/asb/config.rs +++ b/swap/src/asb/config.rs @@ -1,10 +1,9 @@ -use crate::fs::ensure_directory_exists; +use crate::fs::{ensure_directory_exists, system_config_dir, system_data_dir}; use crate::tor::{DEFAULT_CONTROL_PORT, DEFAULT_SOCKS5_PORT}; use anyhow::{Context, Result}; use config::ConfigError; use dialoguer::theme::ColorfulTheme; use dialoguer::Input; -use directories_next::ProjectDirs; use libp2p::core::Multiaddr; use serde::{Deserialize, Serialize}; use std::ffi::OsStr; @@ -100,22 +99,21 @@ pub fn read_config(config_path: PathBuf) -> Result/.config/xmr-btc-swap/config.toml -// OSX: /Users//Library/Preferences/xmr-btc-swap/config.toml +/// Default location for storing the config file for the ASB +// Takes the default system config-dir and adds a `/asb/config.toml` pub fn default_config_path() -> Result { - ProjectDirs::from("", "", "xmr-btc-swap-asb") - .map(|proj_dirs| proj_dirs.config_dir().to_path_buf()) + system_config_dir() + .map(|dir| Path::join(&dir, "asb")) .map(|dir| Path::join(&dir, "config.toml")) - .context("Could not generate default configuration path") + .context("Could not generate default config file path") } -/// This is the default location for storing data for the ASB -// Linux: /home//.local/share/xmr-btc-swap-asb/ -// OSX: /Users//Library/Application Support/xmr-btc-swap-asb/ -fn asb_default_data_dir() -> Option { - ProjectDirs::from("", "", "xmr-btc-swap-asb") - .map(|proj_dirs| proj_dirs.data_dir().to_path_buf()) +/// Default location for storing data for the CLI +// Takes the default system data-dir and adds a `/asb` +fn default_data_dir() -> Result { + system_data_dir() + .map(|proj_dir| Path::join(&proj_dir, "asb")) + .context("Could not generate default data dir") } pub fn initial_setup(config_path: PathBuf, config_file: F) -> Result<()> @@ -141,7 +139,7 @@ pub fn query_user_for_initial_testnet_config() -> Result { let data_dir = Input::with_theme(&ColorfulTheme::default()) .with_prompt("Enter data directory for asb or hit return to use default") .default( - asb_default_data_dir() + default_data_dir() .context("No default data dir value for this system")? .to_str() .context("Unsupported characters in default path")? diff --git a/swap/src/cli/command.rs b/swap/src/cli/command.rs index 51f0dfe7..6cac6c0f 100644 --- a/swap/src/cli/command.rs +++ b/swap/src/cli/command.rs @@ -1,8 +1,8 @@ +use crate::fs::system_data_dir; use anyhow::{Context, Result}; -use directories_next::ProjectDirs; use libp2p::core::Multiaddr; use libp2p::PeerId; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use std::str::FromStr; use url::Url; use uuid::Uuid; @@ -135,13 +135,12 @@ pub struct MoneroParams { pub struct Data(pub PathBuf); /// Default location for storing data for the CLI -// Linux: /home//.local/share/xmr-btc-swap-cli/ -// OSX: /Users//Library/Application Support/xmr-btc-swap-cli/ +// Takes the default system data-dir and adds a `/cli` impl Default for Data { fn default() -> Self { Data( - ProjectDirs::from("", "", "xmr-btc-swap-cli") - .map(|proj_dirs| proj_dirs.data_dir().to_path_buf()) + system_data_dir() + .map(|proj_dir| Path::join(&proj_dir, "cli")) .expect("computed valid path for data dir"), ) } diff --git a/swap/src/fs.rs b/swap/src/fs.rs index 038c2913..914b39dd 100644 --- a/swap/src/fs.rs +++ b/swap/src/fs.rs @@ -1,5 +1,24 @@ -use anyhow::Result; -use std::path::Path; +use anyhow::{Context, Result}; +use directories_next::ProjectDirs; +use std::path::{Path, PathBuf}; + +/// This is the default location for the overall config-dir specific by system +// Linux: /home//.config/xmr-btc-swap/ +// OSX: /Users//Library/Preferences/xmr-btc-swap/ +pub fn system_config_dir() -> Result { + ProjectDirs::from("", "", "xmr-btc-swap") + .map(|proj_dirs| proj_dirs.config_dir().to_path_buf()) + .context("Could not generate default system configuration dir path") +} + +/// This is the default location for the overall data-dir specific by system +// Linux: /home//.local/share/xmr-btc-swap/ +// OSX: /Users//Library/ApplicationSupport/xmr-btc-swap/ +pub fn system_data_dir() -> Result { + ProjectDirs::from("", "", "xmr-btc-swap") + .map(|proj_dirs| proj_dirs.data_dir().to_path_buf()) + .context("Could not generate default system data-dir dir path") +} pub fn ensure_directory_exists(file: &Path) -> Result<(), std::io::Error> { if let Some(path) = file.parent() {