Remove ChangeSetSingletonManager class
Instead of relying on the `ChangeSetSingletonManager` class, lean on the
Guice binding and injection.
This change only removes the singleton manager and propagate the
`ChangeSetData` manually via consturctors and method arguments. Later we
can refactor code to use Guice injections and simplify it this way.
Change-Id: Iacac3d620a00f7d1b6acb5151dc0db10ac4721f0
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
index d4baa7e..187d7c2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
@@ -32,6 +32,7 @@
private final Configuration config;
private final GerritClient gerritClient;
+ private final ChangeSetData changeSetData;
@Getter
private IChatGptClient chatGptClient;
@@ -41,9 +42,10 @@
private List<Integer> reviewScores;
@Inject
- PatchSetReviewer(GerritClient gerritClient, Configuration config) {
+ PatchSetReviewer(GerritClient gerritClient, Configuration config, ChangeSetData changeSetData) {
this.config = config;
this.gerritClient = gerritClient;
+ this.changeSetData = changeSetData;
}
public void review(GerritChange change) throws Exception {
@@ -57,7 +59,7 @@
log.info("No file to review has been found in the PatchSet");
return;
}
- ChangeSetDataHandler.update(config, change, gerritClient);
+ ChangeSetDataHandler.update(config, change, gerritClient, changeSetData);
String reviewReply = getReviewReply(change, patchSet);
log.debug("ChatGPT response: {}", reviewReply);
@@ -96,7 +98,6 @@
private void retrieveReviewBatches(String reviewReply, GerritChange change) {
ChatGptResponseContent reviewJson = getGson().fromJson(reviewReply, ChatGptResponseContent.class);
- ChangeSetData changeSetData = ChangeSetDataHandler.getInstance(change);
for (ChatGptReplyItem replyItem : reviewJson.getReplies()) {
String reply = replyItem.getReply();
Integer score = replyItem.getScore();
@@ -134,7 +135,7 @@
"client.api.chatgpt.ChatGptClient", config);
registerDynamicClasses(ChatGptClientStateless.class);
- return chatGptClient.ask(config, change, patchSet);
+ return chatGptClient.ask(config, changeSetData, change, patchSet);
}
private Integer getReviewScore() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
index 9f953ce..8ae9ac8 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
@@ -1,39 +1,26 @@
package com.googlesource.gerrit.plugins.chatgpt.data;
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
-import com.googlesource.gerrit.plugins.chatgpt.data.singleton.ChangeSetSingletonManager;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt.ChatGptUserPrompt;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPermittedVotingRange;
-import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
import lombok.extern.slf4j.Slf4j;
import java.util.HashSet;
@Slf4j
public class ChangeSetDataHandler {
-
- public static ChangeSetData getNewInstance(Configuration config, GerritChange change, Integer gptAccountId) {
- return ChangeSetSingletonManager.getNewInstance(ChangeSetData.class, change,
- gptAccountId,
- config.getVotingMinScore(),
- config.getVotingMaxScore());
- }
-
- public static ChangeSetData getInstance(GerritChange change) {
- return ChangeSetSingletonManager.getInstance(ChangeSetData.class, change);
- }
-
- public static ChangeSetData getInstance(String changeId) {
- return getInstance(new GerritChange(changeId));
- }
-
- public static void update(Configuration config, GerritChange change, GerritClient gerritClient) {
- ChangeSetData changeSetData = getInstance(change);
+ public static void update(
+ Configuration config,
+ GerritChange change,
+ GerritClient gerritClient,
+ ChangeSetData changeSetData
+ ) {
GerritClientData gerritClientData = gerritClient.getClientData(change);
- ChatGptUserPrompt chatGptUserPrompt = new ChatGptUserPrompt(config, change, gerritClientData);
+ ChatGptUserPrompt chatGptUserPrompt = new ChatGptUserPrompt(config, changeSetData, change, gerritClientData);
changeSetData.setCommentPropertiesSize(gerritClientData.getCommentProperties().size());
changeSetData.setDirectives(new HashSet<>());
@@ -52,9 +39,4 @@
}
}
}
-
- public static void removeInstance(GerritChange change) {
- ChangeSetSingletonManager.removeInstance(ChangeSetData.class, change);
- }
-
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataProvider.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataProvider.java
new file mode 100644
index 0000000..6f3ac7c
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataProvider.java
@@ -0,0 +1,23 @@
+package com.googlesource.gerrit.plugins.chatgpt.data;
+
+import com.google.gerrit.server.account.AccountCache;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
+
+public class ChangeSetDataProvider implements Provider<ChangeSetData> {
+ private final int gptAccountId;
+ private final Configuration config;
+
+ @Inject
+ ChangeSetDataProvider(Configuration config, AccountCache accountCache) {
+ this.config = config;
+ this.gptAccountId = accountCache.getByUsername(config.getGerritUserName()).get().account().id().get();
+ }
+
+ @Override
+ public ChangeSetData get() {
+ return new ChangeSetData(gptAccountId, config.getVotingMinScore(), config.getVotingMaxScore());
+ }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/singleton/ChangeSetSingletonManager.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/singleton/ChangeSetSingletonManager.java
deleted file mode 100644
index d5b6d30..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/singleton/ChangeSetSingletonManager.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.googlesource.gerrit.plugins.chatgpt.data.singleton;
-
-import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
-
-public class ChangeSetSingletonManager {
- public static synchronized <T> T getNewInstance(Class<T> clazz, GerritChange change, Object... constructorArgs) {
- return SingletonManager.getNewInstance(clazz, getInstanceKey(clazz, change), constructorArgs);
- }
-
- public static synchronized <T> T getInstance(Class<T> clazz, GerritChange change, Object... constructorArgs) {
- return SingletonManager.getInstance(clazz, getInstanceKey(clazz, change), constructorArgs);
- }
-
- public static synchronized void removeInstance(Class<?> clazz, GerritChange change) {
- SingletonManager.removeInstance(clazz, getInstanceKey(clazz, change));
- }
-
- private static String getInstanceKey(Class<?> clazz, GerritChange change) {
- return clazz.getName() + ":" + change.getFullChangeId();
- }
-
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java
index 229d396..885736f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java
@@ -8,7 +8,6 @@
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.chatgpt.PatchSetReviewer;
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
-import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandler;
import com.googlesource.gerrit.plugins.chatgpt.data.ProjectDataHandler;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
@@ -39,6 +38,7 @@
private final Configuration config;
private final GerritClient gerritClient;
private final GitRepoFiles gitRepoFiles;
+ private final ChangeSetData changeSetData;
private final GerritChange change;
private final PatchSetReviewer reviewer;
private final PluginDataHandler pluginDataHandler;
@@ -46,12 +46,14 @@
@Inject
EventHandlerTask(
Configuration config,
+ ChangeSetData changeSetData,
GerritChange change,
PatchSetReviewer reviewer,
GerritClient gerritClient,
GitRepoFiles gitRepoFiles,
PluginDataHandler pluginDataHandler
) {
+ this.changeSetData = changeSetData;
this.change = change;
this.reviewer = reviewer;
this.gerritClient = gerritClient;
@@ -67,13 +69,10 @@
@VisibleForTesting
public Result execute() {
- Integer gptAccountId = gerritClient.getNotNullAccountId(change, config.getGerritUserName());
- ChangeSetData changeSetData = ChangeSetDataHandler.getNewInstance(config, change, gptAccountId);
GitRepoFilesHandler.createNewInstance(gitRepoFiles);
ProjectDataHandler.createNewInstance(pluginDataHandler);
if (!preProcessEvent(change, changeSetData)) {
- destroy(change);
return Result.NOT_SUPPORTED;
}
@@ -87,8 +86,6 @@
Thread.currentThread().interrupt();
}
return Result.FAILURE;
- } finally {
- destroy(change);
}
return Result.OK;
}
@@ -128,11 +125,6 @@
return true;
}
- private void destroy(GerritChange change) {
- log.info("destroying {}",change);
- ChangeSetDataHandler.removeInstance(change);
- }
-
private boolean isReviewEnabled(GerritChange change) {
List<String> enabledProjects = Splitter.on(",").omitEmptyStrings()
.splitToList(config.getEnabledProjects());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java
index b25d564..9baa8ef 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java
@@ -3,7 +3,11 @@
import com.google.gerrit.extensions.config.FactoryModule;
import com.google.gerrit.server.events.Event;
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataProvider;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
+
+import static com.google.inject.Scopes.SINGLETON;
public class GerritEventContextModule extends FactoryModule {
private final Event event;
@@ -18,5 +22,6 @@
protected void configure() {
bind(Configuration.class).toInstance(config);
bind(GerritChange.class).toInstance(new GerritChange(event));
+ bind(ChangeSetData.class).toProvider(ChangeSetDataProvider.class).in(SINGLETON);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java
index dedd320..e5b8548 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java
@@ -47,7 +47,7 @@
return gerritClientFacade.getFileDiffsProcessed();
}
- public Integer getNotNullAccountId(GerritChange change, String authorUsername) {
+ public Integer getNotNullAccountId(String authorUsername) {
return gerritClientFacade.getNotNullAccountId(authorUsername);
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
index cecebbb..9729c4a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
@@ -6,6 +6,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.messages.ClientMessage;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.CommentData;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
@@ -22,6 +23,7 @@
public class GerritClientComments extends GerritClientAccount {
private static final Integer MAX_SECS_GAP_BETWEEN_EVENT_AND_COMMENT = 2;
+ private final ChangeSetData changeSetData;
private final HashMap<String, GerritComment> commentMap;
private final HashMap<String, GerritComment> patchSetCommentMap;
@@ -29,8 +31,9 @@
@Getter
private List<GerritComment> commentProperties;
- public GerritClientComments(Configuration config) {
+ public GerritClientComments(Configuration config, ChangeSetData changeSetData) {
super(config);
+ this.changeSetData = changeSetData;
commentProperties = new ArrayList<>();
commentMap = new HashMap<>();
patchSetCommentMap = new HashMap<>();
@@ -104,7 +107,7 @@
}
private void addLastComments(GerritChange change) {
- ClientMessage clientMessage = new ClientMessage(config, change);
+ ClientMessage clientMessage = new ClientMessage(config, changeSetData, change);
try {
List<GerritComment> latestComments = retrieveComments(change);
if (latestComments == null) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java
index 03bc163..f67c82a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java
@@ -1,11 +1,11 @@
package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit;
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
-import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPatchSetDetail;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPermittedVotingRange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import lombok.extern.slf4j.Slf4j;
import java.net.URI;
@@ -16,9 +16,11 @@
@Slf4j
public class GerritClientDetail extends GerritClientBase {
private GerritPatchSetDetail gerritPatchSetDetail;
+ private final int gptAccountId;
- public GerritClientDetail(Configuration config) {
+ public GerritClientDetail(Configuration config, ChangeSetData changeSetData) {
super(config);
+ this.gptAccountId = changeSetData.getGptAccountId();
}
public List<GerritComment> getMessages(GerritChange change) {
@@ -32,7 +34,6 @@
}
public GerritPermittedVotingRange getPermittedVotingRange(GerritChange change) {
- int gptAccountId = ChangeSetDataHandler.getInstance(change).getGptAccountId();
loadPatchSetDetail(change);
List<GerritPatchSetDetail.Permission> permissions = gerritPatchSetDetail.getLabels().getCodeReview().getAll();
if (permissions == null) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java
index 0c253c1..0da1a4e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java
@@ -5,6 +5,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.ModeClassLoader;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPermittedVotingRange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.gerrit.GerritClientPatchSetStateless;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit.GerritClientPatchSetStateful;
@@ -17,17 +18,19 @@
@Slf4j
public class GerritClientFacade {
+ private final ChangeSetData changeSetData;
private final GerritClientDetail gerritClientDetail;
private final IGerritClientPatchSet gerritClientPatchSet;
private final GerritClientComments gerritClientComments;
@Inject
- public GerritClientFacade(Configuration config) {
- gerritClientDetail = new GerritClientDetail(config);
+ public GerritClientFacade(Configuration config, ChangeSetData changeSetData) {
+ gerritClientDetail = new GerritClientDetail(config, changeSetData);
gerritClientPatchSet = (IGerritClientPatchSet) ModeClassLoader.getInstance(
"client.api.gerrit.GerritClientPatchSet", config, config);
+ this.changeSetData = changeSetData;
registerDynamicClasses(GerritClientPatchSetStateless.class, GerritClientPatchSetStateful.class);
- gerritClientComments = new GerritClientComments(config);
+ gerritClientComments = new GerritClientComments(config, changeSetData);
}
public GerritPermittedVotingRange getPermittedVotingRange(GerritChange change) {
@@ -35,7 +38,7 @@
}
public String getPatchSet(GerritChange change) throws Exception {
- return gerritClientPatchSet.getPatchSet(change);
+ return gerritClientPatchSet.getPatchSet(changeSetData, change);
}
public boolean isDisabledUser(String authorUsername) {
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 a30bc85..bbb8bfc 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
@@ -4,6 +4,7 @@
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
@@ -34,12 +35,12 @@
}
}
- protected int getChangeSetRevisionBase(GerritChange change) {
- return isChangeSetBased(change) ? 0 : revisionBase;
+ protected int getChangeSetRevisionBase(ChangeSetData changeSetData) {
+ return isChangeSetBased(changeSetData) ? 0 : revisionBase;
}
- private boolean isChangeSetBased(GerritChange change) {
- return !ChangeSetDataHandler.getInstance(change).getForcedReviewLastPatchSet();
+ private boolean isChangeSetBased(ChangeSetData changeSetData) {
+ return !changeSetData.getForcedReviewLastPatchSet();
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
index baf4373..43edc62 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
@@ -52,9 +52,9 @@
@Getter
private boolean containingHistoryCommand;
- public ClientCommands(GerritChange change) {
- changeSetData = ChangeSetDataHandler.getInstance(change);
- directives = new Directives(change);
+ public ClientCommands(ChangeSetData changeSetData, GerritChange change) {
+ this.changeSetData = changeSetData;
+ directives = new Directives(changeSetData);
containingHistoryCommand = false;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
index a3b0bfc..8e3a0bf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
@@ -4,6 +4,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.ClientBase;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.commands.ClientCommands;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
@@ -21,14 +22,14 @@
@Getter
private String message;
- public ClientMessage(Configuration config, GerritChange change) {
+ public ClientMessage(Configuration config, ChangeSetData changeSetData, GerritChange change) {
super(config);
botMentionPattern = getBotMentionPattern();
- clientCommands = new ClientCommands(change);
+ clientCommands = new ClientCommands(changeSetData, change);
}
- public ClientMessage(Configuration config, GerritChange change, String message) {
- this(config, change);
+ public ClientMessage(Configuration config, ChangeSetData changeSetData, GerritChange change, String message) {
+ this(config, changeSetData, change);
this.message = message;
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
index ea7ef6e..59e9a89 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
@@ -6,23 +6,24 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.messages.ClientMessage;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ChatGptComment extends ClientBase {
protected ClientMessage commentMessage;
- private final Integer gptAccountId;
private final GerritChange change;
+ private final ChangeSetData changeSetData;
- public ChatGptComment(Configuration config, GerritChange change) {
+ public ChatGptComment(Configuration config, ChangeSetData changeSetData, GerritChange change) {
super(config);
this.change = change;
- gptAccountId = ChangeSetDataHandler.getInstance(change).getGptAccountId();
+ this.changeSetData = changeSetData;
}
protected String getCleanedMessage(GerritComment commentProperty) {
- commentMessage = new ClientMessage(config, change, commentProperty.getMessage());
+ commentMessage = new ClientMessage(config, changeSetData, change, commentProperty.getMessage());
if (isFromAssistant(commentProperty)) {
commentMessage.removeDebugMessages();
}
@@ -33,7 +34,7 @@
}
protected boolean isFromAssistant(GerritComment commentProperty) {
- return commentProperty.getAuthor().getAccountId() == gptAccountId;
+ return commentProperty.getAuthor().getAccountId() == changeSetData.getGptAccountId();
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
index b5eb5ec..b2b50e3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
@@ -4,6 +4,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.CommentData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
import com.googlesource.gerrit.plugins.chatgpt.settings.Settings;
@@ -30,8 +31,8 @@
private boolean filterActive;
- public ChatGptHistory(Configuration config, GerritChange change, GerritClientData gerritClientData) {
- super(config, change);
+ public ChatGptHistory(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
+ super(config, changeSetData, change);
CommentData commentData = gerritClientData.getCommentData();
commentMap = commentData.getCommentMap();
patchSetCommentMap = commentData.getPatchSetCommentMap();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
index 244899c..5a4b3aa 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
@@ -3,6 +3,7 @@
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
import lombok.extern.slf4j.Slf4j;
@@ -14,12 +15,12 @@
public class ChatGptUserPrompt {
private final ChatGptUserPromptBase chatGptUserPromptBase;
- public ChatGptUserPrompt(Configuration config, GerritChange change, GerritClientData gerritClientData) {
+ public ChatGptUserPrompt(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
if (change.getIsCommentEvent()) {
- chatGptUserPromptBase = new ChatGptUserPromptRequests(config, change, gerritClientData);
+ chatGptUserPromptBase = new ChatGptUserPromptRequests(config, changeSetData, change, gerritClientData);
}
else {
- chatGptUserPromptBase = new ChatGptUserPromptReview(config, change, gerritClientData);
+ chatGptUserPromptBase = new ChatGptUserPromptReview(config, changeSetData, change, gerritClientData);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
index 6c273a8..78482dc 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
@@ -7,6 +7,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.CommentData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
import lombok.Getter;
@@ -28,11 +29,11 @@
@Getter
protected List<GerritComment> commentProperties;
- public ChatGptUserPromptBase(Configuration config, GerritChange change, GerritClientData gerritClientData) {
+ public ChatGptUserPromptBase(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
this.gerritClientData = gerritClientData;
fileDiffsProcessed = gerritClientData.getFileDiffsProcessed();
commentData = gerritClientData.getCommentData();
- gptMessageHistory = new ChatGptHistory(config, change, gerritClientData);
+ gptMessageHistory = new ChatGptHistory(config, changeSetData, change, gerritClientData);
messageItems = new ArrayList<>();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
index 2b4fdf1..1cde7c5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
@@ -4,6 +4,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
import lombok.extern.slf4j.Slf4j;
@@ -11,8 +12,8 @@
@Slf4j
public class ChatGptUserPromptRequests extends ChatGptUserPromptBase {
- public ChatGptUserPromptRequests(Configuration config, GerritChange change, GerritClientData gerritClientData) {
- super(config, change, gerritClientData);
+ public ChatGptUserPromptRequests(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
+ super(config, changeSetData, change, gerritClientData);
commentProperties = commentData.getCommentProperties();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
index 0baea6c..7c87b63 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
@@ -4,6 +4,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData;
import lombok.extern.slf4j.Slf4j;
@@ -12,8 +13,8 @@
@Slf4j
public class ChatGptUserPromptReview extends ChatGptUserPromptBase {
- public ChatGptUserPromptReview(Configuration config, GerritChange change, GerritClientData gerritClientData) {
- super(config, change, gerritClientData);
+ public ChatGptUserPromptReview(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) {
+ super(config, changeSetData, change, gerritClientData);
commentProperties = new ArrayList<>(commentData.getCommentMap().values());
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java
index 6abcfd4..a714013 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java
@@ -1,15 +1,13 @@
package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt;
-import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler;
-import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
public class Directives {
private final ChangeSetData changeSetData;
private String directive;
- public Directives(GerritChange change) {
- changeSetData = ChangeSetDataHandler.getInstance(change);
+ public Directives(ChangeSetData changeSetData) {
+ this.changeSetData = changeSetData;
}
public void addDirective(String directive) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java
index 4c307ed..c13e410 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java
@@ -2,9 +2,10 @@
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
public interface IChatGptClient {
- String ask(Configuration config, String changeId, String patchSet) throws Exception;
- String ask(Configuration config, GerritChange change, String patchSet) throws Exception;
+ String ask(Configuration config, ChangeSetData changeSetData, String changeId, String patchSet) throws Exception;
+ String ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) throws Exception;
String getRequestBody();
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java
index 38dfc60..829b66c 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java
@@ -2,11 +2,12 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import java.util.HashMap;
public interface IGerritClientPatchSet {
- String getPatchSet(GerritChange change) throws Exception;
+ String getPatchSet(ChangeSetData changeSetData, GerritChange gerritChange) throws Exception;
boolean isDisabledUser(String authorUsername);
boolean isDisabledTopic(String topic);
void retrieveRevisionBase(GerritChange change);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
index 9e72e98..f409fb5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
@@ -3,6 +3,7 @@
import com.google.inject.Singleton;
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient;
import lombok.extern.slf4j.Slf4j;
@@ -10,13 +11,13 @@
@Singleton
public class ChatGptClientStateful implements IChatGptClient {
@Override
- public String ask(Configuration config, String changeId, String patchSet) throws Exception {
+ public String ask(Configuration config, ChangeSetData changeSetData, String changeId, String patchSet) throws Exception {
// Placeholder implementation, change to actual logic later.
throw new UnsupportedOperationException("Method not implemented yet.");
}
@Override
- public String ask(Configuration config, GerritChange change, String patchSet) throws Exception {
+ public String ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) throws Exception {
// Placeholder implementation, change to actual logic later.
throw new UnsupportedOperationException("Method not implemented yet.");
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
index 1336685..e563337 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
@@ -1,6 +1,7 @@
package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit;
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.chatgpt.ChatGptAssistant;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientPatchSet;
@@ -14,7 +15,7 @@
super(config);
}
- public String getPatchSet(GerritChange change) {
+ public String getPatchSet(ChangeSetData changeSetData, GerritChange change) {
ChatGptAssistant chatGptAssistant = new ChatGptAssistant(config, change);
chatGptAssistant.setupAssistant();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
index ef2fa20..b8f9d85 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
@@ -7,6 +7,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.http.HttpClientWithRetry;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.*;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.UriResourceLocatorStateless;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.prompt.ChatGptPromptStateless;
@@ -37,9 +38,9 @@
private boolean isCommentEvent = false;
@Override
- public String ask(Configuration config, String changeId, String patchSet) throws Exception {
+ public String ask(Configuration config, ChangeSetData changeSetData, String changeId, String patchSet) throws Exception {
for (int attemptInd = 0; attemptInd < REVIEW_ATTEMPT_LIMIT; attemptInd++) {
- HttpRequest request = createRequest(config, changeId, patchSet);
+ HttpRequest request = createRequest(config, changeSetData, patchSet);
log.debug("ChatGPT request: {}", request.toString());
HttpResponse<String> response = httpClientWithRetry.execute(request);
@@ -59,10 +60,10 @@
}
@Override
- public String ask(Configuration config, GerritChange change, String patchSet) throws Exception {
+ public String ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) throws Exception {
isCommentEvent = change.getIsCommentEvent();
- return this.ask(config, change.getFullChangeId(), patchSet);
+ return this.ask(config, changeSetData, change.getFullChangeId(), patchSet);
}
private String extractContent(Configuration config, String body) throws Exception {
@@ -101,10 +102,10 @@
return toolCalls.get(0).getFunction().getArguments();
}
- private HttpRequest createRequest(Configuration config, String changeId, String patchSet) {
+ private HttpRequest createRequest(Configuration config, ChangeSetData changeSetData, String patchSet) {
URI uri = URI.create(config.getGptDomain() + UriResourceLocatorStateless.chatCompletionsUri());
log.debug("ChatGPT request URI: {}", uri);
- requestBody = createRequestBody(config, changeId, patchSet);
+ requestBody = createRequestBody(config, changeSetData, patchSet);
log.debug("ChatGPT request body: {}", requestBody);
return HttpRequest.newBuilder()
@@ -115,7 +116,7 @@
.build();
}
- private String createRequestBody(Configuration config, String changeId, String patchSet) {
+ private String createRequestBody(Configuration config, ChangeSetData changeSetData, String patchSet) {
ChatGptPromptStateless chatGptPromptStateless = new ChatGptPromptStateless(config, isCommentEvent);
ChatGptRequestMessage systemMessage = ChatGptRequestMessage.builder()
.role("system")
@@ -123,7 +124,7 @@
.build();
ChatGptRequestMessage userMessage = ChatGptRequestMessage.builder()
.role("user")
- .content(chatGptPromptStateless.getGptUserPrompt(patchSet, changeId))
+ .content(chatGptPromptStateless.getGptUserPrompt(changeSetData, patchSet))
.build();
ChatGptParameters chatGptParameters = new ChatGptParameters(config, isCommentEvent);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java
index b22de58..a843172 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java
@@ -8,6 +8,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPatchSetFileDiff;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritReviewFileDiff;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.gerrit.IGerritClientPatchSet;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.UriResourceLocatorStateless;
import lombok.extern.slf4j.Slf4j;
@@ -30,8 +31,8 @@
diffs = new ArrayList<>();
}
- public String getPatchSet(GerritChange change) throws Exception {
- int revisionBase = getChangeSetRevisionBase(change);
+ public String getPatchSet(ChangeSetData changeSetData, GerritChange change) throws Exception {
+ int revisionBase = getChangeSetRevisionBase(changeSetData);
log.debug("Revision base: {}", revisionBase);
List<String> files = getAffectedFiles(change.getFullChangeId(), revisionBase);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java
index 3aa4621..484ba0d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java
@@ -50,9 +50,8 @@
return concatenate(prompt);
}
- public String getGptUserPrompt(String patchSet, String changeId) {
+ public String getGptUserPrompt(ChangeSetData changeSetData, String patchSet) {
List<String> prompt = new ArrayList<>();
- ChangeSetData changeSetData = ChangeSetDataHandler.getInstance(changeId);
String gptRequestUserPrompt = changeSetData.getGptRequestUserPrompt();
boolean isValidRequestUserPrompt = gptRequestUserPrompt != null && !gptRequestUserPrompt.isEmpty();
if (isCommentEvent && isValidRequestUserPrompt) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
index 5f73c4d..c63ec7e 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
@@ -5,9 +5,12 @@
import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder;
import com.github.tomakehurst.wiremock.verification.LoggedRequest;
import com.google.common.net.HttpHeaders;
+import com.google.gerrit.entities.Account;
import com.google.gerrit.entities.BranchNameKey;
import com.google.gerrit.entities.Change;
import com.google.gerrit.entities.Project;
+import com.google.gerrit.server.account.AccountCache;
+import com.google.gerrit.server.account.AccountState;
import com.google.gerrit.server.config.PluginConfig;
import com.google.gerrit.server.data.AccountAttribute;
import com.google.gerrit.server.data.PatchSetAttribute;
@@ -29,6 +32,7 @@
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientFacade;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.git.GitRepoFiles;
import lombok.NonNull;
import org.apache.http.entity.ContentType;
@@ -43,13 +47,17 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.time.Instant;
+import java.util.Collections;
import java.util.List;
+import java.util.Optional;
import java.util.function.Consumer;
import static com.google.gerrit.extensions.client.ChangeKind.REWORK;
import static com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator.*;
import static com.googlesource.gerrit.plugins.chatgpt.utils.GsonUtils.getGson;
import static java.net.HttpURLConnection.HTTP_OK;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -71,6 +79,7 @@
protected static final BranchNameKey BRANCH_NAME = BranchNameKey.create(PROJECT_NAME, "myBranchName");
protected static final boolean GPT_STREAM_OUTPUT = true;
protected static final long TEST_TIMESTAMP = 1699270812;
+ private static final int GPT_USER_ACCOUNT_ID = 1000000;
@Rule
public WireMockRule wireMockRule = new WireMockRule(9527);
@@ -216,6 +225,7 @@
bind(ConfigCreator.class).toInstance(mockConfigCreator);
bind(PatchSetReviewer.class).toInstance(patchSetReviewer);
bind(PluginDataHandler.class).toInstance(pluginDataHandler);
+ bind(AccountCache.class).toInstance(mockAccountCache());
}
}).getInstance(EventHandlerTask.class);
return task.execute();
@@ -232,8 +242,9 @@
}
private void initTest () throws NoSuchProjectException {
- gerritClient = new GerritClient(new GerritClientFacade(config));
- patchSetReviewer = new PatchSetReviewer(gerritClient, config);
+ ChangeSetData changeSetData = new ChangeSetData(GPT_USER_ACCOUNT_ID, config.getVotingMinScore(), config.getMaxReviewFileSize());
+ gerritClient = new GerritClient(new GerritClientFacade(config, changeSetData));
+ patchSetReviewer = new PatchSetReviewer(gerritClient, config, changeSetData);
mockConfigCreator = mock(ConfigCreator.class);
}
@@ -280,4 +291,12 @@
when(event.getChangeKey()).thenReturn(CHANGE_ID);
}
+ private AccountCache mockAccountCache() {
+ AccountCache accountCache = mock(AccountCache.class);
+ Account account = Account.builder(Account.id(GPT_USER_ACCOUNT_ID), Instant.now()).build();
+ AccountState accountState = AccountState.forAccount(account, Collections.emptyList());
+ doReturn(Optional.of(accountState)).when(accountCache).getByUsername(GERRIT_GPT_USERNAME);
+
+ return accountCache;
+ }
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
index 77baa74..854de47 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
@@ -3,6 +3,7 @@
import com.googlesource.gerrit.plugins.chatgpt.config.Configuration;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientReview;
+import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData;
import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.review.ReviewBatch;
import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient;
import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.prompt.ChatGptPromptStateless;
@@ -36,13 +37,14 @@
@Test
public void sayHelloToGPT() throws Exception {
+ ChangeSetData changeSetData = new ChangeSetData(1, config.getVotingMinScore(), config.getMaxReviewFileSize());
ChatGptPromptStateless chatGptPromptStateless = new ChatGptPromptStateless(config, true);
when(config.getGptDomain()).thenReturn(Configuration.OPENAI_DOMAIN);
when(config.getGptToken()).thenReturn("Your GPT token");
when(config.getGptModel()).thenReturn(Configuration.DEFAULT_GPT_MODEL);
when(chatGptPromptStateless.getGptSystemPrompt()).thenReturn(ChatGptPromptStateless.DEFAULT_GPT_SYSTEM_PROMPT);
- String answer = chatGptClient.ask(config, "", "hello");
+ String answer = chatGptClient.ask(config, changeSetData, "", "hello");
log.info("answer: {}", answer);
assertNotNull(answer);
}