From feecfb4948a056f8ba9524b701405e986881e5a8 Mon Sep 17 00:00:00 2001 From: jamesk Date: Thu, 28 Mar 2024 19:05:09 -0400 Subject: [PATCH 1/5] wip clip --- Cargo.toml | 1 + src/main.rs | 34 +++++++++++++++++++++------------- src/options.rs | 27 +++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 src/options.rs diff --git a/Cargo.toml b/Cargo.toml index 9cfae8c..7eda251 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,5 +7,6 @@ edition = "2021" [dependencies] Fasching = "0.1.19" +clap = { version = "4.5.4", features = ["derive"] } #Fasching = {path = "../Fasching/"} whoami = "1.5.1" diff --git a/src/main.rs b/src/main.rs index 41fd2be..27b514a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,35 +1,43 @@ pub mod comparemode; pub mod createmode; pub mod syscompare; +mod options; use crate::syscompare::SysCompareApp; use crate::syscompare::SysCompareMode::{Compare, Create}; use std::env::args; use std::process::exit; +use clap::{FromArgMatches, Parser}; +use crate::options::{Arguments, Commands}; fn main() { + let options = Arguments::parse(); + let args: Vec = args().collect(); // println!("{:#?}", args); // testing - let app = match args.get(1) { + let app = match options.command { None => { print_help(); exit(0); } - Some(mode) => { + Some(Commands::Create { root_dir, output_path }) => { // app mode - let m = mode.as_str(); - let app_mode = match m { - "create" => Create, - "compare" => Compare, - _ => { - println!("Invalid MODE argument"); - print_help(); - exit(0); - } - }; - SysCompareApp::new(app_mode, args) + // let app_mode = match m { + // "create" => Create, + // "compare" => Compare, + // _ => { + // println!("Invalid MODE argument"); + // print_help(); + // exit(0); + // } + // }; + + SysCompareApp::new(Create, args) + }, + Some(Commands::Compare { left, right }) => { + SysCompareApp::new(Compare, args) } }; diff --git a/src/options.rs b/src/options.rs new file mode 100644 index 0000000..42d3a88 --- /dev/null +++ b/src/options.rs @@ -0,0 +1,27 @@ +use clap::{Command, Parser, Subcommand}; +use crate::syscompare::SysCompareMode; + +#[derive(Parser)] +pub struct Arguments { + #[command(subcommand)] + pub command: Option, + pub input_path: Option, + pub output_path: Option, + pub show: Option, +} + +#[derive(Subcommand)] +pub enum Commands { + Create { + #[arg(short, long)] + root_dir: String, + #[arg(short, long)] + output_path: String, + }, + Compare { + #[arg(short, long)] + left: String, + #[arg(short, long)] + right: String, + }, +} From bc3f85cc85a9fdf67bbc6deedf684a77505f2e83 Mon Sep 17 00:00:00 2001 From: jkoonts Date: Fri, 29 Mar 2024 00:18:38 -0400 Subject: [PATCH 2/5] . --- src/comparemode.rs | 21 ++++++----- src/createmode.rs | 25 ++++++++----- src/main.rs | 38 ++++++++------------ src/options.rs | 12 ++++--- src/syscompare.rs | 89 ++++++++++++++++++++-------------------------- 5 files changed, 90 insertions(+), 95 deletions(-) diff --git a/src/comparemode.rs b/src/comparemode.rs index 121de14..3378d78 100644 --- a/src/comparemode.rs +++ b/src/comparemode.rs @@ -1,24 +1,27 @@ use crate::syscompare::Comparer; use Fasching::snapshot::{Snapshot, SnapshotChangeType, SnapshotCompareResult}; use Fasching::{compare_snapshots, import_snapshot}; +use crate::options::Arguments; pub struct CompareMode { left: Snapshot, right: Snapshot, - args: Vec, + selection: Option, + options: Arguments, result_type: SnapshotChangeType, results: SnapshotCompareResult, } impl CompareMode { - pub fn new(args: Vec, left: String, right: String) -> CompareMode { + pub fn new(options: Arguments, left: String, right: String, selection: Option) -> CompareMode { let left = import_snapshot(left); let right = import_snapshot(right); CompareMode { left, right, - args, + selection, + options, result_type: SnapshotChangeType::None, results: SnapshotCompareResult { created: vec![], @@ -31,9 +34,11 @@ impl CompareMode { impl Comparer for CompareMode { fn run(&mut self) { - let selector = match self.args.get(4) { + let selector = match &self.selection { None => "none", - Some(r) => r, + Some(r) => { + r.as_str() + }, }; let results = match compare_snapshots(self.left.clone(), self.right.clone()) { @@ -90,11 +95,11 @@ mod tests { let right_dir = format!("/home/{}/Documents/", user); println!("{right}"); - let mut n1 = CreateMode::new(vec![], left.clone(), left_dir); + let mut n1 = CreateMode::new(vec![], left.clone()); n1.run(); - let mut n2 = CreateMode::new(vec![], right.clone(), right_dir); + let mut n2 = CreateMode::new(vec![], right.clone()); n2.run(); - let cm = CompareMode::new(vec![], left.clone(), right.clone()); + let cm = CompareMode::new(vec![], left.clone(), right.clone(), ); } } diff --git a/src/createmode.rs b/src/createmode.rs index e346b25..4156567 100644 --- a/src/createmode.rs +++ b/src/createmode.rs @@ -1,39 +1,46 @@ use crate::print_help; -use crate::syscompare::Comparer; + use std::process::exit; +use std::sync::{Arc, Mutex}; use Fasching::hasher::HashType; use Fasching::hasher::HashType::BLAKE3; use Fasching::snapshot::Snapshot; use Fasching::{create_snapshot, export_snapshot}; +use crate::options::Arguments; +use crate::syscompare::Comparer; pub struct CreateMode { snapshot_path: String, root_path: String, - #[allow(unused)] - args: Vec, snapshot: Snapshot, } impl CreateMode { - pub fn new(args: Vec, snapshot_path: String, root_path: String) -> CreateMode { + pub fn new(snapshot_path: String, root_path: String) -> CreateMode { if snapshot_path.replace("./", "").is_empty() { println!("Specify output file name"); - print_help(); exit(0); } let bind = root_path.clone(); let rp = bind.as_str(); + CreateMode { - args, snapshot_path, root_path, - snapshot: create_snapshot(rp, HashType::MD5, vec![]), + snapshot: Snapshot { + file_hashes: Arc::new(Mutex::new(Default::default())), + black_list: vec![], + root_path: "".to_string(), + hash_type: BLAKE3, + uuid: "".to_string(), + date_created: 0, + }, } } } -impl Comparer for CreateMode { - fn run(&mut self) { +impl CreateMode { + pub fn run(&mut self) { let snapshot = create_snapshot(self.root_path.as_str(), BLAKE3, vec![]); self.snapshot = snapshot.clone(); if let Ok(e) = snapshot.file_hashes.lock() { diff --git a/src/main.rs b/src/main.rs index 27b514a..0d9a186 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,45 +3,35 @@ pub mod createmode; pub mod syscompare; mod options; -use crate::syscompare::SysCompareApp; -use crate::syscompare::SysCompareMode::{Compare, Create}; + use std::env::args; use std::process::exit; use clap::{FromArgMatches, Parser}; +use crate::comparemode::CompareMode; +use crate::createmode::CreateMode; use crate::options::{Arguments, Commands}; +use crate::syscompare::Comparer; fn main() { let options = Arguments::parse(); - + let movable = options.clone(); let args: Vec = args().collect(); // println!("{:#?}", args); // testing let app = match options.command { - None => { - print_help(); - exit(0); - } + None => {} Some(Commands::Create { root_dir, output_path }) => { - // app mode - - // let app_mode = match m { - // "create" => Create, - // "compare" => Compare, - // _ => { - // println!("Invalid MODE argument"); - // print_help(); - // exit(0); - // } - // }; - - SysCompareApp::new(Create, args) + let mut create = + CreateMode::new(output_path, root_dir); + println!("Creating snapshot.."); + create.run() }, - Some(Commands::Compare { left, right }) => { - SysCompareApp::new(Compare, args) + Some(Commands::Compare { left, right, selection }) => { + println!("Running snapshot comparison.."); + let mut compare = CompareMode::new(movable.clone(), left, right, selection); + compare.run() } }; - - app.run() } pub fn print_help() { diff --git a/src/options.rs b/src/options.rs index 42d3a88..77c9aee 100644 --- a/src/options.rs +++ b/src/options.rs @@ -1,16 +1,18 @@ use clap::{Command, Parser, Subcommand}; -use crate::syscompare::SysCompareMode; -#[derive(Parser)] + +#[derive(Parser, Clone, Debug)] pub struct Arguments { #[command(subcommand)] pub command: Option, + #[arg(short, long)] pub input_path: Option, + #[arg(short, long)] pub output_path: Option, - pub show: Option, + } -#[derive(Subcommand)] +#[derive(Subcommand, Clone, Debug)] pub enum Commands { Create { #[arg(short, long)] @@ -23,5 +25,7 @@ pub enum Commands { left: String, #[arg(short, long)] right: String, + #[arg(short, long)] + selection: Option, }, } diff --git a/src/syscompare.rs b/src/syscompare.rs index 158f310..2fad376 100644 --- a/src/syscompare.rs +++ b/src/syscompare.rs @@ -5,6 +5,7 @@ use std::collections::HashMap; use std::process::exit; use std::sync::{Arc, Mutex}; use Fasching::snapshot::Snapshot; +use crate::options::Arguments; pub enum SysCompareMode { Create, @@ -13,16 +14,16 @@ pub enum SysCompareMode { pub struct SysCompareApp { mode: SysCompareMode, - args: Vec, + options: Arguments, #[allow(unused)] comparatives: Arc>>, } impl SysCompareApp { - pub fn new(mode: SysCompareMode, args: Vec) -> SysCompareApp { + pub fn new(mode: SysCompareMode, options: Arguments) -> SysCompareApp { SysCompareApp { mode, - args, + options, comparatives: Arc::new(Mutex::new(HashMap::new())), } } @@ -30,67 +31,55 @@ impl SysCompareApp { println!("running"); match self.mode { SysCompareMode::Create => { - let snapshot_path = match self.args.get(2) { - None => { - println!("Missing hash dir path as second argument"); - print_help(); - exit(0); - } - Some(r) => not_empty(r), - }; - let root_dir = match self.args.get(3) { - None => { - println!("Missing hash dir path as second argument"); - print_help(); - exit(0); - } - Some(r) => not_empty(r), - }; - let mut create = - CreateMode::new(self.args.clone(), snapshot_path.clone(), root_dir.clone()); - create.run() + // let mut create = + // CreateMode::new(self.options.clone(), snapshot_path.clone(), root_dir.clone()); + // create.run() } SysCompareMode::Compare => { - let left = match self.args.get(2) { - None => { - println!("Missing hash dir path as second argument"); - print_help(); - exit(0); - } - Some(r) => not_empty(r), - }; - let right = match self.args.get(3) { - None => { - println!("Missing output path as third argument"); - print_help(); - exit(0); - } - Some(r) => not_empty(r), - }; + // let left = match self.args.get(2) { + // None => { + // println!("Missing hash dir path as second argument"); + // print_help(); + // exit(0); + // } + // Some(r) => not_empty(r), + // }; + // let right = match self.args.get(3) { + // None => { + // println!("Missing output path as third argument"); + // print_help(); + // exit(0); + // } + // Some(r) => not_empty(r), + // }; - let mut compare = CompareMode::new(self.args.clone(), left, right); - compare.run() + // let mut compare = CompareMode::new(self.args.clone(), left, right); + // compare.run() } } } } -fn not_empty(r: &String) -> String { - if r.replace("./", "").is_empty() { - println!("Specify input file name"); - print_help(); - exit(0); - } else { - r.to_string() - } -} +// fn not_empty(r: &String) -> String { +// if r.replace("./", "").is_empty() { +// println!("Specify input file name"); +// print_help(); +// exit(0); +// } else { +// r.to_string() +// } +// } impl Default for SysCompareApp { fn default() -> Self { SysCompareApp { mode: SysCompareMode::Create, - args: vec![], comparatives: Arc::new(Mutex::new(HashMap::new())), + options: Arguments { + command: None, + input_path: None, + output_path: None, + }, } } } From caf9f5140b48e9ca8f07e1af67f300083c61166d Mon Sep 17 00:00:00 2001 From: jkoonts Date: Fri, 29 Mar 2024 00:21:51 -0400 Subject: [PATCH 3/5] . --- src/comparemode.rs | 5 ++- src/createmode.rs | 5 --- src/main.rs | 11 +----- src/options.rs | 2 +- src/syscompare.rs | 89 ---------------------------------------------- 5 files changed, 4 insertions(+), 108 deletions(-) delete mode 100644 src/syscompare.rs diff --git a/src/comparemode.rs b/src/comparemode.rs index 3378d78..b8243c5 100644 --- a/src/comparemode.rs +++ b/src/comparemode.rs @@ -1,4 +1,3 @@ -use crate::syscompare::Comparer; use Fasching::snapshot::{Snapshot, SnapshotChangeType, SnapshotCompareResult}; use Fasching::{compare_snapshots, import_snapshot}; use crate::options::Arguments; @@ -32,8 +31,8 @@ impl CompareMode { } } -impl Comparer for CompareMode { - fn run(&mut self) { +impl CompareMode { + pub(crate) fn run(&mut self) { let selector = match &self.selection { None => "none", Some(r) => { diff --git a/src/createmode.rs b/src/createmode.rs index 4156567..ad8a27b 100644 --- a/src/createmode.rs +++ b/src/createmode.rs @@ -1,13 +1,8 @@ -use crate::print_help; - use std::process::exit; use std::sync::{Arc, Mutex}; -use Fasching::hasher::HashType; use Fasching::hasher::HashType::BLAKE3; use Fasching::snapshot::Snapshot; use Fasching::{create_snapshot, export_snapshot}; -use crate::options::Arguments; -use crate::syscompare::Comparer; pub struct CreateMode { snapshot_path: String, diff --git a/src/main.rs b/src/main.rs index 0d9a186..56730cf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,5 @@ pub mod comparemode; pub mod createmode; -pub mod syscompare; mod options; @@ -10,15 +9,12 @@ use clap::{FromArgMatches, Parser}; use crate::comparemode::CompareMode; use crate::createmode::CreateMode; use crate::options::{Arguments, Commands}; -use crate::syscompare::Comparer; fn main() { let options = Arguments::parse(); let movable = options.clone(); - let args: Vec = args().collect(); - // println!("{:#?}", args); // testing - let app = match options.command { + let _app = match options.command { None => {} Some(Commands::Create { root_dir, output_path }) => { let mut create = @@ -34,11 +30,6 @@ fn main() { }; } -pub fn print_help() { - println!("### Create Snapshot\n## ./sys-compare create [snapshot] [root_dir]"); - println!("### Compare Snapshots\n## ./sys-compare compare [.snap] [.snap] [created]|[deleted]|[changed]"); -} - // #[cfg(test)] // mod tests { // #[test] diff --git a/src/options.rs b/src/options.rs index 77c9aee..baa0480 100644 --- a/src/options.rs +++ b/src/options.rs @@ -1,4 +1,4 @@ -use clap::{Command, Parser, Subcommand}; +use clap::{Parser, Subcommand}; #[derive(Parser, Clone, Debug)] diff --git a/src/syscompare.rs b/src/syscompare.rs deleted file mode 100644 index 2fad376..0000000 --- a/src/syscompare.rs +++ /dev/null @@ -1,89 +0,0 @@ -use crate::comparemode::CompareMode; -use crate::createmode::CreateMode; -use crate::print_help; -use std::collections::HashMap; -use std::process::exit; -use std::sync::{Arc, Mutex}; -use Fasching::snapshot::Snapshot; -use crate::options::Arguments; - -pub enum SysCompareMode { - Create, - Compare, -} - -pub struct SysCompareApp { - mode: SysCompareMode, - options: Arguments, - #[allow(unused)] - comparatives: Arc>>, -} - -impl SysCompareApp { - pub fn new(mode: SysCompareMode, options: Arguments) -> SysCompareApp { - SysCompareApp { - mode, - options, - comparatives: Arc::new(Mutex::new(HashMap::new())), - } - } - pub fn run(&self) { - println!("running"); - match self.mode { - SysCompareMode::Create => { - // let mut create = - // CreateMode::new(self.options.clone(), snapshot_path.clone(), root_dir.clone()); - // create.run() - } - SysCompareMode::Compare => { - // let left = match self.args.get(2) { - // None => { - // println!("Missing hash dir path as second argument"); - // print_help(); - // exit(0); - // } - // Some(r) => not_empty(r), - // }; - // let right = match self.args.get(3) { - // None => { - // println!("Missing output path as third argument"); - // print_help(); - // exit(0); - // } - // Some(r) => not_empty(r), - // }; - - // let mut compare = CompareMode::new(self.args.clone(), left, right); - // compare.run() - } - } - } -} - -// fn not_empty(r: &String) -> String { -// if r.replace("./", "").is_empty() { -// println!("Specify input file name"); -// print_help(); -// exit(0); -// } else { -// r.to_string() -// } -// } - -impl Default for SysCompareApp { - fn default() -> Self { - SysCompareApp { - mode: SysCompareMode::Create, - comparatives: Arc::new(Mutex::new(HashMap::new())), - options: Arguments { - command: None, - input_path: None, - output_path: None, - }, - } - } -} - -pub trait Comparer { - fn run(&mut self); -} From bfb162aedefb2f318433520189795a30c95bcd0d Mon Sep 17 00:00:00 2001 From: jamesk Date: Fri, 29 Mar 2024 10:37:06 -0400 Subject: [PATCH 4/5] wip clip --- src/main.rs | 5 ++--- src/options.rs | 7 +------ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 56730cf..3d8006c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,14 +15,13 @@ fn main() { let movable = options.clone(); let _app = match options.command { - None => {} - Some(Commands::Create { root_dir, output_path }) => { + Commands::Create { root_dir, output_path } => { let mut create = CreateMode::new(output_path, root_dir); println!("Creating snapshot.."); create.run() }, - Some(Commands::Compare { left, right, selection }) => { + Commands::Compare { left, right, selection } => { println!("Running snapshot comparison.."); let mut compare = CompareMode::new(movable.clone(), left, right, selection); compare.run() diff --git a/src/options.rs b/src/options.rs index baa0480..bdd60cc 100644 --- a/src/options.rs +++ b/src/options.rs @@ -4,12 +4,7 @@ use clap::{Parser, Subcommand}; #[derive(Parser, Clone, Debug)] pub struct Arguments { #[command(subcommand)] - pub command: Option, - #[arg(short, long)] - pub input_path: Option, - #[arg(short, long)] - pub output_path: Option, - + pub command: Commands, } #[derive(Subcommand, Clone, Debug)] From 2d4fc8755009140f60217664b7ed41f038618c4c Mon Sep 17 00:00:00 2001 From: jamesk Date: Fri, 29 Mar 2024 10:46:28 -0400 Subject: [PATCH 5/5] wip clip --- README.md | 32 ++++++++++++++++++++++++++------ src/main.rs | 3 --- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index e512df9..cae9e50 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,37 @@ # sys-compare -#### work in progress + +### Modes +```shell +Usage: sys-compare + +Commands: + create + compare + help Print this message or the help of the given subcommand(s) + +Options: + -h, --help Print help +``` ### Create Snapshot -## ./sys-compare create [snapshot] [root_dir] ```shell -cargo run -- create ./test1.snap /home/foxx/Documents/ -cargo run -- create ./test2.snap /home/foxx/Documents/ +Usage: sys-compare create --root-dir --output-path + +Options: + -r, --root-dir + -o, --output-path + -h, --help Print help ``` ### Compare Snapshots -## ./sys-compare compare [.snap] [.snap] [created]|[deleted]|[changed] ```shell -cargo run -- compare ./test1.snap ./test2.snap created +Usage: sys-compare compare [OPTIONS] --left --right + +Options: + -l, --left + -r, --right + -s, --selection + -h, --help Print help ``` ## Development and Collaboration diff --git a/src/main.rs b/src/main.rs index 3d8006c..a6dbfd7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,9 +2,6 @@ pub mod comparemode; pub mod createmode; mod options; - -use std::env::args; -use std::process::exit; use clap::{FromArgMatches, Parser}; use crate::comparemode::CompareMode; use crate::createmode::CreateMode;