diff --git a/src/prepare/providers/git_submodule.rs b/src/prepare/providers/git_submodule.rs index 3b1e35020e..60cca1d803 100644 --- a/src/prepare/providers/git_submodule.rs +++ b/src/prepare/providers/git_submodule.rs @@ -21,16 +21,34 @@ impl GitSubmodulePrepareProvider { } /// Parse submodule paths from .gitmodules file + /// + /// Handles INI-style sections and comments. Only extracts `path` values + /// from `[submodule "..."]` sections. fn submodule_paths(&self) -> Vec { let gitmodules = self.base.project_root.join(".gitmodules"); let Ok(content) = std::fs::read_to_string(&gitmodules) else { return vec![]; }; + let mut in_submodule_section = false; content .lines() .filter_map(|line| { let line = line.trim(); + if line.starts_with('#') || line.starts_with(';') { + return None; + } + if line.starts_with("[submodule ") || line.starts_with("[submodule\"") { + in_submodule_section = true; + return None; + } + if line.starts_with('[') { + in_submodule_section = false; + return None; + } + if !in_submodule_section { + return None; + } if let Some(value) = line.strip_prefix("path") { let value = value.trim_start(); value