From da4520288267c4267c6c77c0ccb2657de512a2f9 Mon Sep 17 00:00:00 2001 From: HouXiaoxuan Date: Sat, 23 Dec 2023 20:52:25 +0800 Subject: [PATCH] =?UTF-8?q?fix=20stack=20overflow=20=E7=BA=A0=E6=AD=A3tree?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/models/tree.rs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/models/tree.rs b/src/models/tree.rs index eb349a3..56d6ae1 100644 --- a/src/models/tree.rs +++ b/src/models/tree.rs @@ -41,11 +41,12 @@ fn store_path_to_tree(index: &Index, current_root: PathBuf) -> Tree { }; let mut tree = Tree { hash: "".to_string(), entries: Vec::new() }; let mut processed_path: HashSet = HashSet::new(); - let path_entries = index + let path_entries: Vec = index .get_tracked_files() .iter() .map(|file| util::to_workdir_relative_path(file)) - .collect::>(); + .filter(|path| path.starts_with(¤t_root)) + .collect(); for path in path_entries.iter() { // 判断是不是直接在根目录下 let in_path = path.parent().unwrap() == current_root; @@ -58,17 +59,20 @@ fn store_path_to_tree(index: &Index, current_root: PathBuf) -> Tree { continue; } // 拿到下一级别目录 - let process_path = path.components().nth(0).unwrap().as_os_str().to_str().unwrap(); - // if processed_path.insert(process_path.to_string(), true).is_some() { - // continue; - // } + let process_path = path + .components() + .nth(current_root.components().count()) + .unwrap() + .as_os_str() + .to_str() + .unwrap(); // TODO 函数整体逻辑错误,等待修复@houxiaoxuan if processed_path.contains(process_path) { continue; } processed_path.insert(process_path.to_string()); - let sub_tree = store_path_to_tree(index, process_path.into()); + let sub_tree = store_path_to_tree(index, current_root.clone().join(process_path)); let mode = util::get_file_mode(&util::get_working_dir().unwrap().join(process_path)); tree.entries.push(TreeEntry { filemode: (String::from("tree"), mode), @@ -176,7 +180,7 @@ mod test { } let tree = super::Tree::new(&index); - assert!(tree.entries.len() == 2); + assert!(tree.entries.len() == 3); assert!(tree.hash.len() != 0); }