diff --git a/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java b/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java index bcfe0bd3..0fdf678d 100644 --- a/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java +++ b/plugin-management-cli/src/main/java/io/jenkins/tools/pluginmanager/cli/CliOptions.java @@ -269,11 +269,14 @@ private String getJenkinsWar() { * * @return list of plugins representing user-specified input */ + + @SuppressFBWarnings(value = {"PATH_TRAVERSAL_IN"}, justification = "User provided values for running the program.") private List getPlugins() { PluginListParser pluginParser = new PluginListParser(verbose); List requestedPlugins = new ArrayList<>(pluginParser.parsePluginsFromCliOption(plugins)); File pluginFile = getPluginFile(); + if (pluginFile != null) { if (isFileExtension(pluginFile, "yaml", "yml")) { requestedPlugins.addAll(pluginParser.parsePluginYamlFile(pluginFile)); @@ -283,7 +286,29 @@ private List getPlugins() { throw new PluginInputException("Unknown file type, file must have .yaml/.yml or .txt extension"); } } - return requestedPlugins; + List pluginFileNames = new ArrayList<>(); + + File dr = new File(String.valueOf(pluginDir)); + + File[] directoryListing = dr.listFiles(); + if (directoryListing != null) { + for (File child : directoryListing) { + if (child.isFile()) { + pluginFileNames.add(child.getAbsoluteFile().getName()); + } + } + } + for(Plugin plugin: requestedPlugins){ + + for(String names:pluginFileNames) { + if (names.contains(plugin.getName())) { + logVerbose("Plugin " + plugin.getName() + " is already present in the dir"); + } + } + } + + return requestedPlugins; + } /** diff --git a/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java b/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java index ab63e0f8..f424618b 100644 --- a/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java +++ b/plugin-management-cli/src/test/java/io/jenkins/tools/pluginmanager/cli/CliOptionsTest.java @@ -41,6 +41,7 @@ public class CliOptionsTest { @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Before public void createParser() { options = new CliOptions(); @@ -383,4 +384,24 @@ private void assertConfigHasPlugins(Config cfg, List expectedPlugins) { Plugin[] expectedPluginsAsArray = expectedPlugins.toArray(new Plugin[0]); assertThat(cfg.getPlugins()).containsExactlyInAnyOrder(expectedPluginsAsArray); } + + @Test + public void verboseEnabledContainingPluginInformation() throws Exception{ + + String jenkinsWar = this.getClass().getResource("/jenkinstest.war").toString(); + + parser.parseArgument("--war", jenkinsWar); + + String pluginDir = temporaryFolder.newFolder("plugins").toString(); + + parser.parseArgument("--war",jenkinsWar,"--plugin-download-directory",pluginDir,"--plugins","delivery-pipeline-plugin:1.3.2 deployit-plugin","--verbose"); + + String stdOut = tapSystemOutNormalized(() -> { + Config cfg = options.setup(); + }); + + assertThat(stdOut).isEmpty(); + + } + } diff --git a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/util/PluginListParser.java b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/util/PluginListParser.java index 824fbbb6..015449f0 100644 --- a/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/util/PluginListParser.java +++ b/plugin-management-library/src/main/java/io/jenkins/tools/pluginmanager/util/PluginListParser.java @@ -71,6 +71,8 @@ public List parsePluginTxtFile(File pluginTxtFile) { return pluginsFromTxt; } + + /** * Given a Jenkins yaml file with a plugins root element, will parse the yaml file and create a list of requested * plugins