diff --git a/src/commands/add.rs b/src/commands/add.rs index c8a42dc..c082882 100644 --- a/src/commands/add.rs +++ b/src/commands/add.rs @@ -33,7 +33,7 @@ pub fn add(files: Vec, all: bool, mut update: bool) { dot = false; } - let path = if all || update { + let dir = if all || update { println!("{}", "--all || --update 运行于工作区目录".bright_green()); get_working_dir().unwrap() } else if dot { @@ -43,13 +43,13 @@ pub fn add(files: Vec, all: bool, mut update: bool) { panic!(); }; - println!("Working on [{}]\n", path.to_str().unwrap().bright_blue()); - files = list_files(&path).unwrap(); + println!("Working on [{}]\n", dir.to_str().unwrap().bright_blue()); + files = list_files(&dir).unwrap(); if update { files.retain(|file| index.contains(file)); } - files.extend(index.get_deleted_files()); //包含已删除的文件 + files.extend(index.get_deleted_files(&dir)); //包含已删除的文件 } for file in &files { diff --git a/src/models/index.rs b/src/models/index.rs index 9d88db1..0612e0e 100644 --- a/src/models/index.rs +++ b/src/models/index.rs @@ -97,10 +97,10 @@ impl Index { } /// 与暂存区比较,获取工作区中被删除的文件 - pub fn get_deleted_files(&self) -> Vec { + pub fn get_deleted_files(&self, dir: &Path) -> Vec { let mut files = Vec::new(); self.entries.keys().for_each(|file| { - if !file.exists() { + if !file.exists() && util::is_parent_dir(file, dir) { files.push(file.clone()); } }); diff --git a/src/utils/util.rs b/src/utils/util.rs index 7bf2f24..e242b15 100644 --- a/src/utils/util.rs +++ b/src/utils/util.rs @@ -144,6 +144,12 @@ pub fn is_inside_dir(file: &Path, dir: &Path) -> bool { } } +/// 检测dir是否是file的父目录 (不论文件是否存在) +pub fn is_parent_dir(file: &Path, dir: &Path) -> bool { + let file = get_absolute_path(file); + file.starts_with(dir) +} + /// 检查文件是否在工作区内, 若不存在则false pub fn is_inside_workdir(file: &Path) -> bool { is_inside_dir(file, &get_working_dir().unwrap())