.
This commit is contained in:
parent
feecfb4948
commit
bc3f85cc85
@ -1,24 +1,27 @@
|
|||||||
use crate::syscompare::Comparer;
|
use crate::syscompare::Comparer;
|
||||||
use Fasching::snapshot::{Snapshot, SnapshotChangeType, SnapshotCompareResult};
|
use Fasching::snapshot::{Snapshot, SnapshotChangeType, SnapshotCompareResult};
|
||||||
use Fasching::{compare_snapshots, import_snapshot};
|
use Fasching::{compare_snapshots, import_snapshot};
|
||||||
|
use crate::options::Arguments;
|
||||||
|
|
||||||
pub struct CompareMode {
|
pub struct CompareMode {
|
||||||
left: Snapshot,
|
left: Snapshot,
|
||||||
right: Snapshot,
|
right: Snapshot,
|
||||||
args: Vec<String>,
|
selection: Option<String>,
|
||||||
|
options: Arguments,
|
||||||
result_type: SnapshotChangeType,
|
result_type: SnapshotChangeType,
|
||||||
results: SnapshotCompareResult,
|
results: SnapshotCompareResult,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CompareMode {
|
impl CompareMode {
|
||||||
pub fn new(args: Vec<String>, left: String, right: String) -> CompareMode {
|
pub fn new(options: Arguments, left: String, right: String, selection: Option<String>) -> CompareMode {
|
||||||
let left = import_snapshot(left);
|
let left = import_snapshot(left);
|
||||||
let right = import_snapshot(right);
|
let right = import_snapshot(right);
|
||||||
|
|
||||||
CompareMode {
|
CompareMode {
|
||||||
left,
|
left,
|
||||||
right,
|
right,
|
||||||
args,
|
selection,
|
||||||
|
options,
|
||||||
result_type: SnapshotChangeType::None,
|
result_type: SnapshotChangeType::None,
|
||||||
results: SnapshotCompareResult {
|
results: SnapshotCompareResult {
|
||||||
created: vec![],
|
created: vec![],
|
||||||
@ -31,9 +34,11 @@ impl CompareMode {
|
|||||||
|
|
||||||
impl Comparer for CompareMode {
|
impl Comparer for CompareMode {
|
||||||
fn run(&mut self) {
|
fn run(&mut self) {
|
||||||
let selector = match self.args.get(4) {
|
let selector = match &self.selection {
|
||||||
None => "none",
|
None => "none",
|
||||||
Some(r) => r,
|
Some(r) => {
|
||||||
|
r.as_str()
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
let results = match compare_snapshots(self.left.clone(), self.right.clone()) {
|
let results = match compare_snapshots(self.left.clone(), self.right.clone()) {
|
||||||
@ -90,11 +95,11 @@ mod tests {
|
|||||||
let right_dir = format!("/home/{}/Documents/", user);
|
let right_dir = format!("/home/{}/Documents/", user);
|
||||||
println!("{right}");
|
println!("{right}");
|
||||||
|
|
||||||
let mut n1 = CreateMode::new(vec![], left.clone(), left_dir);
|
let mut n1 = CreateMode::new(vec![], left.clone());
|
||||||
n1.run();
|
n1.run();
|
||||||
let mut n2 = CreateMode::new(vec![], right.clone(), right_dir);
|
let mut n2 = CreateMode::new(vec![], right.clone());
|
||||||
n2.run();
|
n2.run();
|
||||||
|
|
||||||
let cm = CompareMode::new(vec![], left.clone(), right.clone());
|
let cm = CompareMode::new(vec![], left.clone(), right.clone(), );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,39 +1,46 @@
|
|||||||
use crate::print_help;
|
use crate::print_help;
|
||||||
use crate::syscompare::Comparer;
|
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
|
use std::sync::{Arc, Mutex};
|
||||||
use Fasching::hasher::HashType;
|
use Fasching::hasher::HashType;
|
||||||
use Fasching::hasher::HashType::BLAKE3;
|
use Fasching::hasher::HashType::BLAKE3;
|
||||||
use Fasching::snapshot::Snapshot;
|
use Fasching::snapshot::Snapshot;
|
||||||
use Fasching::{create_snapshot, export_snapshot};
|
use Fasching::{create_snapshot, export_snapshot};
|
||||||
|
use crate::options::Arguments;
|
||||||
|
use crate::syscompare::Comparer;
|
||||||
|
|
||||||
pub struct CreateMode {
|
pub struct CreateMode {
|
||||||
snapshot_path: String,
|
snapshot_path: String,
|
||||||
root_path: String,
|
root_path: String,
|
||||||
#[allow(unused)]
|
|
||||||
args: Vec<String>,
|
|
||||||
snapshot: Snapshot,
|
snapshot: Snapshot,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CreateMode {
|
impl CreateMode {
|
||||||
pub fn new(args: Vec<String>, snapshot_path: String, root_path: String) -> CreateMode {
|
pub fn new(snapshot_path: String, root_path: String) -> CreateMode {
|
||||||
if snapshot_path.replace("./", "").is_empty() {
|
if snapshot_path.replace("./", "").is_empty() {
|
||||||
println!("Specify output file name");
|
println!("Specify output file name");
|
||||||
print_help();
|
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
let bind = root_path.clone();
|
let bind = root_path.clone();
|
||||||
let rp = bind.as_str();
|
let rp = bind.as_str();
|
||||||
|
|
||||||
CreateMode {
|
CreateMode {
|
||||||
args,
|
|
||||||
snapshot_path,
|
snapshot_path,
|
||||||
root_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 {
|
impl CreateMode {
|
||||||
fn run(&mut self) {
|
pub fn run(&mut self) {
|
||||||
let snapshot = create_snapshot(self.root_path.as_str(), BLAKE3, vec![]);
|
let snapshot = create_snapshot(self.root_path.as_str(), BLAKE3, vec![]);
|
||||||
self.snapshot = snapshot.clone();
|
self.snapshot = snapshot.clone();
|
||||||
if let Ok(e) = snapshot.file_hashes.lock() {
|
if let Ok(e) = snapshot.file_hashes.lock() {
|
||||||
|
38
src/main.rs
38
src/main.rs
@ -3,45 +3,35 @@ pub mod createmode;
|
|||||||
pub mod syscompare;
|
pub mod syscompare;
|
||||||
mod options;
|
mod options;
|
||||||
|
|
||||||
use crate::syscompare::SysCompareApp;
|
|
||||||
use crate::syscompare::SysCompareMode::{Compare, Create};
|
|
||||||
use std::env::args;
|
use std::env::args;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use clap::{FromArgMatches, Parser};
|
use clap::{FromArgMatches, Parser};
|
||||||
|
use crate::comparemode::CompareMode;
|
||||||
|
use crate::createmode::CreateMode;
|
||||||
use crate::options::{Arguments, Commands};
|
use crate::options::{Arguments, Commands};
|
||||||
|
use crate::syscompare::Comparer;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let options = Arguments::parse();
|
let options = Arguments::parse();
|
||||||
|
let movable = options.clone();
|
||||||
let args: Vec<String> = args().collect();
|
let args: Vec<String> = args().collect();
|
||||||
// println!("{:#?}", args); // testing
|
// println!("{:#?}", args); // testing
|
||||||
|
|
||||||
let app = match options.command {
|
let app = match options.command {
|
||||||
None => {
|
None => {}
|
||||||
print_help();
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
Some(Commands::Create { root_dir, output_path }) => {
|
Some(Commands::Create { root_dir, output_path }) => {
|
||||||
// app mode
|
let mut create =
|
||||||
|
CreateMode::new(output_path, root_dir);
|
||||||
// let app_mode = match m {
|
println!("Creating snapshot..");
|
||||||
// "create" => Create,
|
create.run()
|
||||||
// "compare" => Compare,
|
|
||||||
// _ => {
|
|
||||||
// println!("Invalid MODE argument");
|
|
||||||
// print_help();
|
|
||||||
// exit(0);
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
SysCompareApp::new(Create, args)
|
|
||||||
},
|
},
|
||||||
Some(Commands::Compare { left, right }) => {
|
Some(Commands::Compare { left, right, selection }) => {
|
||||||
SysCompareApp::new(Compare, args)
|
println!("Running snapshot comparison..");
|
||||||
|
let mut compare = CompareMode::new(movable.clone(), left, right, selection);
|
||||||
|
compare.run()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
app.run()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn print_help() {
|
pub fn print_help() {
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
use clap::{Command, Parser, Subcommand};
|
use clap::{Command, Parser, Subcommand};
|
||||||
use crate::syscompare::SysCompareMode;
|
|
||||||
|
|
||||||
#[derive(Parser)]
|
|
||||||
|
#[derive(Parser, Clone, Debug)]
|
||||||
pub struct Arguments {
|
pub struct Arguments {
|
||||||
#[command(subcommand)]
|
#[command(subcommand)]
|
||||||
pub command: Option<Commands>,
|
pub command: Option<Commands>,
|
||||||
|
#[arg(short, long)]
|
||||||
pub input_path: Option<String>,
|
pub input_path: Option<String>,
|
||||||
|
#[arg(short, long)]
|
||||||
pub output_path: Option<String>,
|
pub output_path: Option<String>,
|
||||||
pub show: Option<String>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand, Clone, Debug)]
|
||||||
pub enum Commands {
|
pub enum Commands {
|
||||||
Create {
|
Create {
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
@ -23,5 +25,7 @@ pub enum Commands {
|
|||||||
left: String,
|
left: String,
|
||||||
#[arg(short, long)]
|
#[arg(short, long)]
|
||||||
right: String,
|
right: String,
|
||||||
|
#[arg(short, long)]
|
||||||
|
selection: Option<String>,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ use std::collections::HashMap;
|
|||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
use Fasching::snapshot::Snapshot;
|
use Fasching::snapshot::Snapshot;
|
||||||
|
use crate::options::Arguments;
|
||||||
|
|
||||||
pub enum SysCompareMode {
|
pub enum SysCompareMode {
|
||||||
Create,
|
Create,
|
||||||
@ -13,16 +14,16 @@ pub enum SysCompareMode {
|
|||||||
|
|
||||||
pub struct SysCompareApp {
|
pub struct SysCompareApp {
|
||||||
mode: SysCompareMode,
|
mode: SysCompareMode,
|
||||||
args: Vec<String>,
|
options: Arguments,
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
comparatives: Arc<Mutex<HashMap<String, Snapshot>>>,
|
comparatives: Arc<Mutex<HashMap<String, Snapshot>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SysCompareApp {
|
impl SysCompareApp {
|
||||||
pub fn new(mode: SysCompareMode, args: Vec<String>) -> SysCompareApp {
|
pub fn new(mode: SysCompareMode, options: Arguments) -> SysCompareApp {
|
||||||
SysCompareApp {
|
SysCompareApp {
|
||||||
mode,
|
mode,
|
||||||
args,
|
options,
|
||||||
comparatives: Arc::new(Mutex::new(HashMap::new())),
|
comparatives: Arc::new(Mutex::new(HashMap::new())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -30,67 +31,55 @@ impl SysCompareApp {
|
|||||||
println!("running");
|
println!("running");
|
||||||
match self.mode {
|
match self.mode {
|
||||||
SysCompareMode::Create => {
|
SysCompareMode::Create => {
|
||||||
let snapshot_path = match self.args.get(2) {
|
// let mut create =
|
||||||
None => {
|
// CreateMode::new(self.options.clone(), snapshot_path.clone(), root_dir.clone());
|
||||||
println!("Missing hash dir path as second argument");
|
// create.run()
|
||||||
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()
|
|
||||||
}
|
}
|
||||||
SysCompareMode::Compare => {
|
SysCompareMode::Compare => {
|
||||||
let left = match self.args.get(2) {
|
// let left = match self.args.get(2) {
|
||||||
None => {
|
// None => {
|
||||||
println!("Missing hash dir path as second argument");
|
// println!("Missing hash dir path as second argument");
|
||||||
print_help();
|
// print_help();
|
||||||
exit(0);
|
// exit(0);
|
||||||
}
|
// }
|
||||||
Some(r) => not_empty(r),
|
// Some(r) => not_empty(r),
|
||||||
};
|
// };
|
||||||
let right = match self.args.get(3) {
|
// let right = match self.args.get(3) {
|
||||||
None => {
|
// None => {
|
||||||
println!("Missing output path as third argument");
|
// println!("Missing output path as third argument");
|
||||||
print_help();
|
// print_help();
|
||||||
exit(0);
|
// exit(0);
|
||||||
}
|
// }
|
||||||
Some(r) => not_empty(r),
|
// Some(r) => not_empty(r),
|
||||||
};
|
// };
|
||||||
|
|
||||||
let mut compare = CompareMode::new(self.args.clone(), left, right);
|
// let mut compare = CompareMode::new(self.args.clone(), left, right);
|
||||||
compare.run()
|
// compare.run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn not_empty(r: &String) -> String {
|
// fn not_empty(r: &String) -> String {
|
||||||
if r.replace("./", "").is_empty() {
|
// if r.replace("./", "").is_empty() {
|
||||||
println!("Specify input file name");
|
// println!("Specify input file name");
|
||||||
print_help();
|
// print_help();
|
||||||
exit(0);
|
// exit(0);
|
||||||
} else {
|
// } else {
|
||||||
r.to_string()
|
// r.to_string()
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
impl Default for SysCompareApp {
|
impl Default for SysCompareApp {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
SysCompareApp {
|
SysCompareApp {
|
||||||
mode: SysCompareMode::Create,
|
mode: SysCompareMode::Create,
|
||||||
args: vec![],
|
|
||||||
comparatives: Arc::new(Mutex::new(HashMap::new())),
|
comparatives: Arc::new(Mutex::new(HashMap::new())),
|
||||||
|
options: Arguments {
|
||||||
|
command: None,
|
||||||
|
input_path: None,
|
||||||
|
output_path: None,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user