Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Base directory octopus #1370

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions apps/src/lib/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1817,9 +1817,10 @@ pub mod args {
configuration and state is stored. This value can also \
be set via `NAMADA_BASE_DIR` environment variable, but \
the argument takes precedence, if specified. Defaults to \
`$HOME/.config/namada` or `$HOME/Library/Application\\ \
Support/com.heliax.namada` depending on the operating \
system (former is linux, latter is osx).",
`$XDG_DATA_HOME/namada` (`$HOME/.local/share/namada` \
where `XDG_DATA_HOME` is unset) on \
Unix,`$HOME/Library/Application Support/Namada` on \
Mac,and `%AppData%\\Namada` on Windows.",
))
.arg(WASM_DIR.def().about(
"Directory with built WASM validity predicates, \
Expand Down
41 changes: 21 additions & 20 deletions apps/src/lib/client/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ pub async fn join_network(
use tokio::fs;

let base_dir = global_args.base_dir;
let default_namada_folder = crate::config::get_default_namada_folder();

// If the base-dir doesn't exist yet, create it
if let Err(err) = fs::canonicalize(&base_dir).await {
Expand Down Expand Up @@ -151,7 +152,7 @@ pub async fn join_network(
// first.
let cwd = env::current_dir().unwrap();
let (unpack_dir, non_default_dir) =
if base_dir_full != cwd.join(config::DEFAULT_BASE_DIR) {
if base_dir_full != cwd.join(default_namada_folder.clone()) {
(base_dir.clone(), true)
} else {
(PathBuf::from_str(".").unwrap(), false)
Expand All @@ -170,7 +171,7 @@ pub async fn join_network(
fs::rename(
&wasm_dir,
unpack_dir
.join(config::DEFAULT_BASE_DIR)
.join(default_namada_folder.clone())
.join(chain_id.as_str())
.join(config::DEFAULT_WASM_DIR),
)
Expand All @@ -181,7 +182,7 @@ pub async fn join_network(
// Move the chain dir
fs::rename(
unpack_dir
.join(config::DEFAULT_BASE_DIR)
.join(default_namada_folder.clone())
.join(chain_id.as_str()),
&chain_dir,
)
Expand All @@ -191,7 +192,7 @@ pub async fn join_network(
// Move the genesis file
fs::rename(
unpack_dir
.join(config::DEFAULT_BASE_DIR)
.join(default_namada_folder.clone())
.join(format!("{}.toml", chain_id.as_str())),
base_dir_full.join(format!("{}.toml", chain_id.as_str())),
)
Expand All @@ -201,15 +202,15 @@ pub async fn join_network(
// Move the global config
fs::rename(
unpack_dir
.join(config::DEFAULT_BASE_DIR)
.join(default_namada_folder.clone())
.join(config::global::FILENAME),
base_dir_full.join(config::global::FILENAME),
)
.await
.unwrap();

// Remove the default dir
fs::remove_dir_all(unpack_dir.join(config::DEFAULT_BASE_DIR))
fs::remove_dir_all(unpack_dir.join(default_namada_folder.clone()))
.await
.unwrap();
}
Expand Down Expand Up @@ -416,6 +417,8 @@ pub fn init_network(
) {
let mut config = genesis_config::open_genesis_config(genesis_path).unwrap();

let default_namada_folder = crate::config::get_default_namada_folder();

// Update the WASM checksums
let checksums =
wasm_loader::Checksums::read_checksums_file(&wasm_checksums_path);
Expand All @@ -440,8 +443,7 @@ pub fn init_network(
// The `temp_chain_id` gets renamed after we have chain ID
let accounts_dir = temp_dir.join(NET_ACCOUNTS_DIR);
// Base dir used in account sub-directories
let accounts_temp_dir =
PathBuf::from(config::DEFAULT_BASE_DIR).join(temp_chain_id.as_str());
let accounts_temp_dir = default_namada_folder.join(temp_chain_id.as_str());

let mut rng: ThreadRng = thread_rng();

Expand Down Expand Up @@ -680,7 +682,7 @@ pub fn init_network(
.join(chain_id.as_str())
.join(NET_ACCOUNTS_DIR)
.join(name)
.join(config::DEFAULT_BASE_DIR);
.join(default_namada_folder.clone());
let temp_validator_chain_dir =
validator_dir.join(temp_chain_id.as_str());
let validator_chain_dir = validator_dir.join(chain_id.as_str());
Expand Down Expand Up @@ -715,7 +717,7 @@ pub fn init_network(
|(ix, (name, validator_config))| {
let accounts_dir = chain_dir.join(NET_ACCOUNTS_DIR);
let validator_dir =
accounts_dir.join(name).join(config::DEFAULT_BASE_DIR);
accounts_dir.join(name).join(default_namada_folder.clone());
let mut config = Config::load(
&validator_dir,
&chain_id,
Expand All @@ -729,7 +731,7 @@ pub fn init_network(
// parameter. We need to remove this prefix, because
// these sub-directories will be moved to validators' root
// directories.
config.ledger.shell.base_dir = config::DEFAULT_BASE_DIR.into();
config.ledger.shell.base_dir = default_namada_folder.clone();
// Add a ledger P2P persistent peers
config.ledger.tendermint.p2p_persistent_peers = persistent_peers
.iter()
Expand Down Expand Up @@ -807,14 +809,14 @@ pub fn init_network(
// Create a release tarball for anoma-network-config
if !dont_archive {
let mut release = tar::Builder::new(Vec::new());
let release_genesis_path = PathBuf::from(config::DEFAULT_BASE_DIR)
.join(format!("{}.toml", chain_id.as_str()));
let release_genesis_path =
default_namada_folder.join(format!("{}.toml", chain_id.as_str()));
release
.append_path_with_name(genesis_path, release_genesis_path)
.unwrap();
let global_config_path = GlobalConfig::file_path(&global_args.base_dir);
let release_global_config_path =
GlobalConfig::file_path(config::DEFAULT_BASE_DIR);
GlobalConfig::file_path(default_namada_folder.clone());
release
.append_path_with_name(
global_config_path,
Expand All @@ -824,15 +826,14 @@ pub fn init_network(
let chain_config_path =
Config::file_path(&global_args.base_dir, &chain_id);
let release_chain_config_path =
Config::file_path(config::DEFAULT_BASE_DIR, &chain_id);
Config::file_path(default_namada_folder.clone(), &chain_id);
release
.append_path_with_name(chain_config_path, release_chain_config_path)
.unwrap();
let release_wasm_checksums_path =
PathBuf::from(config::DEFAULT_BASE_DIR)
.join(chain_id.as_str())
.join(config::DEFAULT_WASM_DIR)
.join(config::DEFAULT_WASM_CHECKSUMS_FILE);
let release_wasm_checksums_path = default_namada_folder
.join(chain_id.as_str())
.join(config::DEFAULT_WASM_DIR)
.join(config::DEFAULT_WASM_CHECKSUMS_FILE);
release
.append_path_with_name(
&wasm_checksums_path,
Expand Down
11 changes: 6 additions & 5 deletions apps/src/lib/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ use crate::cli;
use crate::facade::tendermint::Timeout;
use crate::facade::tendermint_config::net::Address as TendermintAddress;

/// Base directory contains global config and chain directories.
pub const DEFAULT_BASE_DIR: &str = ".namada";
/// Default WASM dir.
pub const DEFAULT_WASM_DIR: &str = "wasm";
/// The WASM checksums file contains the hashes of built WASMs. It is inside the
Expand Down Expand Up @@ -378,10 +376,13 @@ impl Config {
}

pub fn get_default_namada_folder() -> PathBuf {
if let Some(project_dir) = ProjectDirs::from("com", "heliax", "namada") {
project_dir.data_dir().to_path_buf()
if let Some(project_dir) = ProjectDirs::from("", "", "Namada") {
project_dir.data_local_dir().to_path_buf()
} else {
DEFAULT_BASE_DIR.into()
// In extremis, default to the old behavior of simply using the path
// ".namada" as the base directory. This will only occur in
// pathological situations where no user home directory exists.
".namada".into()
}
}

Expand Down
6 changes: 4 additions & 2 deletions tests/src/e2e/setup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,7 @@ impl Test {
}

pub fn get_base_dir(&self, who: &Who) -> PathBuf {
let default_namada_folder = config::get_default_namada_folder();
match who {
Who::NonValidator => self.test_dir.path().to_owned(),
Who::Validator(index) => self
Expand All @@ -409,7 +410,7 @@ impl Test {
.join(self.net.chain_id.as_str())
.join(utils::NET_ACCOUNTS_DIR)
.join(format!("validator-{}", index))
.join(config::DEFAULT_BASE_DIR),
.join(default_namada_folder),
}
}
}
Expand Down Expand Up @@ -860,11 +861,12 @@ pub fn copy_wasm_to_chain_dir<'a>(
}

// Copy the built WASM files from "wasm" directory to each validator dir
let default_namada_folder = config::get_default_namada_folder();
for validator_name in genesis_validator_keys {
let target_wasm_dir = chain_dir
.join(utils::NET_ACCOUNTS_DIR)
.join(validator_name)
.join(config::DEFAULT_BASE_DIR)
.join(default_namada_folder.clone())
.join(chain_id.as_str())
.join(config::DEFAULT_WASM_DIR);
for file in &wasm_files {
Expand Down