diff --git a/substrate/client/cli/src/commands/export_blocks_cmd.rs b/substrate/client/cli/src/commands/export_blocks_cmd.rs
index 297d83506b..4f7cf0f48c 100644
--- a/substrate/client/cli/src/commands/export_blocks_cmd.rs
+++ b/substrate/client/cli/src/commands/export_blocks_cmd.rs
@@ -15,7 +15,7 @@
// along with Substrate. If not, see .
use crate::error;
-use crate::params::{BlockNumber, PruningParams, SharedParams};
+use crate::params::{BlockNumber, DatabaseParams, PruningParams, SharedParams};
use crate::CliConfiguration;
use log::info;
use sc_service::{
@@ -48,7 +48,7 @@ pub struct ExportBlocksCmd {
pub to: Option,
/// Use binary output rather than JSON.
- #[structopt(long = "binary", value_name = "BOOL", parse(try_from_str), default_value("false"))]
+ #[structopt(long)]
pub binary: bool,
#[allow(missing_docs)]
@@ -58,6 +58,10 @@ pub struct ExportBlocksCmd {
#[allow(missing_docs)]
#[structopt(flatten)]
pub pruning_params: PruningParams,
+
+ #[allow(missing_docs)]
+ #[structopt(flatten)]
+ pub database_params: DatabaseParams,
}
impl ExportBlocksCmd {
@@ -103,4 +107,8 @@ impl CliConfiguration for ExportBlocksCmd {
fn pruning_params(&self) -> Option<&PruningParams> {
Some(&self.pruning_params)
}
+
+ fn database_params(&self) -> Option<&DatabaseParams> {
+ Some(&self.database_params)
+ }
}
diff --git a/substrate/client/cli/src/commands/mod.rs b/substrate/client/cli/src/commands/mod.rs
index 3e8c2166b2..58ed2b7499 100644
--- a/substrate/client/cli/src/commands/mod.rs
+++ b/substrate/client/cli/src/commands/mod.rs
@@ -150,6 +150,12 @@ macro_rules! substrate_cli_subcommands {
}
}
+ fn database_params(&self) -> Option<&$crate::DatabaseParams> {
+ match self {
+ $($enum::$variant(cmd) => cmd.database_params()),*
+ }
+ }
+
fn base_path(&self) -> $crate::Result<::std::option::Option<::std::path::PathBuf>> {
match self {
$($enum::$variant(cmd) => cmd.base_path()),*
diff --git a/substrate/client/cli/src/commands/purge_chain_cmd.rs b/substrate/client/cli/src/commands/purge_chain_cmd.rs
index 3be2883bd5..b3fb0de247 100644
--- a/substrate/client/cli/src/commands/purge_chain_cmd.rs
+++ b/substrate/client/cli/src/commands/purge_chain_cmd.rs
@@ -15,9 +15,9 @@
// along with Substrate. If not, see .
use crate::error;
-use crate::params::SharedParams;
+use crate::params::{DatabaseParams, SharedParams};
use crate::CliConfiguration;
-use sc_service::{config::DatabaseConfig, Configuration};
+use sc_service::Configuration;
use std::fmt::Debug;
use std::fs;
use std::io::{self, Write};
@@ -33,18 +33,19 @@ pub struct PurgeChainCmd {
#[allow(missing_docs)]
#[structopt(flatten)]
pub shared_params: SharedParams,
+
+ #[allow(missing_docs)]
+ #[structopt(flatten)]
+ pub database_params: DatabaseParams,
}
impl PurgeChainCmd {
/// Run the purge command
pub fn run(&self, config: Configuration) -> error::Result<()> {
- let db_path = match &config.database {
- DatabaseConfig::RocksDb { path, .. } => path,
- _ => {
- eprintln!("Cannot purge custom database implementation");
- return Ok(());
- }
- };
+ let db_path = config.database.path()
+ .ok_or_else(||
+ error::Error::Input("Cannot purge custom database implementation".into())
+ )?;
if !self.yes {
print!("Are you sure to remove {:?}? [y/N]: ", &db_path);
@@ -81,4 +82,8 @@ impl CliConfiguration for PurgeChainCmd {
fn shared_params(&self) -> &SharedParams {
&self.shared_params
}
+
+ fn database_params(&self) -> Option<&DatabaseParams> {
+ Some(&self.database_params)
+ }
}
diff --git a/substrate/client/cli/src/config.rs b/substrate/client/cli/src/config.rs
index 84c2338dcb..5c4a84247b 100644
--- a/substrate/client/cli/src/config.rs
+++ b/substrate/client/cli/src/config.rs
@@ -16,20 +16,20 @@
//! Configuration trait for a CLI based on substrate
+use crate::arg_enums::Database;
use crate::error::Result;
use crate::{
- init_logger, ImportParams, KeystoreParams, NetworkParams, NodeKeyParams,
+ init_logger, DatabaseParams, ImportParams, KeystoreParams, NetworkParams, NodeKeyParams,
OffchainWorkerParams, PruningParams, SharedParams, SubstrateCli,
};
-use crate::arg_enums::Database;
use app_dirs::{AppDataType, AppInfo};
use names::{Generator, Name};
-use sc_service::config::{
- WasmExecutionMethod, Role, OffchainWorkerConfig,
- Configuration, DatabaseConfig, ExtTransport, KeystoreConfig, NetworkConfiguration,
- NodeKeyConfig, PrometheusConfig, PruningMode, TelemetryEndpoints, TransactionPoolOptions, TaskType
-};
use sc_client_api::execution_extensions::ExecutionStrategies;
+use sc_service::config::{
+ Configuration, DatabaseConfig, ExtTransport, KeystoreConfig, NetworkConfiguration,
+ NodeKeyConfig, OffchainWorkerConfig, PrometheusConfig, PruningMode, Role, TaskType,
+ TelemetryEndpoints, TransactionPoolOptions, WasmExecutionMethod,
+};
use sc_service::{ChainSpec, TracingReceiver};
use std::future::Future;
use std::net::SocketAddr;
@@ -75,8 +75,12 @@ pub trait CliConfiguration: Sized {
/// Get the NodeKeyParams for this object
fn node_key_params(&self) -> Option<&NodeKeyParams> {
- self.network_params()
- .map(|x| &x.node_key_params)
+ self.network_params().map(|x| &x.node_key_params)
+ }
+
+ /// Get the DatabaseParams for this object
+ fn database_params(&self) -> Option<&DatabaseParams> {
+ self.import_params().map(|x| &x.database_params)
}
/// Get the base path of the configuration (if any)
@@ -152,33 +156,39 @@ pub trait CliConfiguration: Sized {
/// Get the database cache size.
///
- /// By default this is retrieved from `ImportParams` if it is available. Otherwise its `None`.
+ /// By default this is retrieved from `DatabaseParams` if it is available. Otherwise its `None`.
fn database_cache_size(&self) -> Result