Skip to content

Commit 699421c

Browse files
authored
fix: ignore gitignore globs (#4765)
1 parent 3c3ef1a commit 699421c

File tree

3 files changed

+1154
-1053
lines changed

3 files changed

+1154
-1053
lines changed

crates/pixi_glob/src/glob_set/mod.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,29 @@ mod tests {
263263
"#);
264264
}
265265

266+
#[test]
267+
fn check_hidden_folder_is_whitelisted_with_star() {
268+
let temp_dir = tempdir().unwrap();
269+
let root_path = temp_dir.path().join("workspace");
270+
fs::create_dir(&root_path).unwrap();
271+
272+
let hidden_pixi_folder = root_path.join(".pixi").join("subdir");
273+
274+
fs::create_dir_all(&hidden_pixi_folder).unwrap();
275+
276+
File::create(hidden_pixi_folder.join("foo_hidden.txt")).unwrap();
277+
278+
File::create(root_path.as_path().join("some_text.txt")).unwrap();
279+
let glob_set = GlobSet::create(vec![".pixi/subdir/**"]);
280+
281+
let entries = glob_set.collect_matching(&root_path).unwrap();
282+
283+
let paths = sorted_paths(entries, &root_path);
284+
assert_yaml_snapshot!(paths, @r#"
285+
- ".pixi/subdir/foo_hidden.txt"
286+
"#);
287+
}
288+
266289
#[test]
267290
fn check_hidden_folders_are_not_included() {
268291
let temp_dir = tempdir().unwrap();

crates/pixi_glob/src/glob_set/walk.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ pub fn walk_globs(
111111
let mut builder = ignore::WalkBuilder::new(effective_walk_root);
112112

113113
let walker_builder = builder
114-
.git_ignore(true)
114+
.git_ignore(false)
115115
.git_exclude(true)
116116
.hidden(enable_ignoring_hidden)
117117
.git_global(false)
@@ -304,13 +304,23 @@ pub fn set_ignore_hidden_patterns(patterns: &[String]) -> Option<Vec<String>> {
304304
// Extract the hidden folder name from patterns like:
305305
// ".pixi/*" -> ".pixi"
306306
// "**/.deep_pixi/**" -> ".deep_pixi"
307+
// ".build/CMakeFiles/**" -> ".build"
307308
let hidden_folder = if pattern.starts_with('.') {
308-
// Pattern like ".pixi/*"
309-
pattern
309+
// Pattern like ".pixi/*" or ".build/CMakeFiles/**"
310+
// Extract just the first hidden folder component
311+
if let Some(slash_idx) = pattern.find('/') {
312+
&pattern[..slash_idx]
313+
} else {
314+
pattern
315+
}
310316
} else if let Some(idx) = pattern.find("/.") {
311317
// Pattern like "**/.deep_pixi/**"
312318
let after_slash = &pattern[idx + 1..];
313-
after_slash.split('/').next().unwrap_or(pattern)
319+
if let Some(slash_idx) = after_slash.find('/') {
320+
&after_slash[..slash_idx]
321+
} else {
322+
after_slash.split('/').next().unwrap_or(pattern)
323+
}
314324
} else {
315325
continue;
316326
};

0 commit comments

Comments
 (0)