Fix plugin names having hyphens
Any maven based plugin builds that had hyphens in the
names where being truncated to the first hyphen.
e.g. ai-code-review, was "ai" leading to incorrect names
and duplicated entries upon installation.
Replacing indexOf with lastIndexOf, to take everything up
to the version number.
N.B.Version numbers cannot contain suffix information like
-SNAPSHOT, or -rc0 for maven builds.
Bug: Issue 417683832
Change-Id: I1a206635499a2977dcc49503bd300b96fda6bffa
diff --git a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
index 192bbe5..d84eda5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/manager/repository/JenkinsCiPluginsRepository.java
@@ -16,6 +16,7 @@
import static java.nio.charset.StandardCharsets.UTF_8;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.flogger.FluentLogger;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
@@ -261,10 +262,11 @@
}
}
- private String fixPluginNameForMavenBuilds(String[] pluginPathParts) {
+ @VisibleForTesting
+ static String fixPluginNameForMavenBuilds(String[] pluginPathParts) {
String mavenPluginFilename =
StringUtils.substringBeforeLast(pluginPathParts[pluginPathParts.length - 1], ".");
- int versionDelim = mavenPluginFilename.indexOf('-');
+ int versionDelim = mavenPluginFilename.lastIndexOf('-');
return versionDelim > 0 ? mavenPluginFilename.substring(0, versionDelim) : mavenPluginFilename;
}
@@ -292,7 +294,8 @@
return pluginJsParts[filePos].substring(0, jsExtPos);
}
- private boolean isMavenBuild(String[] pluginPathParts) {
+ @VisibleForTesting
+ static boolean isMavenBuild(String[] pluginPathParts) {
return pluginPathParts[pluginPathParts.length - 2].equals("target");
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/manager/repository/PluginsCheckMavenNamingTest.java b/src/test/java/com/googlesource/gerrit/plugins/manager/repository/PluginsCheckMavenNamingTest.java
new file mode 100644
index 0000000..5d52844
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/manager/repository/PluginsCheckMavenNamingTest.java
@@ -0,0 +1,43 @@
+package com.googlesource.gerrit.plugins.manager.repository;
+
+import java.util.Arrays;
+import org.junit.Test;
+import static com.google.common.truth.Truth.assertThat;
+import static com.googlesource.gerrit.plugins.manager.repository.JenkinsCiPluginsRepository.fixPluginNameForMavenBuilds;
+import static com.googlesource.gerrit.plugins.manager.repository.JenkinsCiPluginsRepository.isMavenBuild;
+
+
+// Class, to assist is checking the maven plugin naming functions.
+//
+// - fixPluginNameForMavenBuilds
+// - isMavenBuild.
+//
+public class PluginsCheckMavenNamingTest {
+
+ @Test
+ public void checkIsMavenBuildDetectionTrue(){
+ String [] pluginPathParts = {"target", "ai-code-review-3.1.0.jar"};
+ assertThat(isMavenBuild(pluginPathParts)).isTrue();
+ }
+ @Test
+ public void checkIsMavenBuildDetectionFalse(){
+ String [] pluginPathParts = {"bazel-bin", "plugins", "git-refs-filter.jar"};
+ assertThat(isMavenBuild(pluginPathParts)).isFalse();
+ }
+
+ @Test
+ public void checkMavenBuildNameCorrectionWorks_SimpleName(){
+ String [] pluginPathParts = {"target", "maintainer-3.10.0.jar"};
+ assertThat(isMavenBuild(pluginPathParts)).isTrue();
+ assertThat(fixPluginNameForMavenBuilds(pluginPathParts)).isEqualTo("maintainer");
+ }
+
+ @Test
+ public void checkMavenBuildNameCorrectionWorks_NameWithHyphens(){
+ // This test ensures that we dont get the incorrect name being returned as "ai".
+ String [] pluginPathParts = {"target", "ai-code-review-1.0.0.jar"};
+ assertThat(isMavenBuild(pluginPathParts)).isTrue();
+ assertThat(fixPluginNameForMavenBuilds(pluginPathParts)).isEqualTo("ai-code-review");
+ }
+
+}