From 56234eaa3d3dd63de53e2ee0a326f4f2978c34cc Mon Sep 17 00:00:00 2001 From: grimhilt Date: Sat, 28 Oct 2023 00:15:47 +0200 Subject: [PATCH] add todos and fix some bugs on add and status --- src/commands/add.rs | 1 + src/commands/status.rs | 43 ++++++++++++++++++++++++++++++++++++++---- src/main.rs | 11 +++++++++-- 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/commands/add.rs b/src/commands/add.rs index 2c4c72f..3cb4dd2 100644 --- a/src/commands/add.rs +++ b/src/commands/add.rs @@ -62,6 +62,7 @@ pub fn add(args: AddArgs) { if Object::new(path.to_str().unwrap()).exists() { added_files.push(String::from(f)); } else { + // todo applies regex eprintln!("err: {} is not something you can add.", path.to_str().unwrap()); } } diff --git a/src/commands/status.rs b/src/commands/status.rs index 9c71b8f..7434d7f 100644 --- a/src/commands/status.rs +++ b/src/commands/status.rs @@ -12,6 +12,10 @@ use crate::utils::read::{read_folder, read_lines}; use crate::store::object::tree; use crate::store::index; +pub struct StatusArgs { + pub nostyle: bool, +} + #[derive(PartialEq)] enum RemoveSide { Left, @@ -31,7 +35,7 @@ pub enum State { // todo: relative path, filename // todo: not catch added empty folder -pub fn status() { +pub fn status(args: StatusArgs) { let mut all_hashes = get_all_objs_hashes(); let staged_objs = get_staged(&mut all_hashes); @@ -39,8 +43,14 @@ pub fn status() { x.1.clone() }).collect(); - - print_status(staged_objs, objs); + if args.nostyle + { + print_status_nostyle(staged_objs, objs); + } + else + { + print_status(staged_objs, objs); + } } pub fn get_all_objs() -> Vec { @@ -82,6 +92,11 @@ fn get_all_objs_hashes() -> HashMap { fn should_retain(hasher: &mut Sha1, key: String, obj: LocalObj, move_copy_hashes: &mut HashMap, del_objs_h: &mut HashMap) -> bool { // todo prevent copied or moved if file empty + // todo deal with directories + if obj.path.is_dir() + { + return false; + } let mut blob = Blob::new(obj.path.clone()); let mut flag = true; let identical_blobs = blob.get_all_identical_blobs(); @@ -348,6 +363,26 @@ fn print_status(staged_objs: Vec, objs: Vec) { } } +fn print_status_nostyle(staged_objs: Vec, objs: Vec) { + // todo sort + if staged_objs.len() == 0 && objs.len() == 0 { + return; + } + for obj in staged_objs { + if obj.state == State::Deleted { + println!("deleted: {}", obj.name); + } else if obj.state == State::New { + println!("new: {}", obj.name); + } else if obj.state == State::Modified { + println!("modified: {}", obj.name); + } else if obj.state == State::Moved { + println!("moved: {} => {}", path_buf_to_string(obj.path_from.unwrap()), path_buf_to_string(obj.path)); + } else if obj.state == State::Copied { + println!("copied: {} => {}", path_buf_to_string(obj.path_from.unwrap()), path_buf_to_string(obj.path)); + } + } +} + fn print_object(obj: LocalObj) { if obj.state == State::Deleted { println!(" {} {}", String::from("deleted:").red(), obj.name.red()); @@ -413,7 +448,7 @@ fn is_nextsync_config(path: PathBuf) -> bool { #[cfg(test)] mod tests { use super::*; - + #[test] fn test_remove_duplicate() { let mut hasher = Sha1::new(); diff --git a/src/main.rs b/src/main.rs index acfa849..c367934 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use clap::{App, Arg, SubCommand}; use textwrap::{fill, Options}; use crate::commands::add::AddArgs; +use crate::commands::status::StatusArgs; use crate::commands::clone::{self, CloneArgs}; mod commands; @@ -66,6 +67,11 @@ fn main() { .takes_value(true) .value_name("DIRECTORY") ) + .arg( + Arg::with_name("nostyle") + .long("nostyle") + .help("Status with minium information and style"), + ) .about("Show the working tree status") ) .subcommand( @@ -141,7 +147,9 @@ fn main() { if let Some(val) = matches.values_of("directory") { global::global::set_dir_path(String::from(val.clone().next().unwrap())); } - commands::status::status(); + commands::status::status(StatusArgs { + nostyle: matches.is_present("nostyle"), + }); } else if let Some(matches) = matches.subcommand_matches("add") { if let Some(files) = matches.values_of("files") { commands::add::add(AddArgs { @@ -191,7 +199,6 @@ fn main() { } commands::pull::pull(); } else if let Some(_) = matches.subcommand_matches("test") { - } }