From f76b9f46d00ca756fdca2b5b2fdb9ae2b31a07bd Mon Sep 17 00:00:00 2001 From: dalance Date: Fri, 7 Jun 2024 16:20:06 +0900 Subject: [PATCH] Exclude veryl sources in inner projects --- crates/metadata/src/utils.rs | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/crates/metadata/src/utils.rs b/crates/metadata/src/utils.rs index f14418cd..02eba76d 100644 --- a/crates/metadata/src/utils.rs +++ b/crates/metadata/src/utils.rs @@ -8,14 +8,34 @@ pub fn gather_files_with_extension>( ext: &str, symlink: bool, ) -> Result, MetadataError> { + let mut inner_prj = Vec::new(); + for entry in WalkDir::new(base_dir.as_ref()).follow_links(symlink) { + let entry = entry?; + if entry.file_type().is_file() { + if let Some(x) = entry.path().file_name() { + if x == "Veryl.toml" { + let prj_dir = entry.path().parent().unwrap(); + if prj_dir != base_dir.as_ref() { + debug!("Found inner project ({})", prj_dir.to_string_lossy()); + inner_prj.push(prj_dir.to_path_buf()); + } + } + } + } + } + let mut ret = Vec::new(); - for entry in WalkDir::new(base_dir).follow_links(symlink) { + for entry in WalkDir::new(base_dir.as_ref()).follow_links(symlink) { let entry = entry?; if entry.file_type().is_file() { if let Some(x) = entry.path().extension() { if x == ext { - debug!("Found file ({})", entry.path().to_string_lossy()); - ret.push(entry.path().to_path_buf()); + let is_inner = inner_prj.iter().any(|x| entry.path().starts_with(x)); + + if !is_inner { + debug!("Found file ({})", entry.path().to_string_lossy()); + ret.push(entry.path().to_path_buf()); + } } } }