From 230ac848ebd72ff476d925a7b03fbf0d4b447580 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Tue, 20 Aug 2019 16:39:50 +0200 Subject: [PATCH 01/15] ignore old plugins folder --- .../src/main/java/sonia/scm/plugin/PluginProcessor.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java index b91ee9b1ee..0613f4ef07 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java @@ -60,6 +60,8 @@ import java.util.Date; import java.util.List; import java.util.Set; +import static java.util.stream.Collectors.toList; + //~--- JDK imports ------------------------------------------------------------ /** @@ -171,7 +173,11 @@ public final class PluginProcessor extract(archives); - List dirs = collectPluginDirectories(pluginDirectory); + List dirs = + collectPluginDirectories(pluginDirectory) + .stream() + .filter(dir -> !dir.endsWith("sonia.scm.plugins")) + .collect(toList()); logger.debug("process {} directories: {}", dirs.size(), dirs); From 72fe69b2d55ef8b177344404026719cabb6482d7 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Wed, 21 Aug 2019 10:34:40 +0200 Subject: [PATCH 02/15] add new IllegalIdentifierChangeException --- .../scm/IllegalIdentifierChangeException.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 scm-core/src/main/java/sonia/scm/IllegalIdentifierChangeException.java diff --git a/scm-core/src/main/java/sonia/scm/IllegalIdentifierChangeException.java b/scm-core/src/main/java/sonia/scm/IllegalIdentifierChangeException.java new file mode 100644 index 0000000000..63b9d0d4fc --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/IllegalIdentifierChangeException.java @@ -0,0 +1,21 @@ +package sonia.scm; + +import java.util.Collections; + +public class IllegalIdentifierChangeException extends BadRequestException { + + private static final String CODE = "thbsUFokjk"; + + public IllegalIdentifierChangeException(ContextEntry.ContextBuilder context, String message) { + super(context.build(), message); + } + + public IllegalIdentifierChangeException(String message) { + super(Collections.emptyList(), message); + } + + @Override + public String getCode() { + return CODE; + } +} From 7a29bba3398c52cd0ed0947edb1ef185e78a6d54 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Wed, 21 Aug 2019 10:36:48 +0200 Subject: [PATCH 03/15] use new IllegalIdentifierChangeException in SingleResourceManagerAdapter --- .../scm/api/v2/resources/SingleResourceManagerAdapter.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java index a7b9146d00..76371a0b54 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java @@ -2,6 +2,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; import sonia.scm.ConcurrentModificationException; +import sonia.scm.IllegalIdentifierChangeException; import sonia.scm.Manager; import sonia.scm.ModelObject; import sonia.scm.NotFoundException; @@ -11,8 +12,6 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; -import static javax.ws.rs.core.Response.Status.BAD_REQUEST; - /** * Adapter from resource http endpoints to managers, for Single resources (e.g. {@code /user/name}). * @@ -55,7 +54,7 @@ class SingleResourceManagerAdapter Date: Tue, 27 Aug 2019 08:52:38 +0200 Subject: [PATCH 04/15] pluginprocessor only consider directories that contains plugin.xml --- .../src/main/java/sonia/scm/plugin/PluginProcessor.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java index 0613f4ef07..6f1b18034e 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java @@ -59,6 +59,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Set; +import java.util.function.Predicate; import static java.util.stream.Collectors.toList; @@ -176,7 +177,7 @@ public final class PluginProcessor List dirs = collectPluginDirectories(pluginDirectory) .stream() - .filter(dir -> !dir.endsWith("sonia.scm.plugins")) + .filter(isPluginDirectory()) .collect(toList()); logger.debug("process {} directories: {}", dirs.size(), dirs); @@ -200,6 +201,10 @@ public final class PluginProcessor return ImmutableSet.copyOf(wrappers); } + private Predicate isPluginDirectory() { + return dir -> new File(dir.resolve("META-INF/scm/plugin.xml").toString()).exists(); + } + /** * Method description * From ca71326cb95107e5e49d1069aeaab95937c264cd Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Tue, 27 Aug 2019 11:07:19 +0200 Subject: [PATCH 05/15] redirect collection urls to add trailing slashes so that pagination works --- scm-ui/src/containers/Main.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/scm-ui/src/containers/Main.js b/scm-ui/src/containers/Main.js index 8c05578b6b..c6c5e30edb 100644 --- a/scm-ui/src/containers/Main.js +++ b/scm-ui/src/containers/Main.js @@ -1,16 +1,16 @@ //@flow import React from "react"; -import {Redirect, Route, Switch, withRouter} from "react-router-dom"; -import type {Links} from "@scm-manager/ui-types"; +import { Redirect, Route, Switch, withRouter } from "react-router-dom"; +import type { Links } from "@scm-manager/ui-types"; import Overview from "../repos/containers/Overview"; import Users from "../users/containers/Users"; import Login from "../containers/Login"; import Logout from "../containers/Logout"; -import {ProtectedRoute} from "@scm-manager/ui-components"; -import {binder, ExtensionPoint} from "@scm-manager/ui-extensions"; +import { ProtectedRoute } from "@scm-manager/ui-components"; +import { binder, ExtensionPoint } from "@scm-manager/ui-extensions"; import CreateUser from "../users/containers/CreateUser"; import SingleUser from "../users/containers/SingleUser"; @@ -34,7 +34,7 @@ class Main extends React.Component { render() { const { authenticated, links } = this.props; const redirectUrlFactory = binder.getExtension("main.redirect", this.props); - let url = "/repos"; + let url = "/repos/"; if (redirectUrlFactory) { url = redirectUrlFactory(this.props); } @@ -44,9 +44,10 @@ class Main extends React.Component { + @@ -67,9 +68,10 @@ class Main extends React.Component { component={RepositoryRoot} authenticated={authenticated} /> + @@ -89,10 +91,10 @@ class Main extends React.Component { path="/user/:name" component={SingleUser} /> - + From c5ab0aaab34e00767fdbd7ae27d4306bed73adb6 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Tue, 27 Aug 2019 11:09:53 +0200 Subject: [PATCH 06/15] fix repos redirect --- scm-ui/src/containers/Main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/src/containers/Main.js b/scm-ui/src/containers/Main.js index c6c5e30edb..5e982652e8 100644 --- a/scm-ui/src/containers/Main.js +++ b/scm-ui/src/containers/Main.js @@ -44,7 +44,7 @@ class Main extends React.Component { - + Date: Tue, 27 Aug 2019 11:41:36 +0000 Subject: [PATCH 07/15] Close branch bugfix/redirect_collection_links From b36c2dd698f14d5e951e41870ca2dada2c6d8300 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 27 Aug 2019 13:59:14 +0200 Subject: [PATCH 08/15] use nio api and added test for plugin directory check --- .../main/java/sonia/scm/plugin/PluginProcessor.java | 3 ++- .../java/sonia/scm/plugin/PluginProcessorTest.java | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java index 6f1b18034e..5588349cc8 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java @@ -71,6 +71,7 @@ import static java.util.stream.Collectors.toList; * * TODO don't mix nio and io */ +@SuppressWarnings("squid:S3725") // performance is not critical, for this type of checks public final class PluginProcessor { @@ -202,7 +203,7 @@ public final class PluginProcessor } private Predicate isPluginDirectory() { - return dir -> new File(dir.resolve("META-INF/scm/plugin.xml").toString()).exists(); + return dir -> Files.exists(dir.resolve(DIRECTORY_METAINF).resolve("scm").resolve("plugin.xml")); } /** diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java index 87e9cbf7b7..e9eaea3afa 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java @@ -134,6 +134,16 @@ public class PluginProcessorTest assertThat(plugin.getId(), is(PLUGIN_A.id)); } + @Test + public void shouldCollectPluginsAndDoNotFailOnNonPluginDirectories() throws IOException { + new File(pluginDirectory, "some-directory").mkdirs(); + + copySmp(PLUGIN_A); + PluginWrapper plugin = collectAndGetFirst(); + + assertThat(plugin.getId(), is(PLUGIN_A.id)); + } + /** * Method description * From 3cd1cdfa4f6bf3efd002e40a31d8b7da4d9987eb Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 27 Aug 2019 12:30:25 +0000 Subject: [PATCH 09/15] Close branch bugfix/ignore_old_plugin_dir From c42b3cca0c281673e1804342110c83eb00ccc396 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 27 Aug 2019 13:16:39 +0000 Subject: [PATCH 10/15] Close branch bugfix/ci_status_validation From 79037afdf8a6ba91b070801b25eec0b5379fbdb8 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 27 Aug 2019 15:20:38 +0200 Subject: [PATCH 11/15] update maven-deploy-plugin from 2.7 to 2.8.2 --- pom.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3166c6ec75..3ab3cb82a3 100644 --- a/pom.xml +++ b/pom.xml @@ -439,6 +439,13 @@ smp-maven-plugin 1.0.0-alpha-6 + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + @@ -633,7 +640,6 @@ org.apache.maven.plugins maven-deploy-plugin - 2.7 From 769207c2c15af17b6a894333adf439700bdbd99b Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 27 Aug 2019 15:33:30 +0200 Subject: [PATCH 12/15] fixed compilation error --- .../src/test/java/sonia/scm/plugin/PluginProcessorTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java index dc5a9add68..bb518ec731 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java @@ -139,7 +139,7 @@ public class PluginProcessorTest new File(pluginDirectory, "some-directory").mkdirs(); copySmp(PLUGIN_A); - PluginWrapper plugin = collectAndGetFirst(); + InstalledPlugin plugin = collectAndGetFirst(); assertThat(plugin.getId(), is(PLUGIN_A.id)); } From 6bd9e0e7dd44d69d186d3bd36e289526b7657245 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Thu, 29 Aug 2019 13:47:28 +0200 Subject: [PATCH 13/15] Add messages for IllegalIdentifierChangeException --- scm-webapp/src/main/resources/locales/de/plugins.json | 4 ++++ scm-webapp/src/main/resources/locales/en/plugins.json | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/scm-webapp/src/main/resources/locales/de/plugins.json b/scm-webapp/src/main/resources/locales/de/plugins.json index 92b81c5772..bf534dc138 100644 --- a/scm-webapp/src/main/resources/locales/de/plugins.json +++ b/scm-webapp/src/main/resources/locales/de/plugins.json @@ -167,6 +167,10 @@ "CHRM7IQzo1": { "displayName": "Änderung fehlgeschlagen", "description": "Die Änderung ist fehlgeschlagen. Bitte wenden Sie sich an ihren Administrator für weitere Hinweise." + }, + "thbsUFokjk": { + "displayName": "Unerlaubte Änderung eines Schlüsselwerts", + "description": "Ein Schlüsselwert wurde unerlaubterweise geändert." } }, "namespaceStrategies": { diff --git a/scm-webapp/src/main/resources/locales/en/plugins.json b/scm-webapp/src/main/resources/locales/en/plugins.json index 3f70000624..471da10159 100644 --- a/scm-webapp/src/main/resources/locales/en/plugins.json +++ b/scm-webapp/src/main/resources/locales/en/plugins.json @@ -167,6 +167,10 @@ "CHRM7IQzo1": { "displayName": "Change failed", "description": "The change failed. Please contact your administrator for further assistance." + }, + "thbsUFokjk": { + "displayName": "Illegal change of an identifier", + "description": "A identifier value has been changed in the entity. This is not allowed." } }, "namespaceStrategies": { From 2674dbaf52580076ee9ec7e418d7961778d675bb Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 29 Aug 2019 15:32:36 +0200 Subject: [PATCH 14/15] suppress UnstableApiUsage and use try with resources --- .../sonia/scm/repository/api/ModifyCommandBuilder.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java index 9cfcaebd6a..28adca18ae 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java @@ -184,17 +184,19 @@ public class ModifyCommandBuilder { } } + @SuppressWarnings("UnstableApiUsage") // Files only used internal private File loadData(ByteSource data) throws IOException { File file = createTemporaryFile(); data.copyTo(Files.asByteSink(file)); return file; } + @SuppressWarnings("UnstableApiUsage") // Files and ByteStreams only used internal private File loadData(InputStream data) throws IOException { File file = createTemporaryFile(); - OutputStream out = Files.asByteSink(file).openBufferedStream(); - ByteStreams.copy(data, out); - out.close(); + try (OutputStream out = Files.asByteSink(file).openBufferedStream()) { + ByteStreams.copy(data, out); + } return file; } From f85460ae62cd200cc6dcf3cbbb7768cd1a744c19 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 29 Aug 2019 13:34:48 +0000 Subject: [PATCH 15/15] Close branch feature/modification_api