From 2ef648bdae4baa0cbd0aa7eeb5c9d049964ff502 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 09:49:15 +0100 Subject: [PATCH 01/12] Account for spaced and non-spaced behavior of `stringify!` --- crates/cargo-contract/src/cmd/config.rs | 40 ++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index 670bfa382..4b736f3ea 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -233,18 +233,50 @@ macro_rules! call_with_config_internal { } /// Macro that allows calling the command member function with chain configuration +/// +/// # Developer Note +/// +/// In older Rust versions, the macro `stringify!($crate::foo)` expanded to +/// `"$crate::foo"`. This behavior changed with https://github.com/rust-lang/rust/issues/128992, +/// `stringify!` expands to `"$crate :: foo"` now. In order to support both older and newer +/// Rust versions our macro has to handle both cases, spaced and non-spaced. +/// +/// Known limitation: the `$config_name:expr` has to be in the `$crate::cmd::config` crate +/// and cannot contain another `::` sub-path. #[macro_export] macro_rules! call_with_config { ($obj:tt, $function:ident, $config_name:expr) => {{ - let config_name = format!("crate::cmd::config::{}", $config_name); - $crate::call_with_config_internal!( + assert!(!format!("{}", $config_name).contains("::"), "The supplied config name is not allowed to contain `::`."); + + let config_name_nonspaced = format!("$crate::cmd::config::{}", $config_name); + let config_name_spaced = format!("$crate :: cmd :: config :: {}", $config_name); + + let res_nonspaced = $crate::call_with_config_internal!( $obj, $function, - config_name.as_str(), + config_name_nonspaced.as_str(), + // All available chain configs need to be specified here $crate::cmd::config::Polkadot, $crate::cmd::config::Substrate, $crate::cmd::config::Ecdsachain - ) + ); + + let res_spaced = $crate::call_with_config_internal!( + $obj, + $function, + config_name_spaced.as_str(), + + // All available chain configs need to be specified here + $crate::cmd::config::Polkadot, + $crate::cmd::config::Substrate, + $crate::cmd::config::Ecdsachain + ); + + if !res_spaced.is_err() { + res_nonspaced + } else { + res_spaced + } }}; } From 3f1b5cfbf653322afc9148944d1c327d83628ea5 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 09:48:17 +0100 Subject: [PATCH 02/12] For user output: remove spaces from object path --- crates/cargo-contract/src/cmd/config.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index 4b736f3ea..7088922fb 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -218,9 +218,9 @@ macro_rules! call_with_config_internal { stringify!($config) => $obj.$function::<$config>().await, )* _ => { - - let configs = vec![$(stringify!($config)),*].iter() - .map(|s| s.trim_start_matches("crate::cmd::config::")) + let configs = vec![$(stringify!($config)),*].iter() + .map(|s| s.trim_start_matches("$crate::cmd::config::")) + .map(|s| s.replace(" ", "")) .collect::>() .join(", "); Err(ErrorVariant::Generic( From 87b0a44b11223b83e252fc6da35ab11f392f7f6f Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 09:48:46 +0100 Subject: [PATCH 03/12] Output the chain configuration that was searched --- crates/cargo-contract/src/cmd/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index 7088922fb..db175a2d4 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -225,7 +225,7 @@ macro_rules! call_with_config_internal { .join(", "); Err(ErrorVariant::Generic( contract_extrinsics::GenericError::from_message( - format!("Chain configuration not found, Allowed configurations: {configs}") + format!("Chain configuration {} not found, allowed configurations: {configs}", $config_name) ))) }, } From 247804f37e58e6a77d260961b3b33c018cd3de2a Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 11:34:04 +0100 Subject: [PATCH 04/12] Apply `cargo fmt` --- crates/cargo-contract/src/cmd/config.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index db175a2d4..0e4778721 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -238,15 +238,18 @@ macro_rules! call_with_config_internal { /// /// In older Rust versions, the macro `stringify!($crate::foo)` expanded to /// `"$crate::foo"`. This behavior changed with https://github.com/rust-lang/rust/issues/128992, -/// `stringify!` expands to `"$crate :: foo"` now. In order to support both older and newer -/// Rust versions our macro has to handle both cases, spaced and non-spaced. +/// `stringify!` expands to `"$crate :: foo"` now. In order to support both older and +/// newer Rust versions our macro has to handle both cases, spaced and non-spaced. /// /// Known limitation: the `$config_name:expr` has to be in the `$crate::cmd::config` crate /// and cannot contain another `::` sub-path. #[macro_export] macro_rules! call_with_config { ($obj:tt, $function:ident, $config_name:expr) => {{ - assert!(!format!("{}", $config_name).contains("::"), "The supplied config name is not allowed to contain `::`."); + assert!( + !format!("{}", $config_name).contains("::"), + "The supplied config name is not allowed to contain `::`." + ); let config_name_nonspaced = format!("$crate::cmd::config::{}", $config_name); let config_name_spaced = format!("$crate :: cmd :: config :: {}", $config_name); @@ -255,7 +258,6 @@ macro_rules! call_with_config { $obj, $function, config_name_nonspaced.as_str(), - // All available chain configs need to be specified here $crate::cmd::config::Polkadot, $crate::cmd::config::Substrate, @@ -266,7 +268,6 @@ macro_rules! call_with_config { $obj, $function, config_name_spaced.as_str(), - // All available chain configs need to be specified here $crate::cmd::config::Polkadot, $crate::cmd::config::Substrate, From 1e89566157b642ebbefcbdf901eb8a9803d57003 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 11:35:23 +0100 Subject: [PATCH 05/12] Add changelog entry --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54162e19d..887075db5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +[Unreleased] + +### Fixed +- Fix "chain configuration not found" error - [#1786](https://github.com/paritytech/cargo-contract/pull/1786) + ## [5.0.0-alpha] ### Changed From 663931bcc52a0e678462e439a49a96337f2bd9d6 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 13:35:20 +0100 Subject: [PATCH 06/12] Switch spaces clean-up --- crates/cargo-contract/src/cmd/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index 0e4778721..0ec473fec 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -219,8 +219,8 @@ macro_rules! call_with_config_internal { )* _ => { let configs = vec![$(stringify!($config)),*].iter() - .map(|s| s.trim_start_matches("$crate::cmd::config::")) .map(|s| s.replace(" ", "")) + .map(|s| s.trim_start_matches("$crate::cmd::config::")) .collect::>() .join(", "); Err(ErrorVariant::Generic( From 8b5ec41de5f42f38ae323f4f3b3fe35a1a81797f Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 13:43:19 +0100 Subject: [PATCH 07/12] Fix string handling --- crates/cargo-contract/src/cmd/config.rs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index 0ec473fec..e2cf7d9a4 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -220,7 +220,7 @@ macro_rules! call_with_config_internal { _ => { let configs = vec![$(stringify!($config)),*].iter() .map(|s| s.replace(" ", "")) - .map(|s| s.trim_start_matches("$crate::cmd::config::")) + .map(|s| s.trim_start_matches("$crate::cmd::config::").to_string()) .collect::>() .join(", "); Err(ErrorVariant::Generic( @@ -263,8 +263,8 @@ macro_rules! call_with_config { $crate::cmd::config::Substrate, $crate::cmd::config::Ecdsachain ); - - let res_spaced = $crate::call_with_config_internal!( + if !res_nonspaced.is_err() {return res_nonspaced} + $crate::call_with_config_internal!( $obj, $function, config_name_spaced.as_str(), @@ -272,12 +272,6 @@ macro_rules! call_with_config { $crate::cmd::config::Polkadot, $crate::cmd::config::Substrate, $crate::cmd::config::Ecdsachain - ); - - if !res_spaced.is_err() { - res_nonspaced - } else { - res_spaced - } + ) }}; } From 571970d05b3bd54266a3635e7aeadbe6bbf5802f Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 13:43:51 +0100 Subject: [PATCH 08/12] Apply `cargo fmt` --- crates/cargo-contract/src/cmd/config.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index e2cf7d9a4..afdf3787a 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -263,7 +263,9 @@ macro_rules! call_with_config { $crate::cmd::config::Substrate, $crate::cmd::config::Ecdsachain ); - if !res_nonspaced.is_err() {return res_nonspaced} + if !res_nonspaced.is_err() { + return res_nonspaced + } $crate::call_with_config_internal!( $obj, $function, From 72b792f0883b0a58bcf1496bfdeca41225ff7d1a Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 14:03:03 +0100 Subject: [PATCH 09/12] Improve comment --- crates/cargo-contract/src/cmd/config.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index afdf3787a..d2165b50c 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -236,13 +236,15 @@ macro_rules! call_with_config_internal { /// /// # Developer Note /// -/// In older Rust versions, the macro `stringify!($crate::foo)` expanded to -/// `"$crate::foo"`. This behavior changed with https://github.com/rust-lang/rust/issues/128992, +/// In older Rust versions the macro `stringify!($crate::foo)` expanded to +/// `"$crate::foo"`. This behavior changed with https://github.com/rust-lang/rust/pull/125174, /// `stringify!` expands to `"$crate :: foo"` now. In order to support both older and /// newer Rust versions our macro has to handle both cases, spaced and non-spaced. /// -/// Known limitation: the `$config_name:expr` has to be in the `$crate::cmd::config` crate -/// and cannot contain another `::` sub-path. +/// # Known Limitation +/// +/// The `$config_name:expr` has to be in the `$crate::cmd::config` crate and cannot +/// contain another `::` sub-path. #[macro_export] macro_rules! call_with_config { ($obj:tt, $function:ident, $config_name:expr) => {{ From 1d2f187bd183fa7ff7e495174de4ed3ffd1ce78a Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 14:04:56 +0100 Subject: [PATCH 10/12] Improve formatting --- crates/cargo-contract/src/cmd/config.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index d2165b50c..7174c0927 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -268,6 +268,7 @@ macro_rules! call_with_config { if !res_nonspaced.is_err() { return res_nonspaced } + $crate::call_with_config_internal!( $obj, $function, From f232359d905437dd119cb49824064c71041d3752 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 14:24:46 +0100 Subject: [PATCH 11/12] Improve assert error message --- crates/cargo-contract/src/cmd/config.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index 7174c0927..2d15abcc2 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -250,7 +250,8 @@ macro_rules! call_with_config { ($obj:tt, $function:ident, $config_name:expr) => {{ assert!( !format!("{}", $config_name).contains("::"), - "The supplied config name is not allowed to contain `::`." + "The supplied config name `{}` is not allowed to contain `::`.", + $config_name ); let config_name_nonspaced = format!("$crate::cmd::config::{}", $config_name); From 3aadc0e675bd3bdf5aa043c03b9dc871fda89b68 Mon Sep 17 00:00:00 2001 From: Michael Mueller Date: Mon, 4 Nov 2024 14:38:30 +0100 Subject: [PATCH 12/12] Shorten code --- crates/cargo-contract/src/cmd/config.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/crates/cargo-contract/src/cmd/config.rs b/crates/cargo-contract/src/cmd/config.rs index 2d15abcc2..bf262b5b2 100644 --- a/crates/cargo-contract/src/cmd/config.rs +++ b/crates/cargo-contract/src/cmd/config.rs @@ -254,13 +254,10 @@ macro_rules! call_with_config { $config_name ); - let config_name_nonspaced = format!("$crate::cmd::config::{}", $config_name); - let config_name_spaced = format!("$crate :: cmd :: config :: {}", $config_name); - let res_nonspaced = $crate::call_with_config_internal!( $obj, $function, - config_name_nonspaced.as_str(), + format!("$crate::cmd::config::{}", $config_name).as_str(), // All available chain configs need to be specified here $crate::cmd::config::Polkadot, $crate::cmd::config::Substrate, @@ -273,7 +270,7 @@ macro_rules! call_with_config { $crate::call_with_config_internal!( $obj, $function, - config_name_spaced.as_str(), + format!("$crate :: cmd :: config :: {}", $config_name).as_str(), // All available chain configs need to be specified here $crate::cmd::config::Polkadot, $crate::cmd::config::Substrate,