From 0b48fce2d791a2d53eb9cf796fd3c2b6ed5b6f5f Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Tue, 30 Nov 2021 21:17:13 -0500 Subject: [PATCH 1/9] Stop using full network URI as a file path --- src/dfx/src/lib/builders/mod.rs | 6 ++++-- src/dfx/src/lib/canister_info.rs | 5 ++++- src/dfx/src/lib/provider.rs | 7 ++----- src/dfx/src/util/mod.rs | 4 ++++ 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/dfx/src/lib/builders/mod.rs b/src/dfx/src/lib/builders/mod.rs index 9ad42113a6..66f35883d8 100644 --- a/src/dfx/src/lib/builders/mod.rs +++ b/src/dfx/src/lib/builders/mod.rs @@ -5,7 +5,7 @@ use crate::lib::error::DfxResult; use crate::lib::models::canister::CanisterPool; use crate::lib::provider::get_network_context; -use crate::util::check_candid_file; +use crate::util::{self, check_candid_file}; use anyhow::{bail, Context}; use ic_types::principal::Principal as CanisterId; @@ -226,7 +226,9 @@ impl BuildConfig { pub fn from_config(config: &Config) -> DfxResult { let config_intf = config.get_config(); let network_name = get_network_context()?; - let build_root = config.get_temp_path().join(&network_name); + let build_root = config + .get_temp_path() + .join(util::network_to_pathcompat(&network_name)); let build_root = build_root.join("canisters"); Ok(BuildConfig { diff --git a/src/dfx/src/lib/canister_info.rs b/src/dfx/src/lib/canister_info.rs index 47b5257666..ef4e465e22 100644 --- a/src/dfx/src/lib/canister_info.rs +++ b/src/dfx/src/lib/canister_info.rs @@ -5,6 +5,7 @@ use crate::lib::canister_info::custom::CustomCanisterInfo; use crate::lib::canister_info::motoko::MotokoCanisterInfo; use crate::lib::error::DfxResult; use crate::lib::provider::get_network_context; +use crate::util; use anyhow::{anyhow, bail}; use ic_types::principal::Principal as CanisterId; @@ -57,7 +58,9 @@ impl CanisterInfo { let workspace_root = config.get_path().parent().unwrap(); let build_defaults = config.get_config().get_defaults().get_build(); let network_name = get_network_context()?; - let build_root = config.get_temp_path().join(network_name); + let build_root = config + .get_temp_path() + .join(util::network_to_pathcompat(&network_name)); let build_root = build_root.join("canisters"); std::fs::create_dir_all(&build_root)?; diff --git a/src/dfx/src/lib/provider.rs b/src/dfx/src/lib/provider.rs index bb757ba5e3..1d3517340d 100644 --- a/src/dfx/src/lib/provider.rs +++ b/src/dfx/src/lib/provider.rs @@ -2,7 +2,7 @@ use crate::config::dfinity::{Config, ConfigNetwork, NetworkType, DEFAULT_IC_GATE use crate::lib::environment::{AgentEnvironment, Environment}; use crate::lib::error::DfxResult; use crate::lib::network::network_descriptor::NetworkDescriptor; -use crate::util::expiry_duration; +use crate::util::{self, expiry_duration}; use anyhow::{anyhow, Context}; use lazy_static::lazy_static; @@ -78,10 +78,7 @@ pub fn get_network_descriptor<'a>( if let Ok(url) = parse_provider_url(&network_name) { // Replace any non-ascii-alphanumeric characters with `_`, to create an // OS-friendly directory name for it. - let name = network_name - .chars() - .map(|x| if x.is_ascii_alphanumeric() { x } else { '_' }) - .collect(); + let name = util::network_to_pathcompat(&network_name); Ok(NetworkDescriptor { name, diff --git a/src/dfx/src/util/mod.rs b/src/dfx/src/util/mod.rs index 918050844e..b97e99fe5f 100644 --- a/src/dfx/src/util/mod.rs +++ b/src/dfx/src/util/mod.rs @@ -36,6 +36,10 @@ pub fn expiry_duration() -> Duration { Duration::from_secs(60 * 5) } +pub fn network_to_pathcompat(network_name: &str) -> String { + network_name.replace(|c: char| !c.is_ascii_alphanumeric(), "_") +} + /// Deserialize and print return values from canister method. pub fn print_idl_blob( blob: &[u8], From 8964adfd54616b95a067a8533fe1f6e98eb793f4 Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Thu, 2 Dec 2021 14:28:28 -0800 Subject: [PATCH 2/9] Also fix it in package.json --- src/dfx/assets/new_project_node_files/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dfx/assets/new_project_node_files/package.json b/src/dfx/assets/new_project_node_files/package.json index 48d061f10d..03de747057 100644 --- a/src/dfx/assets/new_project_node_files/package.json +++ b/src/dfx/assets/new_project_node_files/package.json @@ -8,7 +8,7 @@ "prebuild": "npm run copy:types", "start": "webpack serve --mode development --env development", "prestart": "npm run copy:types", - "copy:types": "rsync -avr .dfx/$(echo ${DFX_NETWORK:-'**'})/canisters/** --exclude='assets/' --exclude='idl/' --exclude='*.wasm' --delete src/declarations" + "copy:types": "rsync -avr .dfx/$(echo $DFX_NETWORK | sed -e 's/[^0-9a-zA-Z_]/_/g' -e 's/^$/**/')/canisters/** --exclude='assets/' --exclude='idl/' --exclude='*.wasm' --delete src/declarations" }, "devDependencies": { "@dfinity/agent": "{js_agent_version}", From 6dcd7d4eddd4f5b072f6ad21e70ff7fc26a88971 Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Thu, 2 Dec 2021 16:09:26 -0800 Subject: [PATCH 3/9] Add e2e test for network directory fix --- e2e/tests-dfx/provider.bash | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/e2e/tests-dfx/provider.bash b/e2e/tests-dfx/provider.bash index 5f5b345fcb..1cf24d7f35 100644 --- a/e2e/tests-dfx/provider.bash +++ b/e2e/tests-dfx/provider.bash @@ -57,3 +57,12 @@ teardown() { dfx canister --network "http://127.0.0.1:$webserver_port" create --all [ -d ".dfx/http___127_0_0_1_$webserver_port" ] } + +@test "network as URL does not create unexpected names" { + dfx_start + webserver_port=$(cat .dfx/webserver-port) + dfx canister --network "http://127.0.0.1:$webserver_port" create --all + dfx build --network "http://127.0.0.1:$webserver_port" create --all + dfx canister --network "http://127.0.0.1:$webserver_port" install --all + [ $(ls .dfx | grep http | wc -l) = "1" ] +} From 163ad1b3de2c706c9d9dfd53ed5bb43fd63a1a51 Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Thu, 2 Dec 2021 16:39:47 -0800 Subject: [PATCH 4/9] Fix shellcheck --- e2e/tests-dfx/provider.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tests-dfx/provider.bash b/e2e/tests-dfx/provider.bash index 1cf24d7f35..bf6e7dc5a3 100644 --- a/e2e/tests-dfx/provider.bash +++ b/e2e/tests-dfx/provider.bash @@ -64,5 +64,5 @@ teardown() { dfx canister --network "http://127.0.0.1:$webserver_port" create --all dfx build --network "http://127.0.0.1:$webserver_port" create --all dfx canister --network "http://127.0.0.1:$webserver_port" install --all - [ $(ls .dfx | grep http | wc -l) = "1" ] + [ "$(ls -d1 .dfx/http* | wc -l)" = "1" ] } From e5d41c23211e5dc55f1e697854cbfb7a8d5f2822 Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Thu, 2 Dec 2021 16:46:46 -0800 Subject: [PATCH 5/9] Fix it again --- e2e/tests-dfx/provider.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tests-dfx/provider.bash b/e2e/tests-dfx/provider.bash index bf6e7dc5a3..6b2856a245 100644 --- a/e2e/tests-dfx/provider.bash +++ b/e2e/tests-dfx/provider.bash @@ -64,5 +64,5 @@ teardown() { dfx canister --network "http://127.0.0.1:$webserver_port" create --all dfx build --network "http://127.0.0.1:$webserver_port" create --all dfx canister --network "http://127.0.0.1:$webserver_port" install --all - [ "$(ls -d1 .dfx/http* | wc -l)" = "1" ] + [ "$(find .dfx/http* -maxdepth 0 | wc -l)" = "1" ] } From fdd2aa145299f5132914b9338a524cea7f34587f Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Thu, 2 Dec 2021 17:03:37 -0800 Subject: [PATCH 6/9] whoops --- e2e/tests-dfx/provider.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e/tests-dfx/provider.bash b/e2e/tests-dfx/provider.bash index 6b2856a245..af4b64a57b 100644 --- a/e2e/tests-dfx/provider.bash +++ b/e2e/tests-dfx/provider.bash @@ -62,7 +62,7 @@ teardown() { dfx_start webserver_port=$(cat .dfx/webserver-port) dfx canister --network "http://127.0.0.1:$webserver_port" create --all - dfx build --network "http://127.0.0.1:$webserver_port" create --all + dfx build --network "http://127.0.0.1:$webserver_port" dfx canister --network "http://127.0.0.1:$webserver_port" install --all [ "$(find .dfx/http* -maxdepth 0 | wc -l)" = "1" ] } From a046eab50702204af85104d9ed0f31041d833e8d Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Fri, 3 Dec 2021 09:23:38 -0800 Subject: [PATCH 7/9] Account for `wc` being silly --- e2e/tests-dfx/provider.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e/tests-dfx/provider.bash b/e2e/tests-dfx/provider.bash index af4b64a57b..f86d32bd66 100644 --- a/e2e/tests-dfx/provider.bash +++ b/e2e/tests-dfx/provider.bash @@ -62,7 +62,7 @@ teardown() { dfx_start webserver_port=$(cat .dfx/webserver-port) dfx canister --network "http://127.0.0.1:$webserver_port" create --all - dfx build --network "http://127.0.0.1:$webserver_port" + dfx build --network "http://127.0.0.1:$webserver_port" --all dfx canister --network "http://127.0.0.1:$webserver_port" install --all - [ "$(find .dfx/http* -maxdepth 0 | wc -l)" = "1" ] + assert_eq 1 "$(find .dfx/http* -maxdepth 0 | wc -l | tr -d ' ')" } From abdec4045f503a3fb70b601004d9538dca647d5d Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Fri, 3 Dec 2021 10:31:09 -0800 Subject: [PATCH 8/9] Change where the network name is sanitized --- src/dfx/assets/new_project_node_files/package.json | 2 +- src/dfx/src/lib/builders/mod.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dfx/assets/new_project_node_files/package.json b/src/dfx/assets/new_project_node_files/package.json index 03de747057..48d061f10d 100644 --- a/src/dfx/assets/new_project_node_files/package.json +++ b/src/dfx/assets/new_project_node_files/package.json @@ -8,7 +8,7 @@ "prebuild": "npm run copy:types", "start": "webpack serve --mode development --env development", "prestart": "npm run copy:types", - "copy:types": "rsync -avr .dfx/$(echo $DFX_NETWORK | sed -e 's/[^0-9a-zA-Z_]/_/g' -e 's/^$/**/')/canisters/** --exclude='assets/' --exclude='idl/' --exclude='*.wasm' --delete src/declarations" + "copy:types": "rsync -avr .dfx/$(echo ${DFX_NETWORK:-'**'})/canisters/** --exclude='assets/' --exclude='idl/' --exclude='*.wasm' --delete src/declarations" }, "devDependencies": { "@dfinity/agent": "{js_agent_version}", diff --git a/src/dfx/src/lib/builders/mod.rs b/src/dfx/src/lib/builders/mod.rs index a43f8eeb4f..06af759754 100644 --- a/src/dfx/src/lib/builders/mod.rs +++ b/src/dfx/src/lib/builders/mod.rs @@ -225,10 +225,10 @@ pub struct BuildConfig { impl BuildConfig { pub fn from_config(config: &Config) -> DfxResult { let config_intf = config.get_config(); - let network_name = get_network_context()?; + let network_name = util::network_to_pathcompat(&get_network_context()?); let build_root = config .get_temp_path() - .join(util::network_to_pathcompat(&network_name)); + .join(&network_name); let build_root = build_root.join("canisters"); Ok(BuildConfig { From 787c5ddf8fd16f0e01a76699fd5117a773162d18 Mon Sep 17 00:00:00 2001 From: Adam Spofford Date: Fri, 3 Dec 2021 10:37:35 -0800 Subject: [PATCH 9/9] cargo fmt --- src/dfx/src/lib/builders/mod.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/dfx/src/lib/builders/mod.rs b/src/dfx/src/lib/builders/mod.rs index 06af759754..2f381f6a46 100644 --- a/src/dfx/src/lib/builders/mod.rs +++ b/src/dfx/src/lib/builders/mod.rs @@ -226,9 +226,7 @@ impl BuildConfig { pub fn from_config(config: &Config) -> DfxResult { let config_intf = config.get_config(); let network_name = util::network_to_pathcompat(&get_network_context()?); - let build_root = config - .get_temp_path() - .join(&network_name); + let build_root = config.get_temp_path().join(&network_name); let build_root = build_root.join("canisters"); Ok(BuildConfig {