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"); + } + +}