From eb393af56ffe30366a3e868ba0e912ab7a717f78 Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Tue, 11 Feb 2025 15:51:43 -0500 Subject: [PATCH 1/2] fix(amazonq): update logic for converting gitignore pattern to regex --- .../FeatureDevSessionContextTest.kt | 33 +++++++++++++++++++ .../amazonq/FeatureDevSessionContext.kt | 15 ++++++--- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevSessionContextTest.kt b/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevSessionContextTest.kt index f77d0ce75b..7391ba69a7 100644 --- a/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevSessionContextTest.kt +++ b/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevSessionContextTest.kt @@ -161,4 +161,37 @@ class FeatureDevSessionContextTest : FeatureDevTestBase(HeavyJavaCodeInsightTest assertEquals(zippedFiles, expectedFiles) } + + @Test + fun testConvertGitIgnorePatternToRegex() { + val sampleGitIgnorePatterns = listOf(".*", "build/", "*.txt", "*.png") + val sampleFileNames = listOf( + ".gitignore/", + ".env/", + "file.txt/", + ".git/config/", + "src/file.txt/", + "build/", + "build/output.jar/", + "builds/", + "mybuild/", + "build.json/", + "log.txt/", + "file.txt.json/", + "file.png/", + "src/file.png/" + ) + + val patterns = sampleGitIgnorePatterns.map { pattern -> featureDevSessionContext.convertGitIgnorePatternToRegex(pattern).toRegex() } + + val matchedFiles = sampleFileNames.filter { fileName -> + patterns.any { pattern -> + pattern.matches(fileName) + } + } + + val expectedFilesToMatch = listOf(".gitignore/", ".env/", "file.txt/", ".git/config/", "src/file.txt/", "build/", "build/output.jar/", "log.txt/", "file.png/", "src/file.png/") + + assertEquals(expectedFilesToMatch, matchedFiles) + } } diff --git a/plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/FeatureDevSessionContext.kt b/plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/FeatureDevSessionContext.kt index 781d3dd258..419dd98f8b 100644 --- a/plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/FeatureDevSessionContext.kt +++ b/plugins/core/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/FeatureDevSessionContext.kt @@ -279,10 +279,17 @@ class FeatureDevSessionContext(val project: Project, val maxProjectSizeBytes: Lo } // gitignore patterns are not regex, method update needed. - private fun convertGitIgnorePatternToRegex(pattern: String): String = pattern - .replace(".", "\\.") - .replace("*", ".*") - .let { if (it.endsWith("/")) "$it.*" else "$it/.*" } // Add a trailing /* to all patterns. (we add a trailing / to all files when matching) + fun convertGitIgnorePatternToRegex(pattern: String): String { + // Special case for ".*" to match only dotfiles + if (pattern == ".*") { + return "^\\..*/.*" + } + + return pattern + .replace(".", "\\.") + .replace("*", ".*") + .let { if (it.endsWith("/")) "$it.*" else "$it/.*" } // Add a trailing /* to all patterns. (we add a trailing / to all files when matching) + } var selectedSourceFolder: VirtualFile set(newRoot) { _selectedSourceFolder = newRoot From fb597cc7fd8e705804f6475688b06a0edd5b05fb Mon Sep 17 00:00:00 2001 From: Gaurav Gandhi Date: Tue, 11 Feb 2025 15:51:43 -0500 Subject: [PATCH 2/2] fix(amazonq): update logic for converting gitignore pattern to regex --- .../FeatureDevSessionContextTest.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevSessionContextTest.kt b/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevSessionContextTest.kt index 7391ba69a7..c23e256849 100644 --- a/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevSessionContextTest.kt +++ b/plugins/amazonq/chat/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/amazonqFeatureDev/FeatureDevSessionContextTest.kt @@ -190,7 +190,19 @@ class FeatureDevSessionContextTest : FeatureDevTestBase(HeavyJavaCodeInsightTest } } - val expectedFilesToMatch = listOf(".gitignore/", ".env/", "file.txt/", ".git/config/", "src/file.txt/", "build/", "build/output.jar/", "log.txt/", "file.png/", "src/file.png/") + val expectedFilesToMatch = + listOf( + ".gitignore/", + ".env/", + "file.txt/", + ".git/config/", + "src/file.txt/", + "build/", + "build/output.jar/", + "log.txt/", + "file.png/", + "src/file.png/" + ) assertEquals(expectedFilesToMatch, matchedFiles) }