From 07da5704d50b1be01c09f7c3782ace0f399157f8 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Fri, 26 Jun 2020 08:57:26 +0100 Subject: [PATCH] [thin_shrink] add --no-copy --- src/bin/thin_shrink.rs | 11 ++++++++++- src/shrink/toplevel.rs | 10 +++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/bin/thin_shrink.rs b/src/bin/thin_shrink.rs index 26b70a4..54d053f 100644 --- a/src/bin/thin_shrink.rs +++ b/src/bin/thin_shrink.rs @@ -33,6 +33,14 @@ fn main() { .value_name("DATA") .takes_value(true), ) + .arg( + Arg::with_name("NOCOPY") + .help("Skip the copying of data, useful for benchmarking") + .required(false) + .long("no-copy") + .value_name("NOCOPY") + .takes_value(false), + ) .arg( Arg::with_name("SIZE") .help("Specify new size for the pool (in data blocks)") @@ -49,13 +57,14 @@ fn main() { let output_file = matches.value_of("OUTPUT").unwrap(); let size = matches.value_of("SIZE").unwrap().parse::().unwrap(); let data_file = matches.value_of("DATA").unwrap(); + let do_copy = !matches.is_present("NOCOPY"); if !file_utils::file_exists(input_file) { eprintln!("Couldn't find input file '{}'.", &input_file); exit(1); } - if let Err(reason) = thinp::shrink::toplevel::shrink(&input_file, &output_file, &data_file, size) { + if let Err(reason) = thinp::shrink::toplevel::shrink(&input_file, &output_file, &data_file, size, do_copy) { println!("Application error: {}\n", reason); exit(1); } diff --git a/src/shrink/toplevel.rs b/src/shrink/toplevel.rs index aaae3ea..0612abf 100644 --- a/src/shrink/toplevel.rs +++ b/src/shrink/toplevel.rs @@ -433,7 +433,7 @@ fn process_xml(input_path: &str, pass: &mut MV) -> Res Ok(()) } -pub fn shrink(input_path: &str, output_path: &str, data_path: &str, nr_blocks: u64) -> Result<()> { +pub fn shrink(input_path: &str, output_path: &str, data_path: &str, nr_blocks: u64, do_copy: bool) -> Result<()> { let mut pass1 = Pass1::new(nr_blocks); eprint!("Reading xml..."); process_xml(input_path, &mut pass1)?; @@ -454,8 +454,12 @@ pub fn shrink(input_path: &str, output_path: &str, data_path: &str, nr_blocks: u let remaps = build_remaps(above, free); - let regions = build_copy_regions(&remaps, pass1.block_size.unwrap() as u64); - copier::copy(data_path, ®ions)?; + if do_copy { + let regions = build_copy_regions(&remaps, pass1.block_size.unwrap() as u64); + copier::copy(data_path, ®ions)?; + } else { + eprintln!("skipping copy"); + } let output = OpenOptions::new() .read(false)