Make export blocks default to json on stdout (#5090)

* Make export blocks default to json on stdout

* Multiline instead of single line to stay under 100 cols

* Change --json flag to --binary, defaulting to json
This commit is contained in:
pscott
2020-03-02 10:59:39 +01:00
committed by GitHub
parent 9a925faf7d
commit d7e4aa41b9
3 changed files with 12 additions and 12 deletions
@@ -50,9 +50,9 @@ pub struct ExportBlocksCmd {
#[structopt(long = "to", value_name = "BLOCK")] #[structopt(long = "to", value_name = "BLOCK")]
pub to: Option<BlockNumber>, pub to: Option<BlockNumber>,
/// Use JSON output rather than binary. /// Use binary output rather than JSON.
#[structopt(long = "json")] #[structopt(long = "binary", value_name = "BOOL", parse(try_from_str), default_value("false"))]
pub json: bool, pub binary: bool,
#[allow(missing_docs)] #[allow(missing_docs)]
#[structopt(flatten)] #[structopt(flatten)]
@@ -85,7 +85,7 @@ impl ExportBlocksCmd {
let from = self.from.as_ref().and_then(|f| f.parse().ok()).unwrap_or(1); let from = self.from.as_ref().and_then(|f| f.parse().ok()).unwrap_or(1);
let to = self.to.as_ref().and_then(|t| t.parse().ok()); let to = self.to.as_ref().and_then(|t| t.parse().ok());
let json = self.json; let binary = self.binary;
let file: Box<dyn io::Write> = match &self.output { let file: Box<dyn io::Write> = match &self.output {
Some(filename) => Box::new(fs::File::create(filename)?), Some(filename) => Box::new(fs::File::create(filename)?),
@@ -93,7 +93,7 @@ impl ExportBlocksCmd {
}; };
run_until_exit(config, |config| { run_until_exit(config, |config| {
Ok(builder(config)?.export_blocks(file, from.into(), to, json)) Ok(builder(config)?.export_blocks(file, from.into(), to, binary))
}) })
} }
+1 -1
View File
@@ -742,7 +742,7 @@ pub trait ServiceBuilderCommand {
output: impl Write + 'static, output: impl Write + 'static,
from: NumberFor<Self::Block>, from: NumberFor<Self::Block>,
to: Option<NumberFor<Self::Block>>, to: Option<NumberFor<Self::Block>>,
json: bool binary: bool
) -> Pin<Box<dyn Future<Output = Result<(), Error>>>>; ) -> Pin<Box<dyn Future<Output = Result<(), Error>>>>;
/// Performs a revert of `blocks` blocks. /// Performs a revert of `blocks` blocks.
+6 -6
View File
@@ -203,7 +203,7 @@ impl<
mut output: impl Write + 'static, mut output: impl Write + 'static,
from: NumberFor<TBl>, from: NumberFor<TBl>,
to: Option<NumberFor<TBl>>, to: Option<NumberFor<TBl>>,
json: bool binary: bool
) -> Pin<Box<dyn Future<Output = Result<(), Error>>>> { ) -> Pin<Box<dyn Future<Output = Result<(), Error>>>> {
let client = self.client; let client = self.client;
let mut block = from; let mut block = from;
@@ -230,7 +230,7 @@ impl<
if !wrote_header { if !wrote_header {
info!("Exporting blocks from #{} to #{}", block, last); info!("Exporting blocks from #{} to #{}", block, last);
if !json { if binary {
let last_: u64 = last.saturated_into::<u64>(); let last_: u64 = last.saturated_into::<u64>();
let block_: u64 = block.saturated_into::<u64>(); let block_: u64 = block.saturated_into::<u64>();
let len: u64 = last_ - block_ + 1; let len: u64 = last_ - block_ + 1;
@@ -241,13 +241,13 @@ impl<
match client.block(&BlockId::number(block))? { match client.block(&BlockId::number(block))? {
Some(block) => { Some(block) => {
if json { if binary {
output.write_all(&block.encode())?;
} else {
serde_json::to_writer(&mut output, &block) serde_json::to_writer(&mut output, &block)
.map_err(|e| format!("Error writing JSON: {}", e))?; .map_err(|e| format!("Error writing JSON: {}", e))?;
} else {
output.write_all(&block.encode())?;
} }
}, },
// Reached end of the chain. // Reached end of the chain.
None => return std::task::Poll::Ready(Ok(())), None => return std::task::Poll::Ready(Ok(())),
} }