完善add逻辑

This commit is contained in:
mrbeanc
2023-12-19 23:53:12 +08:00
parent 6616e98109
commit 6780be2e02
4 changed files with 49 additions and 18 deletions

View File

@@ -1,9 +1,10 @@
use std::env;
use std::path::{Path, PathBuf};
use colored::Colorize;
use sha1::Digest;
use crate::models::blob::Blob;
use crate::models::index::{FileMetaData, Index};
use crate::utils::util::{check_repo_exist, get_file_mode, get_relative_path, get_working_dir, list_files};
use crate::utils::util::{check_repo_exist, get_relative_path, get_working_dir, list_files};
pub fn add(files: Vec<String>, all: bool, mut update: bool) {
check_repo_exist();
@@ -41,23 +42,21 @@ pub fn add(files: Vec<String>, all: bool, mut update: bool) {
for file in &files {
add_a_file(file, &mut index);
}
index.save();
}
fn add_a_file(file: &Path, index: &mut Index) {
println!("add a file: {}", get_relative_path(file, get_working_dir().unwrap()).display());
if !file.exists() { //文件被删除
index.remove(file);
} else if !index.contains(file) { //文件未被跟踪
} else {
let blob = Blob::new(file);
let meta = file.metadata().unwrap();
index.add(file.to_path_buf(), FileMetaData{
hash: blob.get_hash(),
size: meta.len(),
created_time: meta.created().unwrap(),
modified_time: meta.modified().unwrap(),
mode: get_file_mode(file)
});
} else { //文件已被跟踪,可能被修改
let file_data = FileMetaData::new(&blob, file);
if !index.contains(file) { //文件未被跟踪
index.add(file.to_path_buf(), file_data);
} else { //文件已被跟踪,可能被修改
index.update(file.to_path_buf(), file_data);
}
}
}