Apply file extension filter to git repo files

To prevent unnecessary increases in the size of git repo files uploaded
to ChatGPT, the `enabledFileExtensions` filter used for patch review
files is now also applied to the repo files.

Change-Id: I0120d14f34192da6097b15c65f519f228996a7f8
Signed-off-by: Patrizio <patrizio.gelosi@amarulasolutions.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java
index ff54e0e..9ff6046 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java
@@ -18,6 +18,7 @@
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
+import static com.googlesource.gerrit.plugins.chatgpt.utils.FileUtils.matchesExtensionList;
 import static com.googlesource.gerrit.plugins.chatgpt.utils.GsonUtils.getNoEscapedGson;
 import static java.util.stream.Collectors.toList;
 
@@ -67,8 +68,7 @@
         try (ManualRequestContext requestContext = config.openRequestContext()) {
             for (String filename : files) {
                 isCommitMessage = filename.equals("/COMMIT_MSG");
-                if (!isCommitMessage && (filename.lastIndexOf(".") < 1 ||
-                        !enabledFileExtensions.contains(filename.substring(filename.lastIndexOf("."))))) {
+                if (!isCommitMessage && !matchesExtensionList(filename, enabledFileExtensions)) {
                     continue;
                 }
                 DiffInfo diff =
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistantBase.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistantBase.java
index 435efc9..1fa9c9e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistantBase.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptAssistantBase.java
@@ -65,7 +65,7 @@
     }
 
     private String uploadRepoFiles() {
-        String repoFiles = gitRepoFiles.getGitRepoFiles(change);
+        String repoFiles = gitRepoFiles.getGitRepoFiles(config, change);
         Path repoPath = createTempFileWithContent(change.getProjectName(), ".json", repoFiles);
         ChatGptFiles chatGptFiles = new ChatGptFiles(config);
         ChatGptFilesResponse chatGptFilesResponse = chatGptFiles.uploadFiles(repoPath);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/git/GitRepoFiles.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/git/GitRepoFiles.java
index ce794e1..d518049 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/git/GitRepoFiles.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/git/GitRepoFiles.java
@@ -1,5 +1,6 @@
 package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.git;
 
+import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
 import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.jgit.api.errors.GitAPIException;
@@ -14,18 +15,25 @@
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
+import static com.googlesource.gerrit.plugins.chatgpt.utils.FileUtils.matchesExtensionList;
 import static com.googlesource.gerrit.plugins.chatgpt.utils.GsonUtils.getGson;
 
 @Slf4j
 public class GitRepoFiles {
     public static final String REPO_PATTERN = "git/%s.git";
 
-    public String getGitRepoFiles(GerritChange change) {
+    private List<String> enabledFileExtensions;
+
+    public String getGitRepoFiles(Configuration config, GerritChange change) {
+        enabledFileExtensions = config.getEnabledFileExtensions();
+        log.debug("Open Repo from {}", change.getProjectNameKey());
         String repoPath = String.format(REPO_PATTERN, change.getProjectNameKey().toString());
         try {
             Repository repository = openRepository(repoPath);
+            log.debug("Open Repo path {}", repoPath);
             Map<String, String> filesWithContent = listFilesWithContent(repository);
 
             return getGson().toJson(filesWithContent);
@@ -49,9 +57,11 @@
 
                 while (treeWalk.next()) {
                     String path = treeWalk.getPathString();
+                    if (!matchesExtensionList(path, enabledFileExtensions)) continue;
                     ObjectId objectId = treeWalk.getObjectId(0);
                     byte[] bytes = reader.open(objectId).getBytes();
                     String content = new String(bytes, StandardCharsets.UTF_8); // Assumes text files with UTF-8 encoding
+                    log.debug("Repo File loaded: {}", path);
                     filesWithContent.put(path, content);
                 }
             }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/utils/FileUtils.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/utils/FileUtils.java
index 07763cd..fe8f03c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/utils/FileUtils.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/utils/FileUtils.java
@@ -5,6 +5,7 @@
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.List;
 import java.util.Objects;
 
 public class FileUtils {
@@ -25,4 +26,9 @@
 
         return tempFile;
     }
+
+    public static boolean matchesExtensionList(String filename, List<String> extensions) {
+        int extIndex = filename.lastIndexOf('.');
+        return extIndex >= 1 && extensions.contains(filename.substring(extIndex));
+    }
 }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java
index 0dbaafe..9dccaae 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewStatefulTest.java
@@ -74,7 +74,7 @@
 
         // Mock the behavior of the Git Repository Manager
         String repoJson = readTestFile("__files/stateful/gitProjectFiles.json");
-        when(gitRepoFiles.getGitRepoFiles(any())).thenReturn(repoJson);
+        when(gitRepoFiles.getGitRepoFiles(any(), any())).thenReturn(repoJson);
 
         // Mock the behavior of the ChatGPT create-file request
         WireMock.stubFor(WireMock.post(WireMock.urlEqualTo(URI.create(config.getGptDomain()