add modified files in status

This commit is contained in:
grimhilt 2023-08-04 19:17:21 +02:00
parent 91a29480df
commit 16dbd25168

View File

@ -2,11 +2,13 @@ use std::fs::File;
use std::path::PathBuf; use std::path::PathBuf;
use std::io::{self, Lines, BufReader}; use std::io::{self, Lines, BufReader};
use std::collections::HashMap; use std::collections::HashMap;
use chrono::Local;
use crypto::digest::Digest; use crypto::digest::Digest;
use crypto::sha1::Sha1; use crypto::sha1::Sha1;
use colored::Colorize; use colored::Colorize;
use crate::utils::path; use crate::utils::path;
use crate::store::head; use crate::store::head;
use crate::store::object::blob::Blob;
use crate::utils::read::{read_folder, read_lines}; use crate::utils::read::{read_folder, read_lines};
use crate::store::object::tree; use crate::store::object::tree;
use crate::store::index; use crate::store::index;
@ -27,11 +29,11 @@ pub enum State {
Deleted, Deleted,
} }
// todo: relative path, filename, get modified // todo: relative path, filename
// todo: not catch added empty folder // todo: not catch added empty folder
pub fn status() { pub fn status() {
let (mut new_objs_hashes, mut del_objs_hashes) = get_diff(); let (mut new_objs_hashes, mut del_objs_hashes, mut objs_modified) = get_diff();
// get copy, modified // get copy
let staged_objs = get_staged(&mut new_objs_hashes, &mut del_objs_hashes); let staged_objs = get_staged(&mut new_objs_hashes, &mut del_objs_hashes);
let mut objs: Vec<LocalObj> = del_objs_hashes.iter().map(|x| { let mut objs: Vec<LocalObj> = del_objs_hashes.iter().map(|x| {
@ -42,6 +44,16 @@ pub fn status() {
objs.push(elt.clone()); objs.push(elt.clone());
} }
for obj in objs_modified {
objs.push(LocalObj {
// todo otype
otype: get_otype(PathBuf::from(obj.clone())),
name: obj.clone().to_string(),
path: PathBuf::from(obj),
state: State::Modified
});
}
print_status(staged_objs, objs); print_status(staged_objs, objs);
} }
@ -54,7 +66,7 @@ pub struct LocalObj {
} }
pub fn get_all_staged() -> Vec<LocalObj> { pub fn get_all_staged() -> Vec<LocalObj> {
let (mut new_objs_hashes, mut del_objs_hashes) = get_diff(); let (mut new_objs_hashes, mut del_objs_hashes, mut objs_modified) = get_diff();
// get copy, modified // get copy, modified
let staged_objs = get_staged(&mut new_objs_hashes, &mut del_objs_hashes); let staged_objs = get_staged(&mut new_objs_hashes, &mut del_objs_hashes);
@ -111,9 +123,10 @@ fn get_staged(new_objs_h: &mut HashMap<String, LocalObj>, del_objs_h: &mut HashM
staged_objs staged_objs
} }
fn get_diff() -> (HashMap<String, LocalObj>, HashMap<String, LocalObj>) { fn get_diff() -> (HashMap<String, LocalObj>, HashMap<String, LocalObj>, Vec<String>) {
let mut hashes = HashMap::new(); let mut hashes = HashMap::new();
let mut objs: Vec<String> = vec![]; let mut objs: Vec<String> = vec![];
let mut objs_modified: Vec<String> = vec![];
let root = path::repo_root(); let root = path::repo_root();
@ -149,7 +162,9 @@ fn get_diff() -> (HashMap<String, LocalObj>, HashMap<String, LocalObj>) {
let diff = remove_duplicate(&mut hashes, &mut objs, RemoveSide::Both); let diff = remove_duplicate(&mut hashes, &mut objs, RemoveSide::Both);
obj_to_analyse.append(&mut diff.clone()); obj_to_analyse.append(&mut diff.clone());
} else { } else {
// todo look for change if Blob::new(cur_path).has_change() {
objs_modified.push(cur_obj);
}
} }
} }
@ -177,7 +192,7 @@ fn get_diff() -> (HashMap<String, LocalObj>, HashMap<String, LocalObj>) {
}); });
} }
(new_objs_hashes, hashes) (new_objs_hashes, hashes, objs_modified)
} }
fn get_otype(p: PathBuf) -> String { fn get_otype(p: PathBuf) -> String {