diff --git a/src/Testcontainers/Images/IgnoreFile.cs b/src/Testcontainers/Images/IgnoreFile.cs index d5d3ec336..ae135a6be 100644 --- a/src/Testcontainers/Images/IgnoreFile.cs +++ b/src/Testcontainers/Images/IgnoreFile.cs @@ -73,14 +73,17 @@ public IgnoreFile(IEnumerable patterns, ILogger logger) // Prepare exact and partial patterns. .Aggregate(new List>(), (lines, line) => { - var key = line.Key; - var value = line.Value; - - lines.AddRange(key - .Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries) - .Skip(1) - .Prepend(key) - .Select(ignorePattern => new KeyValuePair(ignorePattern, value))); + const string globstar = "**/"; + + if (line.Key.Contains(globstar)) + { + lines.Add(line); + lines.Add(new KeyValuePair(line.Key.Replace(globstar, string.Empty), line.Value)); + } + else + { + lines.Add(line); + } return lines; }) diff --git a/tests/Testcontainers.Tests/Fixtures/Images/IgnoreFileFixture.cs b/tests/Testcontainers.Tests/Fixtures/Images/IgnoreFileFixture.cs index fdb1a3870..48ca59d4b 100644 --- a/tests/Testcontainers.Tests/Fixtures/Images/IgnoreFileFixture.cs +++ b/tests/Testcontainers.Tests/Fixtures/Images/IgnoreFileFixture.cs @@ -13,7 +13,7 @@ public IgnoreFileFixture() var ignoreAllFilesAndDirectories = new IgnoreFile(new[] { "*", "!README*.md" }, logger); var ignoreNonRecursiveFiles = new IgnoreFile(new[] { "*/temp*" }, logger); var ignoreNonRecursiveNestedFiles = new IgnoreFile(new[] { "*/*/temp*" }, logger); - var ignoreRecursiveFiles = new IgnoreFile(new[] { "**/*.txt" }, logger); + var ignoreRecursiveFiles = new IgnoreFile(new[] { "**/*.txt", "**/.idea", "**/.vs", "**/.git", "!**/.gitignore", "!.git/HEAD", "!.git/refs/heads/**", "src/**/lipsum.config" }, logger); var ignoreSingleCharacterFiles = new IgnoreFile(new[] { "temp?" }, logger); var ignoreExceptionFiles = new IgnoreFile(new[] { "*.md", "!README*.md", "README-secret.md" }, logger); Add(ignoreFilesAndDirectories, "bin/Debug", false); @@ -35,6 +35,18 @@ public IgnoreFileFixture() Add(ignoreRecursiveFiles, "lorem/lipsum.txt", false); Add(ignoreRecursiveFiles, "lorem/lipsum/lipsum.config", true); Add(ignoreRecursiveFiles, "lorem/lipsum.config", true); + Add(ignoreRecursiveFiles, "src/.idea/../v17/../lipsum.log", false); + Add(ignoreRecursiveFiles, "src/.vs/../v17/../lipsum.log", false); + Add(ignoreRecursiveFiles, ".git/logs", false); + Add(ignoreRecursiveFiles, "src/lorem/lipsum/lipsum.config", false); + Add(ignoreRecursiveFiles, "src/lorem/lipsum.config", false); + Add(ignoreRecursiveFiles, "src/lipsum.config", false); + Add(ignoreRecursiveFiles, ".gitignore", true); + Add(ignoreRecursiveFiles, ".git/HEAD", true); + Add(ignoreRecursiveFiles, ".git/refs/heads/main", true); + Add(ignoreRecursiveFiles, ".git/refs/heads/bugfix/gh-1119", true); + Add(ignoreRecursiveFiles, "src/lorem/temp", true); + Add(ignoreRecursiveFiles, "lipsum.config", true); Add(ignoreSingleCharacterFiles, "temp", false); Add(ignoreSingleCharacterFiles, "temp1", false); Add(ignoreSingleCharacterFiles, "temp12", true);