From 62a87e62344540ad1f2a15017733416118769577 Mon Sep 17 00:00:00 2001
From: Florian Scholdei
Date: Thu, 14 May 2020 12:23:27 +0200
Subject: [PATCH 01/54] Resolve markdown links correctly
---
.../src/MarkdownLinkRenderer.test.tsx | 71 +++++++++++++++
.../src/MarkdownLinkRenderer.tsx | 87 +++++++++++++++++++
scm-ui/ui-components/src/MarkdownView.tsx | 3 +
3 files changed, 161 insertions(+)
create mode 100644 scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
create mode 100644 scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
new file mode 100644
index 0000000000..a9cc02ddfe
--- /dev/null
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
@@ -0,0 +1,71 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+import React from "react";
+import { correctLocalLink } from "./MarkdownLinkRenderer";
+
+const basePath = "/repo/space/name/sources/master/";
+const pathname = basePath + "README.md/";
+
+describe("correctLocalLink tests", () => {
+ it("should return same url", () => {
+ expect(correctLocalLink(pathname, "")).toBe(pathname);
+ });
+
+ it("should return main directory", () => {
+ expect(correctLocalLink(pathname, "/")).toBe("/");
+ expect(correctLocalLink(pathname, "/users/")).toBe("/users/");
+ expect(correctLocalLink(pathname, "/users/#42")).toBe("/users/#42");
+ });
+
+ it("should return ascend directory", () => {
+ expect(correctLocalLink(pathname, "../")).toBe(basePath + "../"); // one layer up
+ expect(correctLocalLink(pathname, "../../")).toBe(basePath + "../../"); // one layer up
+ });
+
+ it("should return same directory", () => {
+ expect(correctLocalLink(pathname, "./another.md")).toBe(basePath + "./another.md/"); // same layer
+ expect(correctLocalLink(pathname, "./another.md#42")).toBe(basePath + "./another.md/#42"); // same layer
+ });
+
+ it("should return deeper links", () => {
+ expect(correctLocalLink(pathname, "docs/Home.md")).toBe(basePath + "docs/Home.md/");
+ expect(correctLocalLink(pathname, "docs/Home.md#42")).toBe(basePath + "docs/Home.md/#42");
+ });
+
+ it("should return external link", () => {
+ expect(correctLocalLink(pathname, "https://foo.bar/baz#42")).toBe("https://foo.bar/baz#42");
+ expect(correctLocalLink(pathname, "ldap://[2001:db8::7]/c=GB?objectClass?one")).toBe(
+ "ldap://[2001:db8::7]/c=GB?objectClass?one"
+ );
+ expect(correctLocalLink(pathname, "mailto:John.Doe@example.com")).toBe("mailto:John.Doe@example.com");
+ expect(correctLocalLink(pathname, "http://userid:password@example.com:8080")).toBe(
+ "http://userid:password@example.com:8080"
+ );
+ expect(correctLocalLink(pathname, "tel:+1-816-555-1212")).toBe("tel:+1-816-555-1212");
+ expect(correctLocalLink(pathname, "urn:oasis:names:specification:docbook:dtd:xml:4.1.2")).toBe(
+ "urn:oasis:names:specification:docbook:dtd:xml:4.1.2"
+ );
+ expect(correctLocalLink(pathname, "about:config")).toBe("about:config");
+ });
+});
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
new file mode 100644
index 0000000000..4c9b9ae6ab
--- /dev/null
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
@@ -0,0 +1,87 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+import React, { ReactNode } from "react";
+import { withRouter, RouteComponentProps } from "react-router-dom";
+import { withContextPath } from "./urls";
+
+type Props = RouteComponentProps & {
+ children: ReactNode;
+ href: string;
+};
+
+function flatten(text: string, child: any): any {
+ return typeof child === "string" ? text + child : React.Children.toArray(child.props.children).reduce(flatten, text);
+}
+
+/**
+ * Handle local SCM-Manager and external links
+ *
+ * @VisibleForTesting
+ */
+export function correctLocalLink(pathname: string, link: string) {
+ if (link === "") {
+ return pathname;
+ }
+
+ // Leave uris unchanged which start with schemes
+ const regex = new RegExp(".:");
+ if (link.match(regex)) {
+ return link;
+ }
+
+ // Reference to the main directory possible if link starts with slash
+ let base = "";
+ let path = link;
+ if (!link.startsWith("/")) {
+ base = pathname;
+ // Remove last slash temporary
+ if (base.endsWith("/")) base = base.substring(0, base.length - 1);
+ // Remove current called file from path
+ base = base.substr(0, base.lastIndexOf("/") + 1);
+
+ // Remove first slash for absolute consistence
+ if (path.startsWith("/")) path = path.substring(1);
+ }
+
+ // Link must end with fragment if it contains one
+ const pathParts = path.split("#");
+ if (pathParts.length > 1) {
+ // Add ending slash in front of fragment
+ if (!pathParts[0].endsWith("/")) pathParts[0] += "/";
+ path = pathParts[0] + "#" + pathParts[1];
+ } else {
+ // Add ending slash
+ if (!path.endsWith("/")) path += "/";
+ }
+
+ return base + path;
+}
+function MarkdownLinkRenderer(props: Props) {
+ const compositeUrl = withContextPath(correctLocalLink(props.location.pathname, props.href));
+ const linkText = React.Children.toArray(props.children).reduce(flatten, "");
+
+ return {linkText} ;
+}
+
+export default withRouter(MarkdownLinkRenderer);
diff --git a/scm-ui/ui-components/src/MarkdownView.tsx b/scm-ui/ui-components/src/MarkdownView.tsx
index d1ef3008c2..362e553d3b 100644
--- a/scm-ui/ui-components/src/MarkdownView.tsx
+++ b/scm-ui/ui-components/src/MarkdownView.tsx
@@ -29,6 +29,7 @@ import { binder } from "@scm-manager/ui-extensions";
import ErrorBoundary from "./ErrorBoundary";
import SyntaxHighlighter from "./SyntaxHighlighter";
import MarkdownHeadingRenderer from "./MarkdownHeadingRenderer";
+import MarkdownLinkRenderer from "./MarkdownLinkRenderer";
import { useTranslation } from "react-i18next";
import Notification from "./Notification";
@@ -114,6 +115,8 @@ class MarkdownView extends React.Component {
rendererList.heading = MarkdownHeadingRenderer;
}
+ rendererList.link = MarkdownLinkRenderer;
+
if (!rendererList.code) {
rendererList.code = SyntaxHighlighter;
}
From 20b1ec77ec1c83df054126f5902f8841d2d57625 Mon Sep 17 00:00:00 2001
From: Florian Scholdei
Date: Thu, 14 May 2020 12:31:21 +0200
Subject: [PATCH 02/54] Update CHANGELOG.md
---
CHANGELOG.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index afafc0d4e6..f085786cde 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Handle obscure line breaks in diff viewer ([#1129](https://github.com/scm-manager/scm-manager/pull/1129))
- Validate subversion client checksum ([#1113](https://github.com/scm-manager/scm-manager/issues/1113))
- Fix plugin manage permission ([#1135](https://github.com/scm-manager/scm-manager/pull/1135))
+- Correctly resolve Links in markdown files ([#1152](https://github.com/scm-manager/scm-manager/pull/1152))
## [2.0.0-rc7] - 2020-04-09
### Added
From 1d27c9df159d459727a54092919c2654253f90cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Thu, 14 May 2020 17:34:08 +0200
Subject: [PATCH 03/54] Add exception mapper for InvalidFormatException.
This exception is thrown for example when an enum in the input could not
be found. This is an invalid input and therefore should not result in an
internal server error.
---
.../scm/api/InvalidFormatExceptionMapper.java | 59 +++++++++++++++
.../main/resources/locales/de/plugins.json | 4 +
.../main/resources/locales/en/plugins.json | 4 +
.../api/InvalidFormatExceptionMapperTest.java | 74 +++++++++++++++++++
4 files changed, 141 insertions(+)
create mode 100644 scm-webapp/src/main/java/sonia/scm/api/InvalidFormatExceptionMapper.java
create mode 100644 scm-webapp/src/test/java/sonia/scm/api/InvalidFormatExceptionMapperTest.java
diff --git a/scm-webapp/src/main/java/sonia/scm/api/InvalidFormatExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/InvalidFormatExceptionMapper.java
new file mode 100644
index 0000000000..97dd96a23a
--- /dev/null
+++ b/scm-webapp/src/main/java/sonia/scm/api/InvalidFormatExceptionMapper.java
@@ -0,0 +1,59 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.api;
+
+import com.fasterxml.jackson.databind.exc.InvalidFormatException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import sonia.scm.api.v2.resources.ErrorDto;
+import sonia.scm.web.VndMediaType;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+import java.util.Collections;
+
+@Provider
+public class InvalidFormatExceptionMapper implements ExceptionMapper {
+
+ private static final Logger LOG = LoggerFactory.getLogger(InvalidFormatExceptionMapper.class);
+
+ private static final String ERROR_CODE = "2qRyyaVcJ1";
+
+ @Override
+ public Response toResponse(InvalidFormatException exception) {
+ LOG.trace("got invalid format in json: {}", exception.getMessage());
+ ErrorDto errorDto = new ErrorDto();
+ errorDto.setMessage("invalid format in json content: " + exception.getMessage());
+ errorDto.setContext(Collections.emptyList());
+ errorDto.setErrorCode(ERROR_CODE);
+ errorDto.setTransactionId(MDC.get("transaction_id"));
+ return Response.status(Response.Status.BAD_REQUEST)
+ .entity(errorDto)
+ .type(VndMediaType.ERROR_TYPE)
+ .build();
+ }
+}
diff --git a/scm-webapp/src/main/resources/locales/de/plugins.json b/scm-webapp/src/main/resources/locales/de/plugins.json
index 8c5c88e0f8..314dac3de4 100644
--- a/scm-webapp/src/main/resources/locales/de/plugins.json
+++ b/scm-webapp/src/main/resources/locales/de/plugins.json
@@ -215,6 +215,10 @@
"8nRuFzjss1": {
"displayName": "Fehler beim Löschen falscher Downloads",
"description": "Ein fehlerhaft heruntergeladenes Plugin konnte nicht gelöscht werden. Bitte prüfen Sie die Server Logs und löschen die Datei manuell."
+ },
+ "2qRyyaVcJ1": {
+ "displayName": "Ungültig formatiertes Element",
+ "description": "Die Eingabe beinhaltete unfültige Formate. Bitte prüfen Sie die Server Logs für genauere Informationen."
}
},
"namespaceStrategies": {
diff --git a/scm-webapp/src/main/resources/locales/en/plugins.json b/scm-webapp/src/main/resources/locales/en/plugins.json
index 998e796bac..fba82da650 100644
--- a/scm-webapp/src/main/resources/locales/en/plugins.json
+++ b/scm-webapp/src/main/resources/locales/en/plugins.json
@@ -215,6 +215,10 @@
"8nRuFzjss1": {
"displayName": "Error while cleaning up failed plugin",
"description": "A failed plugin download could not be removed correctly. Please check the server log and remove the plugin manually."
+ },
+ "2qRyyaVcJ1": {
+ "displayName": "Invalid format in element",
+ "description": "The input had some invalid formats. Please check the server log for further information."
}
},
"namespaceStrategies": {
diff --git a/scm-webapp/src/test/java/sonia/scm/api/InvalidFormatExceptionMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/InvalidFormatExceptionMapperTest.java
new file mode 100644
index 0000000000..c06da77c92
--- /dev/null
+++ b/scm-webapp/src/test/java/sonia/scm/api/InvalidFormatExceptionMapperTest.java
@@ -0,0 +1,74 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.api;
+
+import org.jboss.resteasy.mock.MockDispatcherFactory;
+import org.jboss.resteasy.mock.MockHttpRequest;
+import org.jboss.resteasy.mock.MockHttpResponse;
+import org.jboss.resteasy.spi.Dispatcher;
+import org.junit.jupiter.api.Test;
+
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import java.io.UnsupportedEncodingException;
+import java.net.URISyntaxException;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class InvalidFormatExceptionMapperTest {
+
+ @Test
+ void shouldMapInvalidFormatExceptionDueToInvalidEnum() throws URISyntaxException, UnsupportedEncodingException {
+ Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
+ dispatcher.getRegistry().addSingletonResource(new SimpleResource());
+ dispatcher.getProviderFactory().registerProvider(InvalidFormatExceptionMapper.class);
+
+ MockHttpRequest request = MockHttpRequest
+ .post("/")
+ .contentType("application/json")
+ .content("{\"e\": \"NONE\"}".getBytes());
+ MockHttpResponse response = new MockHttpResponse();
+
+ dispatcher.invoke(request, response);
+
+ assertThat(response.getStatus()).isEqualTo(400);
+ assertThat(response.getContentAsString()).contains("2qRyyaVcJ1");
+ }
+
+ @Path("/")
+ static class SimpleResource {
+ @POST
+ public void post(ObjectWithEnum o) {
+ }
+ }
+
+ static class ObjectWithEnum {
+ public Enum e;
+ }
+
+ enum Enum {
+ ONE, TWO
+ }
+}
From 9131b5eb2fb878cfc5234bf0a040bb5eba6cad2b Mon Sep 17 00:00:00 2001
From: Florian Scholdei
Date: Thu, 14 May 2020 23:35:14 +0200
Subject: [PATCH 04/54] Add another fragment test case which caused jenkins
error
---
scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx | 1 +
scm-ui/ui-components/src/MarkdownLinkRenderer.tsx | 10 ++--------
2 files changed, 3 insertions(+), 8 deletions(-)
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
index a9cc02ddfe..7390ee0709 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
@@ -30,6 +30,7 @@ const pathname = basePath + "README.md/";
describe("correctLocalLink tests", () => {
it("should return same url", () => {
expect(correctLocalLink(pathname, "")).toBe(pathname);
+ expect(correctLocalLink(pathname, "#42")).toBe("#42");
});
it("should return main directory", () => {
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
index 4c9b9ae6ab..1c4c26020d 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
@@ -30,10 +30,6 @@ type Props = RouteComponentProps & {
href: string;
};
-function flatten(text: string, child: any): any {
- return typeof child === "string" ? text + child : React.Children.toArray(child.props.children).reduce(flatten, text);
-}
-
/**
* Handle local SCM-Manager and external links
*
@@ -46,7 +42,7 @@ export function correctLocalLink(pathname: string, link: string) {
// Leave uris unchanged which start with schemes
const regex = new RegExp(".:");
- if (link.match(regex)) {
+ if (link.match(regex) || link.startsWith("#")) {
return link;
}
@@ -79,9 +75,7 @@ export function correctLocalLink(pathname: string, link: string) {
}
function MarkdownLinkRenderer(props: Props) {
const compositeUrl = withContextPath(correctLocalLink(props.location.pathname, props.href));
- const linkText = React.Children.toArray(props.children).reduce(flatten, "");
-
- return {linkText} ;
+ return {props.children} ;
}
export default withRouter(MarkdownLinkRenderer);
From 327bde9515e27eac7ef27bbebc28847e0d603b93 Mon Sep 17 00:00:00 2001
From: Florian Scholdei
Date: Fri, 15 May 2020 00:40:56 +0200
Subject: [PATCH 05/54] Correct misplacing of path context
---
scm-ui/ui-components/src/MarkdownLinkRenderer.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
index 1c4c26020d..2e512fde51 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
@@ -74,7 +74,7 @@ export function correctLocalLink(pathname: string, link: string) {
return base + path;
}
function MarkdownLinkRenderer(props: Props) {
- const compositeUrl = withContextPath(correctLocalLink(props.location.pathname, props.href));
+ const compositeUrl = correctLocalLink(withContextPath(props.location.pathname), props.href);
return {props.children} ;
}
From a148d2977026911daab97c54639695c3d1ce4fe5 Mon Sep 17 00:00:00 2001
From: Florian Scholdei
Date: Fri, 15 May 2020 09:54:20 +0200
Subject: [PATCH 06/54] Correct mixing concepts, Link instead of a for internal
links, adjust regex
---
.../src/MarkdownLinkRenderer.tsx | 27 ++++++++++++-------
1 file changed, 17 insertions(+), 10 deletions(-)
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
index 2e512fde51..3b97bcedef 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
@@ -21,15 +21,17 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-import React, { ReactNode } from "react";
-import { withRouter, RouteComponentProps } from "react-router-dom";
+import React, { FC, ReactNode } from "react";
+import { Link, useLocation } from "react-router-dom";
import { withContextPath } from "./urls";
-type Props = RouteComponentProps & {
+type Props = {
children: ReactNode;
href: string;
};
+const regex = new RegExp("[a-z]:");
+
/**
* Handle local SCM-Manager and external links
*
@@ -40,8 +42,7 @@ export function correctLocalLink(pathname: string, link: string) {
return pathname;
}
- // Leave uris unchanged which start with schemes
- const regex = new RegExp(".:");
+ // Leave uris unchanged which start with schemes or fragment
if (link.match(regex) || link.startsWith("#")) {
return link;
}
@@ -73,9 +74,15 @@ export function correctLocalLink(pathname: string, link: string) {
return base + path;
}
-function MarkdownLinkRenderer(props: Props) {
- const compositeUrl = correctLocalLink(withContextPath(props.location.pathname), props.href);
- return {props.children} ;
-}
-export default withRouter(MarkdownLinkRenderer);
+const MarkdownLinkRenderer: FC = ({ children, href }) => {
+ const location = useLocation();
+ const compositeUrl = correctLocalLink(withContextPath(location.pathname), href);
+
+ if (compositeUrl.match(regex)) {
+ return {children} ;
+ }
+ return {children};
+};
+
+export default MarkdownLinkRenderer;
From 13a8cb4c8f01d6ce762a9d680c5bfde3df7ddb0f Mon Sep 17 00:00:00 2001
From: Florian Scholdei
Date: Fri, 15 May 2020 09:55:51 +0200
Subject: [PATCH 07/54] Reorder unit tests
---
.../src/MarkdownLinkRenderer.test.tsx | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
index 7390ee0709..d2a52f70e3 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
@@ -28,6 +28,11 @@ const basePath = "/repo/space/name/sources/master/";
const pathname = basePath + "README.md/";
describe("correctLocalLink tests", () => {
+ it("should return same directory", () => {
+ expect(correctLocalLink(pathname, "./another.md")).toBe(basePath + "./another.md/");
+ expect(correctLocalLink(pathname, "./another.md#42")).toBe(basePath + "./another.md/#42");
+ });
+
it("should return same url", () => {
expect(correctLocalLink(pathname, "")).toBe(pathname);
expect(correctLocalLink(pathname, "#42")).toBe("#42");
@@ -40,13 +45,8 @@ describe("correctLocalLink tests", () => {
});
it("should return ascend directory", () => {
- expect(correctLocalLink(pathname, "../")).toBe(basePath + "../"); // one layer up
- expect(correctLocalLink(pathname, "../../")).toBe(basePath + "../../"); // one layer up
- });
-
- it("should return same directory", () => {
- expect(correctLocalLink(pathname, "./another.md")).toBe(basePath + "./another.md/"); // same layer
- expect(correctLocalLink(pathname, "./another.md#42")).toBe(basePath + "./another.md/#42"); // same layer
+ expect(correctLocalLink(pathname, "../")).toBe(basePath + "../");
+ expect(correctLocalLink(pathname, "../../")).toBe(basePath + "../../");
});
it("should return deeper links", () => {
From 5a11ca7185bd012ef360ecfc1f7b68a28c7b9471 Mon Sep 17 00:00:00 2001
From: Florian Scholdei
Date: Fri, 15 May 2020 10:46:42 +0200
Subject: [PATCH 08/54] Update storyshots
---
.../src/__snapshots__/storyshots.test.ts.snap | 54 ++++++++++++-------
1 file changed, 36 insertions(+), 18 deletions(-)
diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap
index e9e4792aef..6bcb322fee 100644
--- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap
+++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap
@@ -33581,56 +33581,64 @@ exports[`Storyshots MarkdownView Default 1`] = `
[Top]
@@ -33703,7 +33712,8 @@ exports[`Storyshots MarkdownView Default 1`] = `
[Top]
@@ -33743,7 +33753,8 @@ exports[`Storyshots MarkdownView Default 1`] = `
[Top]
@@ -33822,7 +33833,8 @@ Deserunt officia esse aliquip consectetur duis ut labore laborum commodo aliquip
[Top]
@@ -33842,7 +33854,8 @@ Deserunt officia esse aliquip consectetur duis ut labore laborum commodo aliquip
[Top]
@@ -34149,7 +34162,8 @@ Deserunt officia esse aliquip consectetur duis ut labore laborum commodo aliquip
[Top]
@@ -34214,7 +34228,8 @@ func main() {
[Top]
@@ -34236,7 +34251,8 @@ func main() {
reprehenderit duis
irure
@@ -34262,7 +34278,8 @@ func main() {
anim aute reprehenderit id eu ea. Aute
excepteur proident
@@ -34305,7 +34322,8 @@ func main() {
Reprehenderit non eu quis in ad elit esse qui aute id
incididunt
From d95dcfb03877d93fe63a95c18f6d5d0355e4fdb0 Mon Sep 17 00:00:00 2001
From: Konstantin Schaper
Date: Mon, 18 May 2020 12:04:16 +0200
Subject: [PATCH 09/54] Exclude frontend unit tests from sonar qube code
coverage
---
pom.xml | 1 +
1 file changed, 1 insertion(+)
diff --git a/pom.xml b/pom.xml
index f36487867c..d31b19a89c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -954,6 +954,7 @@
**/*StoreFactory.java,**/*UserPassword.js
./scm-ui/target/frontend/buildfrontend-node/node-v${nodejs.version}-linux-x64/bin/node
+ **/*.test.ts
From 448dfb45119833eb87fd9586c85f96cf65960d66 Mon Sep 17 00:00:00 2001
From: Konstantin Schaper
Date: Tue, 19 May 2020 08:03:33 +0200
Subject: [PATCH 10/54] Exclude frontend unit tests from sonar qube code
coverage
---
Jenkinsfile | 1 +
pom.xml | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index c6415c158c..666ca23869 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -199,6 +199,7 @@ Maven setupMavenBuild() {
def logConf = "scm-webapp/src/main/resources/logback.ci.xml"
mvn.additionalArgs += " -Dlogback.configurationFile=${logConf}"
mvn.additionalArgs += " -Dscm-it.logbackConfiguration=${logConf}"
+ mvn.additionalArgs += " -Dsonar.coverage.exclusions=**/*.test.ts,**/*.test.tsx"
if (isMainBranch() || isReleaseBranch()) {
// Release starts javadoc, which takes very long, so do only for certain branches
diff --git a/pom.xml b/pom.xml
index d31b19a89c..84db3eba31 100644
--- a/pom.xml
+++ b/pom.xml
@@ -954,7 +954,7 @@
**/*StoreFactory.java,**/*UserPassword.js
./scm-ui/target/frontend/buildfrontend-node/node-v${nodejs.version}-linux-x64/bin/node
- **/*.test.ts
+ **/*.test.ts,**/*.test.tsx
From ead2efdd416f115956f01dd882bc706f7336c585 Mon Sep 17 00:00:00 2001
From: Konstantin Schaper
Date: Tue, 19 May 2020 08:32:14 +0200
Subject: [PATCH 11/54] Remove non-functional code coverage configuration from
pom
---
pom.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 84db3eba31..f36487867c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -954,7 +954,6 @@
**/*StoreFactory.java,**/*UserPassword.js
./scm-ui/target/frontend/buildfrontend-node/node-v${nodejs.version}-linux-x64/bin/node
- **/*.test.ts,**/*.test.tsx
From ae51a583fd62c1b990bbc9219455ca4654af3641 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 25 Mar 2020 11:39:14 +0100
Subject: [PATCH 12/54] POC for rename detection in diffs
---
.../java/sonia/scm/repository/spi/Differ.java | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
index 6bba6a331e..aa67268ac2 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
@@ -21,17 +21,19 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.spi;
import com.google.common.base.Strings;
import org.eclipse.jgit.diff.DiffEntry;
+import org.eclipse.jgit.diff.DiffFormatter;
import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevTree;
import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.treewalk.AbstractTreeIterator;
import org.eclipse.jgit.treewalk.EmptyTreeIterator;
import org.eclipse.jgit.treewalk.TreeWalk;
import org.eclipse.jgit.treewalk.filter.PathFilter;
@@ -57,7 +59,7 @@ final class Differ implements AutoCloseable {
static Diff diff(Repository repository, DiffCommandRequest request) throws IOException {
try (Differ differ = create(repository, request)) {
- return differ.diff();
+ return differ.diff(repository);
}
}
@@ -108,8 +110,13 @@ final class Differ implements AutoCloseable {
return new Differ(commit, walk, treeWalk);
}
- private Diff diff() throws IOException {
- List entries = DiffEntry.scan(treeWalk);
+ private Diff diff(Repository repository) throws IOException {
+ DiffFormatter diffFormatter = new DiffFormatter(null);
+ diffFormatter.setRepository(repository);
+ diffFormatter.setDetectRenames(true);
+ List entries = diffFormatter.scan(
+ treeWalk.getTree(0, AbstractTreeIterator.class),
+ treeWalk.getTree(1, AbstractTreeIterator.class));
return new Diff(commit, entries);
}
From dbc58784e4b1f0faf57a39272eb2925bd0c89692 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Mon, 11 May 2020 14:21:25 +0200
Subject: [PATCH 13/54] Fix path handling
---
.../java/sonia/scm/repository/spi/Differ.java | 13 +++++++++----
.../scm/repository/spi/GitDiffCommand.java | 2 +-
.../repository/spi/GitDiffCommandTest.java | 17 +++++++++++++++++
.../scm/repository/spi/scm-git-spi-test.zip | Bin 37734 -> 40559 bytes
4 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
index aa67268ac2..c8ed2e6e51 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
@@ -50,11 +50,13 @@ final class Differ implements AutoCloseable {
private final RevWalk walk;
private final TreeWalk treeWalk;
private final RevCommit commit;
+ private final PathFilter pathFilter;
- private Differ(RevCommit commit, RevWalk walk, TreeWalk treeWalk) {
+ private Differ(RevCommit commit, RevWalk walk, TreeWalk treeWalk, PathFilter pathFilter) {
this.commit = commit;
this.walk = walk;
this.treeWalk = treeWalk;
+ this.pathFilter = pathFilter;
}
static Diff diff(Repository repository, DiffCommandRequest request) throws IOException {
@@ -83,11 +85,11 @@ final class Differ implements AutoCloseable {
treeWalk.reset();
treeWalk.setRecursive(true);
+ PathFilter pathFilter = null;
if (Util.isNotEmpty(request.getPath())) {
- treeWalk.setFilter(PathFilter.create(request.getPath()));
+ pathFilter = PathFilter.create(request.getPath());
}
-
if (!Strings.isNullOrEmpty(request.getAncestorChangeset())) {
ObjectId otherRevision = repository.resolve(request.getAncestorChangeset());
ObjectId ancestorId = GitUtil.computeCommonAncestor(repository, revision, otherRevision);
@@ -107,13 +109,16 @@ final class Differ implements AutoCloseable {
treeWalk.addTree(commit.getTree());
- return new Differ(commit, walk, treeWalk);
+ return new Differ(commit, walk, treeWalk, pathFilter);
}
private Diff diff(Repository repository) throws IOException {
DiffFormatter diffFormatter = new DiffFormatter(null);
diffFormatter.setRepository(repository);
diffFormatter.setDetectRenames(true);
+ if (pathFilter != null) {
+ diffFormatter.setPathFilter(pathFilter);
+ }
List entries = diffFormatter.scan(
treeWalk.getTree(0, AbstractTreeIterator.class),
treeWalk.getTree(1, AbstractTreeIterator.class));
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java
index 29c9f81b14..0e851456a7 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java
@@ -57,7 +57,7 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand {
formatter.setRepository(repository);
for (DiffEntry e : diff.getEntries()) {
- if (!e.getOldId().equals(e.getNewId())) {
+ if (!e.getOldId().equals(e.getNewId()) || !e.getNewPath().equals(e.getOldPath())) {
formatter.format(e);
}
}
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java
index 042c1f3186..7a9e9f660e 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java
@@ -24,11 +24,13 @@
package sonia.scm.repository.spi;
+import org.assertj.core.api.Assertions;
import org.junit.Test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
public class GitDiffCommandTest extends AbstractGitCommandTestBase {
@@ -140,4 +142,19 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase {
gitDiffCommand.getDiffResult(diffCommandRequest).accept(output);
assertEquals(DIFF_FILE_PARTIAL_MERGE, output.toString());
}
+
+ @Test
+ public void diffBetweenTwoBranchesWithMovedFiles() throws IOException {
+ GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext());
+ DiffCommandRequest diffCommandRequest = new DiffCommandRequest();
+ diffCommandRequest.setRevision("rename");
+ ByteArrayOutputStream output = new ByteArrayOutputStream();
+ gitDiffCommand.getDiffResult(diffCommandRequest).accept(output);
+ assertThat(output.toString())
+ .contains("similarity index 100%")
+ .contains("rename from a.txt")
+ .contains("rename to a-copy.txt")
+ .contains("rename from b.txt")
+ .contains("rename to b-copy.txt");
+ }
}
diff --git a/scm-plugins/scm-git-plugin/src/test/resources/sonia/scm/repository/spi/scm-git-spi-test.zip b/scm-plugins/scm-git-plugin/src/test/resources/sonia/scm/repository/spi/scm-git-spi-test.zip
index da166155a780700c719e046b5070e591b4434371..80483d04d1d77a446b75a353ad72e2f0a644f2f3 100644
GIT binary patch
delta 5155
zcma)830PBC7Jl3pWf79d76=#w6#-ci^0Ki=07V4hAy#oIV#q?+1cV@nfLIl!BFL#$
z>(uFDs}8M}(q*ug(K^*BwYFpJIH>JN7to6PIM!O*x$ixafSvh1^L;Px-uuoy_niMM
z_aA&6-8_og!+H1S^(^m_>KsTsfUZ~xbXL1UuY-u4ANLiLF*TiV&mq|HFIbR~nJ*MW
z98$6yp&EVSrdrdP_0q|+ziuK3!W+8Ai5gcKSL#ZQ3!ic($l9!)Uom)s4-o1@{Nji)S`}di2bm^Y_nPd+^2n8>fmVcQqZK72=t>
zV#WO>y@wwSHk-R#J6sBy%Oi?5h4uXXOV4{fMYY1r+Pbt2eT{uUk;$wd-F4&y2X55D
z%iuIX%E2h5><>T>~8%-`8g0
zwdoQVa*bfWi`BJ|&sf{~&Qf<6=M~4!2U0v?
zvDceydLEDQ6{r+Z>^asn#d_xB)Xh4AT(0cE_ArkOTT_-_WYkwxMqzoAPNvA$Df5+5
zN^PJNCaF}ZmMN)xxk9N>8PynAnNg=6qqRKJvoYNT$%Nx_hde(N?SmV?X#d*z&Rj>w
z(_2sf^`YOvb*PMeB3MWhd>}x13Dj&-}RAjb9)6v}U1;`+^14gApGb
zB9|UK@LBNNeVa2~pk@ChAGt@xmL=1QWp{i(FKvFc>R|nnftahmo=ETi+3gLwe_;4l
z`QB$tz1{95R}!}E&N%CJ;m+9;YaK2IB#wg!QLw
zKKQ~Hem}A6xpH5)IK>&R`xo2Lu}rcf_st|uj!DhCl9AL5@qnCwyEgfP$#yiqm~2nk
zkU+a0CIT4=Vi*pR!Ej(G+b5XRm8&`9M|ve&0!xFe`$Q0*5Qg_?8=1c0`ry!?ci{*y
z&*&&%9Z%LJ*eLv;u3Y1=5%*;zbDf=g-}CDU9hqkfU4oWRdp(rDc#i4E#zzs~e)Co1
z+L~KcrKMLJ)~~&?XLmuiDSDQ7Sf$ev`MMWvg!{Mzx-V4`DII>~c^SE@yDOyUBmQ@F%nZY#?aYho}ltg^+UWNIdvj}xFG
z#1rzAjHG*Zd}DJ7N4W%EACE!d;J$DeRm
z^v!n)uRn!3zZ}-JzJ62o;h)yzLIQo}<|BXcKizF
zb880H&kksmC1<3P%eL=$upn{Z+M_%7YA1d4+s3VNt$W_DB#0~*HE2_&!?7@XtzHka
zBEqDu5H9$Lp>9T@4dxST-N7R~&RWmiMd7a2`V{jNILG1nh!jT)z6h)F-N3Y`Um_~l
z-Q|&7AvVb*uqDb`$R2Pt>YPpc1*tuV$uh1Gn`CC|X~2uVW|MW5TZ^pCw&qOP3waeK
zvK6VC`dyLEXA1I?d*r*#IF`&aI-XcwuU1n=xm>NI3`&_yqt{5KdZ|H;uXD8yUoa{a
zr8lXm(FF-Op2ElD34&;U-i{4fJ0L1r78Ja%>CM0O{c`Z7TlX3s{Ct!@@LN*K-jknQ
z)DU-bG{=}ifj8Fsz-5X9I6%>BbM0q^wRd@T=P4aI&>1Y7Rb0dvtcO)v+lIMnI~H%N
zb8YM48au{2G&&aBffO&`$NY0dMgoqpR-Ga!j!kCQyJF2FMd<-iabMZ=1;$&?5y6)D
zk%GgWeK_8lN!<0tX41?9Be7(%tHY*aI3bg5?D5)PZ8kieXt&{5B4-2B#3v_N&okTh
z{|B#e4Z{PLCUZKN`mUX2&$IqnoXuUcxqM>qqEZrU=RKEVmHmOWk>N?-&7nAo=$AS~
za-;F{PVuo5xLe^1Wn*UzdjEIjDr}%QipQ5
zZSa5+^Hf&hS%bv6)R7=c$_gr@;B!6>vr&ttIYE}uKn^((5a}d=mO_74_`XqsUU3GI
zDFgYqg2|NWJj0D3RvArrYg>l|+D+qmjCIgdA{G@{Kbeg>LnSURn`QoRc?%D7X1>q|
zmlZ)^ABcCF4r6&}(nm8|>?HbDf%l|f{>UMmrr&w$4_gZ)yce((T-H;}{*G223>S!b
z9s<0UXz+%~=6KXBfIRa;@}Yo$GkkCCr#~YK>neC~*DOXALJ$<@p_@V|FI6M{EHUx0^G44i75oyxAQVbxuPm}=q;krPwpTn&fpn5u*mJ&DJ)QoSZlEu
zz3Kr6i?h&9Pk2~N&GYSB^DIw4aQO$t@MWXN^^J&XJ(_bPGsNBl52b}L#gn&%YIL+
zt>-!rQ=2{>yYoqDwp~BCt(2gTeIQ~bja+=8VWkD#_l0{aX);bsK%0nyy0RduQn0*2i@GK7QUy*23EZx*kgk&nX!WPy#Z_AL(Pa47DjGQkg0#|tv_Y`Hl13YY
z;3qtLX9|>6(dfYxI96prmZ_k!(BzS+1jGhX@S!EhUQhd{*}Y*oCAJeYJtkrxt(KtS
zX^>T&vy4fau{3ftB)!37lsqY^9CcJ-z7X=N_~`g_I8{xf@gd-|+JcUTK-+2>IfTMx
zJX3~2P7RIf!r(xS1(|0+KrPP48Bkt}^D!KTYUiW!aEMt$qj$sM*)2d>=DJbw*F=pnnW0_w_^|OGOSwin+c0+LlM*nyem4FUQs}Fr(R)(xTWdjEWYDpe
zMrUO39iI8gVQIaLqcv^yVzfdIo%L!Gvl})n!b%>DZx9QH<#rdMO;H_!U|86YgxnOc
zyMad83iz?Xg7TH1Yoy8jN&>D+DHv+hqA4l}T}P8<6#<826dYcsMbD|>HeTvi6A&P$
zV0DugZP!3g6HWd@Lx4X;LBje`NwX-%elp8(?2%+MWh}oL4c?xyJD-&8*!2VB{d?=h
zWNRz|1K2RfXSAp)4(2{XlRa?+xG5?494|eJhlv|#GHE6OJ5>}szd?&m%!Gct(KKr>CY
zBoXjUECrF9wP;T=ly9cd`Wox
zw*(3vwP?}VIgs!yjYO%?{;UPPkP41lY4opDSiIGO%ICu8c=qmGnA~bXH`CzxRvJ<1
za0Sn1&x5>eG-{a#Z*8+6mkgNRMk6`{YTEGmnQ*f$4ZV^HvF*#y_H5YIo`assf!pnQ
zg6_oxVJ<5xu8b-#tE`HEm)aHZ+;%Z)TLN!wUxs>g;MSoh4;lz~lq-Qn?ZNPVhnRe5
pB!JEngR~y{{jswFN6R9
delta 3037
zcmZWqc~Dem5`TPe!L=2BWh5P5%6gQJP=e4
z74(M(C@E8$tW~Zi%aUx?=*F{>wRB6_l&-htS|#d6D;2Y=wQ=9UywS@1^Sb-%?(f&X
z?yu*E6XajNCq0u??fO&YgNb%G`Wu@bzQIOlEh=1!^2TRwfr{-^q6!-ly+KHj$5NaA
zP1#qE4}IN{L8hqMjHk-6nw*EfDpgX3W~s)x$($}Vu
zzh^WJlAfwl-ZAku1sgeJiDJiEf?@?67XVEO44!)cS>wG9p)g
z)Gt~>jT?SXWv@&6NHisC4W3j81
z!UCo$_O}CM`}u&=um*(Sp}|`@(+An;UZD`X#ejduXt6!$fO1w~l+VO`9~x5xFd-U-
z`85WSP`8jGsS7XjJ@7cj7cu!p^n`34CB+DtbOUUm-meWpQ>YX-bS>1!H8rBMrAZC_
z_zW@WP~~_xHwl&95{{0rY6W3svkns{WGEFhPWX><)*UWYJ#;VJT@DuKk&dv@UkP-H
zCDlZ@C^|Q4chXQBS&VjbG(NY4;O}NnkJ8&$IFaV3789PEi|EH9cRJIT;+vne443Rejubfkmyg
zz~ejhRjGWDwlA%95`|#~J>FoxRWdC|mZ?3Od|$Cebn0++N`|D1vBne^<@G5p#5YqO
zDls2*>F`skv!_8QNn5R)-Ai*$WCG0A5HzQIdPE-WD0i~3cdC5;VCrW|%-IYXm)rvP
zq4>jxSrM-dYZVir1>)t=-g^kSd#?2M6!u=+7uQx^2FIn1*q^1cR-R?a7(S`^mVh+T_)b-yK7w0KfiNQ5n%UeA#ae9={3
z;%U@T)Uw*84t%v@yio2~cr_TwJRQsprDUcb)-*68Z$X}vfs%h(>T%Ayew6dCM=F6`
zWg_4BVc{x{So9cN#gq5+u<#r`qNmUmz~BQu91GW&$P0h`Wi?0G0C=t8Nn9W{uHi_1
zAcohJiS!Vi0ot`3DKo&nmM8f^xVCl{*%pM@Mve>zp}CPKfx-Au&=v$EuZbr@KaMx?
zn#fQEP=Ylv0ZBC`k+#Za6R8eGYqJ1ISkTQJ88M-F9Zw8lIJ1tU%fl!HL@+2^&ywq5
z=v>bc(*)dHUxu_6lV)7_D@jumaJwY}&&)c!==G*c!zp-0GPt%O9P5^8aiUF4!Y5+q
zMvlBS5npfQNoWM-wQ%&J2nwcX26tOnve%3Wn>hNGnZmvp28TAWz
zKDDBF8%JJRabQ~+E^akxHZU$CQyHZ@$G4lvIR-bk^Xfk&yF9E*(cKk|tvihLlVl24
zGX$1*u!Kp0v74jUrckKJVsNmV)jUseMNM|)_3JUw*{KxF*$k?BSaLfRhkG~@o`x4a
zJpE1@g*H}TemO2^1fj{a{tg}XTn9J^T3JQahxIQsNd3WstTq<|&=$iP}~bYLch
z|4n1?QZV&pBBz(5?+B)Ic?`bjW$6o96bADdWbJ0jKsGk+=E&FC7~ahjuN)Na;fO5<
zeS3H^oCED%p}D!R@8!v%TwD{hN4bdJ$CJoB9Nfo|>O4FZwB~$N^>O5MK92SAB&Pt0
z{T$g+fR=vVvu`>@RXH5hxVIuqdbXDRM*8}63MXwwRP1NT--_|>{xZ6<NvZ3H<|+
z$Ub1Czn?|n^4wra9}x7G>Ww0A7(
QR;rcCN}?#;B5@P^AEBfjDF6Tf
From fba34b3babee501fb9a5ab243c847f5a972d97a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Mon, 11 May 2020 16:48:02 +0200
Subject: [PATCH 14/54] Add unit tests
---
.../spi/GitDiffResultCommandTest.java | 16 +++++++++++
.../scm/repository/spi/GitHunkParserTest.java | 28 +++++++++++++++++++
2 files changed, 44 insertions(+)
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffResultCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffResultCommandTest.java
index cf42b00719..e2722b78ab 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffResultCommandTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffResultCommandTest.java
@@ -103,6 +103,22 @@ public class GitDiffResultCommandTest extends AbstractGitCommandTestBase {
assertThat(hunk.getNewLineCount()).isEqualTo(2);
}
+ @Test
+ public void shouldReturnRenames() throws IOException {
+ DiffResult diffResult = createDiffResult("rename");
+
+ Iterator fileIterator = diffResult.iterator();
+ DiffFile renameA = fileIterator.next();
+ assertThat(renameA.getOldPath()).isEqualTo("a.txt");
+ assertThat(renameA.getNewPath()).isEqualTo("a-copy.txt");
+ assertThat(renameA.iterator().hasNext()).isFalse();
+
+ DiffFile renameB = fileIterator.next();
+ assertThat(renameB.getOldPath()).isEqualTo("b.txt");
+ assertThat(renameB.getNewPath()).isEqualTo("b-copy.txt");
+ assertThat(renameB.iterator().hasNext()).isFalse();
+ }
+
private DiffResult createDiffResult(String s) throws IOException {
GitDiffResultCommand gitDiffResultCommand = new GitDiffResultCommand(createContext());
DiffCommandRequest diffCommandRequest = new DiffCommandRequest();
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHunkParserTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHunkParserTest.java
index fda99ed7bf..54c92a4346 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHunkParserTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHunkParserTest.java
@@ -112,6 +112,15 @@ class GitHunkParserTest {
" indent_size = 2\r\r\n" +
" charset = utf-8\n";
+ private static final String RENAMES = "diff --git a/a.txt b/a-copy.txt\n" +
+ "similarity index 100%\n" +
+ "rename from a.txt\n" +
+ "rename to a-copy.txt\n" +
+ "diff --git a/b.txt b/b-copy.txt\n" +
+ "similarity index 100%\n" +
+ "rename from b.txt\n" +
+ "rename to b-copy.txt";
+
@Test
void shouldParseHunks() {
List hunks = new GitHunkParser().parse(DIFF_001);
@@ -210,6 +219,25 @@ class GitHunkParserTest {
assertThat(lines.hasNext()).isFalse();
}
+ @Test
+ void shouldHandleRenames() {
+ List hunks = new GitHunkParser().parse(RENAMES);
+
+ Hunk hunk = hunks.get(0);
+ hunk.getRawHeader();
+
+ Iterator lines = hunk.iterator();
+
+ DiffLine line1 = lines.next();
+ assertThat(line1.getOldLineNumber()).hasValue(10);
+ assertThat(line1.getNewLineNumber()).hasValue(10);
+ assertThat(line1.getContent()).isEqualTo("indent_style = space");
+
+ lines.next();
+ lines.next();
+ assertThat(lines.hasNext()).isFalse();
+ }
+
private void assertHunk(Hunk hunk, int oldStart, int oldLineCount, int newStart, int newLineCount) {
assertThat(hunk.getOldStart()).isEqualTo(oldStart);
assertThat(hunk.getOldLineCount()).isEqualTo(oldLineCount);
From 5421d4116162d4d50e7369f1808fe072ac11c4c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Mon, 11 May 2020 17:19:38 +0200
Subject: [PATCH 15/54] Support rename in rest layer
---
.../DiffResultToDiffResultDtoMapper.java | 7 +++--
.../DiffResultToDiffResultDtoMapperTest.java | 27 +++++++++++++++++--
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java
index 045638c0b7..2c17abd30f 100644
--- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java
+++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.api.v2.resources;
import com.github.sdorra.spotter.ContentTypes;
@@ -89,11 +89,14 @@ class DiffResultToDiffResultDtoMapper {
} else if (isFileNull(newPath) && isFilePath(oldPath)) {
path = oldPath;
dto.setType("delete");
+ } else if (!newPath.equals(oldPath)) {
+ path = newPath;
+ dto.setType("rename");
} else if (isFilePath(newPath) && isFilePath(oldPath)) {
path = newPath;
dto.setType("modify");
} else {
- // TODO copy and rename?
+ // TODO copy?
throw new IllegalStateException("no file without path");
}
diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java
index 3c88c76675..5b0ff6eff9 100644
--- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.api.v2.resources;
import de.otto.edison.hal.Link;
@@ -35,11 +35,13 @@ import sonia.scm.repository.api.DiffResult;
import sonia.scm.repository.api.Hunk;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.OptionalInt;
import static java.net.URI.create;
+import static java.util.Collections.emptyIterator;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -60,6 +62,7 @@ class DiffResultToDiffResultDtoMapperTest {
assertAddedFile(files.get(0), "A.java", "abc", "java");
assertModifiedFile(files.get(1), "B.ts", "abc", "def", "typescript");
assertDeletedFile(files.get(2), "C.go", "ghi", "golang");
+ assertRenamedFile(files.get(3), "typo.ts", "okay.ts", "def", "fixed", "typescript");
DiffResultDto.HunkDto hunk = files.get(1).getHunks().get(0);
assertHunk(hunk, "@@ -3,4 1,2 @@", 1, 2, 3, 4);
@@ -104,7 +107,8 @@ class DiffResultToDiffResultDtoMapperTest {
deletedLine("c", 3)
)
),
- deletedFile("C.go", "ghi")
+ deletedFile("C.go", "ghi"),
+ renamedFile("okay.ts", "typo.ts", "fixed", "def")
);
}
@@ -161,6 +165,15 @@ class DiffResultToDiffResultDtoMapperTest {
assertThat(file.getLanguage()).isEqualTo(language);
}
+ private void assertRenamedFile(DiffResultDto.FileDto file, String oldPath, String newPath, String oldRevision, String newRevision, String language) {
+ assertThat(file.getOldPath()).isEqualTo(oldPath);
+ assertThat(file.getNewPath()).isEqualTo(newPath);
+ assertThat(file.getOldRevision()).isEqualTo(oldRevision);
+ assertThat(file.getNewRevision()).isEqualTo(newRevision);
+ assertThat(file.getType()).isEqualTo("rename");
+ assertThat(file.getLanguage()).isEqualTo(language);
+ }
+
private DiffResult result(DiffFile... files) {
DiffResult result = mock(DiffResult.class);
when(result.iterator()).thenReturn(Arrays.asList(files).iterator());
@@ -193,6 +206,16 @@ class DiffResultToDiffResultDtoMapperTest {
return file;
}
+ private DiffFile renamedFile(String newPath, String oldPath, String newRevision, String oldRevision) {
+ DiffFile file = mock(DiffFile.class);
+ when(file.getNewPath()).thenReturn(newPath);
+ when(file.getNewRevision()).thenReturn(newRevision);
+ when(file.getOldPath()).thenReturn(oldPath);
+ when(file.getOldRevision()).thenReturn(oldRevision);
+ when(file.iterator()).thenReturn(emptyIterator());
+ return file;
+ }
+
private Hunk hunk(String rawHeader, int newStart, int newLineCount, int oldStart, int oldLineCount, DiffLine... lines) {
Hunk hunk = mock(Hunk.class);
when(hunk.getRawHeader()).thenReturn(rawHeader);
From 4d352efef01f2af80598636909fc14df97306988 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 12 May 2020 07:50:39 +0200
Subject: [PATCH 16/54] Remove wrong test
The GitHunkParser has nothing to do with renames, so this test does not
make any sense.
---
.../scm/repository/spi/GitHunkParserTest.java | 28 -------------------
1 file changed, 28 deletions(-)
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHunkParserTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHunkParserTest.java
index 54c92a4346..fda99ed7bf 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHunkParserTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHunkParserTest.java
@@ -112,15 +112,6 @@ class GitHunkParserTest {
" indent_size = 2\r\r\n" +
" charset = utf-8\n";
- private static final String RENAMES = "diff --git a/a.txt b/a-copy.txt\n" +
- "similarity index 100%\n" +
- "rename from a.txt\n" +
- "rename to a-copy.txt\n" +
- "diff --git a/b.txt b/b-copy.txt\n" +
- "similarity index 100%\n" +
- "rename from b.txt\n" +
- "rename to b-copy.txt";
-
@Test
void shouldParseHunks() {
List hunks = new GitHunkParser().parse(DIFF_001);
@@ -219,25 +210,6 @@ class GitHunkParserTest {
assertThat(lines.hasNext()).isFalse();
}
- @Test
- void shouldHandleRenames() {
- List hunks = new GitHunkParser().parse(RENAMES);
-
- Hunk hunk = hunks.get(0);
- hunk.getRawHeader();
-
- Iterator lines = hunk.iterator();
-
- DiffLine line1 = lines.next();
- assertThat(line1.getOldLineNumber()).hasValue(10);
- assertThat(line1.getNewLineNumber()).hasValue(10);
- assertThat(line1.getContent()).isEqualTo("indent_style = space");
-
- lines.next();
- lines.next();
- assertThat(lines.hasNext()).isFalse();
- }
-
private void assertHunk(Hunk hunk, int oldStart, int oldLineCount, int newStart, int newLineCount) {
assertThat(hunk.getOldStart()).isEqualTo(oldStart);
assertThat(hunk.getOldLineCount()).isEqualTo(oldLineCount);
From 76354aa83911f4cee53aeecb4062872ceef3b0cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 12 May 2020 14:40:26 +0200
Subject: [PATCH 17/54] Close diff formatter
---
.../java/sonia/scm/repository/spi/Differ.java | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
index c8ed2e6e51..c613e945f1 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
@@ -113,16 +113,17 @@ final class Differ implements AutoCloseable {
}
private Diff diff(Repository repository) throws IOException {
- DiffFormatter diffFormatter = new DiffFormatter(null);
- diffFormatter.setRepository(repository);
- diffFormatter.setDetectRenames(true);
- if (pathFilter != null) {
- diffFormatter.setPathFilter(pathFilter);
+ try (DiffFormatter diffFormatter = new DiffFormatter(null)) {
+ diffFormatter.setRepository(repository);
+ diffFormatter.setDetectRenames(true);
+ if (pathFilter != null) {
+ diffFormatter.setPathFilter(pathFilter);
+ }
+ List entries = diffFormatter.scan(
+ treeWalk.getTree(0, AbstractTreeIterator.class),
+ treeWalk.getTree(1, AbstractTreeIterator.class));
+ return new Diff(commit, entries);
}
- List entries = diffFormatter.scan(
- treeWalk.getTree(0, AbstractTreeIterator.class),
- treeWalk.getTree(1, AbstractTreeIterator.class));
- return new Diff(commit, entries);
}
@Override
From 35ffc5c4e20579bd4f899afd50361a4b4b0d5442 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Thu, 14 May 2020 13:20:56 +0200
Subject: [PATCH 18/54] Introduce new API for modifications
New modifications includes list of 'renames'. Therefore we introduce
a new base class Modification.
---
.../sonia/scm/repository/Modification.java | 94 +++++++++++++++++++
.../sonia/scm/repository/Modifications.java | 81 ++++++++--------
.../java/sonia/scm/repository/spi/Differ.java | 10 +-
.../spi/GitModificationsCommand.java | 35 ++++---
.../scm/repository/spi/GitLogCommandTest.java | 10 +-
.../repository/spi/GitMergeCommandTest.java | 3 +-
.../spi/GitModificationsCommandTest.java | 66 +++++++++++--
.../spi/HgModificationsCommand.java | 8 +-
.../spi/javahg/AbstractChangesetCommand.java | 17 ++--
.../spi/javahg/HgLogChangesetCommand.java | 7 +-
.../scm/repository/spi/HgLogCommandTest.java | 9 +-
.../spi/HgModificationsCommandTest.java | 5 +-
.../java/sonia/scm/repository/SvnUtil.java | 48 ++++------
.../spi/SvnModificationsCommand.java | 8 +-
.../scm/repository/spi/SvnLogCommandTest.java | 4 +-
.../api/v2/resources/ModificationsDto.java | 13 ++-
.../resources/ModificationsToDtoMapper.java | 17 +++-
.../resources/ModificationsResourceTest.java | 18 ++--
18 files changed, 326 insertions(+), 127 deletions(-)
create mode 100644 scm-core/src/main/java/sonia/scm/repository/Modification.java
diff --git a/scm-core/src/main/java/sonia/scm/repository/Modification.java b/scm-core/src/main/java/sonia/scm/repository/Modification.java
new file mode 100644
index 0000000000..94d74ae722
--- /dev/null
+++ b/scm-core/src/main/java/sonia/scm/repository/Modification.java
@@ -0,0 +1,94 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.io.Serializable;
+
+public interface Modification extends EffectedPath, Serializable {
+
+ @Getter
+ @AllArgsConstructor
+ class Added implements Modification {
+ private final String path;
+
+ @Override
+ public String getEffectedPath() {
+ return path;
+ }
+ }
+
+ @Getter
+ @AllArgsConstructor
+ class Removed implements Modification {
+ private final String path;
+
+ @Override
+ public String getEffectedPath() {
+ return path;
+ }
+ }
+
+ @Getter
+ @AllArgsConstructor
+ class Modified implements Modification {
+ private final String path;
+
+ @Override
+ public String getEffectedPath() {
+ return path;
+ }
+ }
+
+ @Getter
+ @AllArgsConstructor
+ class Renamed implements Modification {
+ private final String oldPath;
+ private final String newPath;
+
+ @Override
+ public String getEffectedPath() {
+ return newPath;
+ }
+ }
+
+ @Getter
+ @AllArgsConstructor
+ class Copied implements Modification {
+ private final String sourcePath;
+ private final String targetPath;
+
+ @Override
+ public String getEffectedPath() {
+ return targetPath;
+ }
+ }
+}
+
+interface EffectedPath {
+ String getEffectedPath();
+}
diff --git a/scm-core/src/main/java/sonia/scm/repository/Modifications.java b/scm-core/src/main/java/sonia/scm/repository/Modifications.java
index 999f103d2a..ce43fe58f8 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Modifications.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Modifications.java
@@ -24,71 +24,74 @@
package sonia.scm.repository;
-import com.google.common.collect.Lists;
+import com.google.common.collect.ImmutableList;
+import lombok.Builder;
import lombok.EqualsAndHashCode;
-import lombok.Setter;
+import lombok.Getter;
import lombok.ToString;
import java.io.Serializable;
+import java.util.Collection;
import java.util.List;
+import static java.util.Arrays.asList;
+import static java.util.stream.Collectors.toList;
+
@EqualsAndHashCode
@ToString
-@Setter
+@Getter
public class Modifications implements Serializable {
private static final long serialVersionUID = -8902033326668658140L;
- private String revision;
- /**
- * lists of changed files
- */
- private List added;
- private List modified;
- private List removed;
+ private final String revision;
+ private final Collection modifications;
- public Modifications() {
+ public Modifications(String revision, Modification... modifications) {
+ this(revision, asList(modifications));
}
- public Modifications(List added) {
- this(added, null, null);
+ public Modifications(String revision, Collection modifications) {
+ this.revision = revision;
+ this.modifications = ImmutableList.copyOf(modifications);
}
- public Modifications(List added, List modified) {
- this(added, modified, null);
+ public List getEffectedPaths() {
+ return modifications.stream().map(Modification::getEffectedPath).collect(toList());
}
- public Modifications(List added, List modified, List removed) {
- this.added = added;
- this.modified = modified;
- this.removed = removed;
+ public List getAdded() {
+ return modifications.stream()
+ .filter(m -> m instanceof Modification.Added)
+ .map(m -> (Modification.Added) m)
+ .collect(toList());
}
- public List getAdded() {
- if (added == null) {
- added = Lists.newArrayList();
- }
-
- return added;
+ public List getRemoved() {
+ return modifications.stream()
+ .filter(m -> m instanceof Modification.Removed)
+ .map(m -> (Modification.Removed) m)
+ .collect(toList());
}
- public List getModified() {
- if (modified == null) {
- modified = Lists.newArrayList();
- }
-
- return modified;
+ public List getModified() {
+ return modifications.stream()
+ .filter(m -> m instanceof Modification.Modified)
+ .map(m -> (Modification.Modified) m)
+ .collect(toList());
}
- public List getRemoved() {
- if (removed == null) {
- removed = Lists.newArrayList();
- }
-
- return removed;
+ public List getRenamed() {
+ return modifications.stream()
+ .filter(m -> m instanceof Modification.Renamed)
+ .map(m -> (Modification.Renamed) m)
+ .collect(toList());
}
- public String getRevision() {
- return revision;
+ public List getCopied() {
+ return modifications.stream()
+ .filter(m -> m instanceof Modification.Copied)
+ .map(m -> (Modification.Copied) m)
+ .collect(toList());
}
}
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
index c613e945f1..aa539b978c 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/Differ.java
@@ -113,17 +113,23 @@ final class Differ implements AutoCloseable {
}
private Diff diff(Repository repository) throws IOException {
+ List entries = scanWithRename(repository, pathFilter, treeWalk);
+ return new Diff(commit, entries);
+ }
+
+ static List scanWithRename(Repository repository, PathFilter pathFilter, TreeWalk treeWalk) throws IOException {
+ List entries;
try (DiffFormatter diffFormatter = new DiffFormatter(null)) {
diffFormatter.setRepository(repository);
diffFormatter.setDetectRenames(true);
if (pathFilter != null) {
diffFormatter.setPathFilter(pathFilter);
}
- List entries = diffFormatter.scan(
+ entries = diffFormatter.scan(
treeWalk.getTree(0, AbstractTreeIterator.class),
treeWalk.getTree(1, AbstractTreeIterator.class));
- return new Diff(commit, entries);
}
+ return entries;
}
@Override
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java
index 3839c98959..d04e8293ca 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java
@@ -34,10 +34,13 @@ import org.eclipse.jgit.treewalk.EmptyTreeIterator;
import org.eclipse.jgit.treewalk.TreeWalk;
import sonia.scm.repository.GitUtil;
import sonia.scm.repository.InternalRepositoryException;
+import sonia.scm.repository.Modification;
import sonia.scm.repository.Modifications;
import java.io.IOException;
import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import static sonia.scm.ContextEntry.ContextBuilder.entity;
@@ -72,15 +75,14 @@ public class GitModificationsCommand extends AbstractGitCommand implements Modif
treeWalk.addTree(new EmptyTreeIterator());
}
treeWalk.addTree(commit.getTree());
- List entries = DiffEntry.scan(treeWalk);
- Modifications modifications = new Modifications();
+ List entries = Differ.scanWithRename(context.open(), null, treeWalk);
+ Collection modifications = new ArrayList<>();
for (DiffEntry e : entries) {
- if (!e.getOldId().equals(e.getNewId())) {
- appendModification(modifications, e);
+ if (!e.getOldId().equals(e.getNewId()) || !e.getOldPath().equals(e.getNewPath())) {
+ modifications.add(asModification(e));
}
}
- modifications.setRevision(revision);
- return modifications;
+ return new Modifications(revision, modifications);
}
@Override
@@ -111,16 +113,19 @@ public class GitModificationsCommand extends AbstractGitCommand implements Modif
return getModifications(request.getRevision());
}
- private void appendModification(Modifications modifications, DiffEntry entry) throws UnsupportedModificationTypeException {
+ private Modification asModification(DiffEntry entry) throws UnsupportedModificationTypeException {
DiffEntry.ChangeType type = entry.getChangeType();
- if (type == DiffEntry.ChangeType.ADD) {
- modifications.getAdded().add(entry.getNewPath());
- } else if (type == DiffEntry.ChangeType.MODIFY) {
- modifications.getModified().add(entry.getNewPath());
- } else if (type == DiffEntry.ChangeType.DELETE) {
- modifications.getRemoved().add(entry.getOldPath());
- } else {
- throw new UnsupportedModificationTypeException(entity(repository), MessageFormat.format("The modification type: {0} is not supported.", type));
+ switch (type) {
+ case ADD:
+ return new Modification.Added(entry.getNewPath());
+ case MODIFY:
+ return new Modification.Modified(entry.getNewPath());
+ case DELETE:
+ return new Modification.Removed(entry.getOldPath());
+ case RENAME:
+ return new Modification.Renamed(entry.getOldPath(), entry.getNewPath());
+ default:
+ throw new UnsupportedModificationTypeException(entity(repository), MessageFormat.format("The modification type: {0} is not supported.", type));
}
}
}
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java
index 38ab4e0ebb..61c2009405 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitLogCommandTest.java
@@ -39,11 +39,11 @@ import java.io.File;
import java.io.IOException;
import static java.nio.charset.Charset.defaultCharset;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.contains;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
@@ -188,7 +188,9 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
assertTrue("removed list should be empty", modifications.getRemoved().isEmpty());
assertFalse("added list should not be empty", modifications.getAdded().isEmpty());
assertEquals(2, modifications.getAdded().size());
- assertThat(modifications.getAdded(), contains("a.txt", "b.txt"));
+ assertThat(modifications.getAdded())
+ .extracting("path")
+ .containsExactly("a.txt", "b.txt");
}
@Test
@@ -198,14 +200,14 @@ public class GitLogCommandTest extends AbstractGitCommandTestBase
GitLogCommand command = createCommand();
Changeset c = command.getChangeset("435df2f061add3589cb3", request);
- Assertions.assertThat(c.getBranches()).containsOnly("master");
+ assertThat(c.getBranches()).containsOnly("master");
}
@Test
public void shouldNotReturnCommitFromDifferentBranch() {
when(request.getBranch()).thenReturn("master");
Changeset changeset = createCommand().getChangeset("3f76a12f08a6ba0dc988c68b7f0b2cd190efc3c4", request);
- Assertions.assertThat(changeset).isNull();
+ assertThat(changeset).isNull();
}
@Test
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java
index 8586b26cfb..f8e7be6fd4 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java
@@ -40,6 +40,7 @@ import org.junit.jupiter.api.Assertions;
import sonia.scm.NoChangesMadeException;
import sonia.scm.NotFoundException;
import sonia.scm.repository.GitWorkdirFactory;
+import sonia.scm.repository.Modification;
import sonia.scm.repository.Person;
import sonia.scm.repository.api.MergeCommandResult;
import sonia.scm.repository.api.MergeStrategy;
@@ -318,7 +319,7 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase {
assertThat(message).isEqualTo("squash three commits");
GitModificationsCommand modificationsCommand = new GitModificationsCommand(createContext());
- List changes = modificationsCommand.getModifications("master").getAdded();
+ List changes = modificationsCommand.getModifications("master").getAdded();
assertThat(changes.size()).isEqualTo(3);
}
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java
index e6ac22d32c..1657191d21 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java
@@ -86,6 +86,25 @@ public class GitModificationsCommandTest extends AbstractRemoteCommandTestBase {
assertModifications.accept(outgoingModificationsCommand.getModifications(revision));
}
+ @Test
+ public void shouldReadRenamedFiles() throws Exception {
+ String originalFile = "a.txt";
+ write(outgoing, outgoingDirectory, originalFile, "bal bla");
+ commit(outgoing, "add file");
+ write(outgoing, outgoingDirectory, "b.txt", "bal bla");
+ File file = new File(outgoingDirectory, originalFile);
+ file.delete();
+ outgoing.rm().addFilepattern(originalFile).call();
+
+ RevCommit modifiedFileCommit = commit(outgoing, "rename file");
+ String revision = modifiedFileCommit.getName();
+
+ Consumer assertModifications = assertRenamedFiles("b.txt");
+ assertModifications.accept(outgoingModificationsCommand.getModifications(revision));
+ pushOutgoingAndPullIncoming();
+ assertModifications.accept(incomingModificationsCommand.getModifications(revision));
+ }
+
void pushOutgoingAndPullIncoming() throws IOException {
GitPushCommand cmd = new GitPushCommand(handler, new GitContext(outgoingDirectory, outgoingRepository, null));
PushCommandRequest request = new PushCommandRequest();
@@ -102,31 +121,62 @@ public class GitModificationsCommandTest extends AbstractRemoteCommandTestBase {
assertThat(modifications).isNotNull();
assertThat(modifications.getAdded())
.as("added files modifications")
- .hasSize(0);
+ .asList()
+ .isEmpty();
assertThat(modifications.getModified())
.as("modified files modifications")
- .hasSize(0);
+ .asList()
+ .isEmpty();
assertThat(modifications.getRemoved())
.as("removed files modifications")
+ .asList()
.hasSize(1)
+ .extracting("path")
.containsOnly(fileName);
};
}
+ Consumer assertRenamedFiles(String fileName) {
+ return (modifications) -> {
+ assertThat(modifications).isNotNull();
+ assertThat(modifications.getAdded())
+ .as("added files modifications")
+ .asList()
+ .isEmpty();
+ assertThat(modifications.getModified())
+ .as("modified files modifications")
+ .asList()
+ .isEmpty();
+ assertThat(modifications.getRemoved())
+ .as("removed files modifications")
+ .asList()
+ .isEmpty();
+ assertThat(modifications.getRenamed())
+ .as("renamed files modifications")
+ .asList()
+ .hasSize(1)
+ .extracting("newPath")
+ .containsOnly(fileName);
+ };
+ }
Consumer assertModifiedFiles(String file) {
return (modifications) -> {
assertThat(modifications).isNotNull();
assertThat(modifications.getAdded())
.as("added files modifications")
- .hasSize(0);
+ .asList()
+ .isEmpty();
assertThat(modifications.getModified())
.as("modified files modifications")
+ .asList()
+ .extracting("path")
.hasSize(1)
.containsOnly(file);
assertThat(modifications.getRemoved())
.as("removed files modifications")
- .hasSize(0);
+ .asList()
+ .isEmpty();
};
}
@@ -135,14 +185,18 @@ public class GitModificationsCommandTest extends AbstractRemoteCommandTestBase {
assertThat(modifications).isNotNull();
assertThat(modifications.getAdded())
.as("added files modifications")
+ .asList()
.hasSize(1)
+ .extracting("path")
.containsOnly(file);
assertThat(modifications.getModified())
.as("modified files modifications")
- .hasSize(0);
+ .asList()
+ .isEmpty();
assertThat(modifications.getRemoved())
.as("removed files modifications")
- .hasSize(0);
+ .asList()
+ .isEmpty();
};
}
}
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModificationsCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModificationsCommand.java
index f9c7a3e1d1..157529baf5 100644
--- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModificationsCommand.java
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModificationsCommand.java
@@ -24,9 +24,12 @@
package sonia.scm.repository.spi;
+import sonia.scm.repository.Modification;
import sonia.scm.repository.Modifications;
import sonia.scm.repository.spi.javahg.HgLogChangesetCommand;
+import java.util.Collection;
+
public class HgModificationsCommand extends AbstractCommand implements ModificationsCommand {
HgModificationsCommand(HgCommandContext context) {
@@ -38,9 +41,8 @@ public class HgModificationsCommand extends AbstractCommand implements Modificat
public Modifications getModifications(String revision) {
com.aragost.javahg.Repository repository = open();
HgLogChangesetCommand hgLogChangesetCommand = HgLogChangesetCommand.on(repository, getContext().getConfig());
- Modifications modifications = hgLogChangesetCommand.rev(revision).extractModifications();
- modifications.setRevision(revision);
- return modifications;
+ Collection modifications = hgLogChangesetCommand.rev(revision).extractModifications();
+ return new Modifications(revision, modifications);
}
@Override
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java
index 4de460d20a..be2172f2fd 100644
--- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.spi.javahg;
//~--- non-JDK imports --------------------------------------------------------
@@ -36,10 +36,13 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.HgConfig;
+import sonia.scm.repository.Modification;
import sonia.scm.repository.Modifications;
import sonia.scm.repository.Person;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
//~--- JDK imports ------------------------------------------------------------
@@ -251,7 +254,7 @@ public abstract class AbstractChangesetCommand extends AbstractCommand
return changeset;
}
- protected Modifications readModificationsFromStream(HgInputStream in) {
+ protected Collection readModificationsFromStream(HgInputStream in) {
try {
boolean found = in.find(CHANGESET_PATTERN);
if (found) {
@@ -265,16 +268,16 @@ public abstract class AbstractChangesetCommand extends AbstractCommand
return null;
}
- private Modifications extractModifications(HgInputStream in) throws IOException {
- Modifications modifications = new Modifications();
+ private Collection extractModifications(HgInputStream in) throws IOException {
+ Collection modifications = new ArrayList<>();
String line = in.textUpTo('\n');
while (line.length() > 0) {
if (line.startsWith("a ")) {
- modifications.getAdded().add(line.substring(2));
+ modifications.add(new Modification.Added(line.substring(2)));
} else if (line.startsWith("m ")) {
- modifications.getModified().add(line.substring(2));
+ modifications.add(new Modification.Modified(line.substring(2)));
} else if (line.startsWith("d ")) {
- modifications.getRemoved().add(line.substring(2));
+ modifications.add(new Modification.Removed(line.substring(2)));
}
line = in.textUpTo('\n');
}
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java
index 418772b39f..923132fe07 100644
--- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgLogChangesetCommand.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.spi.javahg;
import com.aragost.javahg.Repository;
@@ -31,9 +31,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.HgConfig;
-import sonia.scm.repository.Modifications;
+import sonia.scm.repository.Modification;
import java.io.IOException;
+import java.util.Collection;
import java.util.List;
/**
@@ -64,7 +65,7 @@ public class HgLogChangesetCommand extends AbstractChangesetCommand {
return readListFromStream(getHgInputStream(files, CHANGESET_EAGER_STYLE_PATH));
}
- public Modifications extractModifications(String... files) {
+ public Collection extractModifications(String... files) {
HgInputStream hgInputStream = getHgInputStream(files, CHANGESET_EAGER_STYLE_PATH);
try {
return readModificationsFromStream(hgInputStream);
diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgLogCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgLogCommandTest.java
index efb3919455..d548ebf75e 100644
--- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgLogCommandTest.java
+++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgLogCommandTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.spi;
//~--- non-JDK imports --------------------------------------------------------
@@ -33,11 +33,10 @@ import sonia.scm.repository.Modifications;
import java.io.IOException;
-import static org.hamcrest.Matchers.contains;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
//~--- JDK imports ------------------------------------------------------------
@@ -162,7 +161,9 @@ public class HgLogCommandTest extends AbstractHgCommandTestBase
assertTrue("removed list should be empty", modifications.getRemoved().isEmpty());
assertFalse("added list should not be empty", modifications.getAdded().isEmpty());
assertEquals(2, modifications.getAdded().size());
- assertThat(modifications.getAdded(), contains("a.txt", "b.txt"));
+ assertThat(modifications.getAdded())
+ .extracting("path")
+ .containsExactly("a.txt", "b.txt");
}
@Test
diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java
index c257dc611a..993b8a6fb9 100644
--- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java
+++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.spi;
import com.aragost.javahg.Changeset;
@@ -96,6 +96,7 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase {
assertThat(modifications.getRemoved())
.as("removed files modifications")
.hasSize(1)
+ .extracting("path")
.containsOnly(fileName);
};
}
@@ -110,6 +111,7 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase {
assertThat(modifications.getModified())
.as("modified files modifications")
.hasSize(1)
+ .extracting("path")
.containsOnly(file);
assertThat(modifications.getRemoved())
.as("removed files modifications")
@@ -123,6 +125,7 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase {
assertThat(modifications.getAdded())
.as("added files modifications")
.hasSize(1)
+ .extracting("path")
.containsOnly(addedFile);
assertThat(modifications.getModified())
.as("modified files modifications")
diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java
index 58cc319e2a..40a5ee5a69 100644
--- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java
+++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository;
//~--- non-JDK imports --------------------------------------------------------
@@ -49,7 +49,11 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import static java.util.Collections.emptyList;
+import static java.util.Optional.empty;
import static sonia.scm.ContextEntry.ContextBuilder.entity;
import static sonia.scm.NotFoundException.notFound;
@@ -116,30 +120,23 @@ public final class SvnUtil
public static Modifications createModifications(SVNLogEntry entry, String revision) {
- Modifications modifications = new Modifications();
- modifications.setRevision(revision);
Map changeMap = entry.getChangedPaths();
+ List modificationList;
if (Util.isNotEmpty(changeMap)) {
-
- for (SVNLogEntryPath e : changeMap.values()) {
- appendModification(modifications, e.getType(), e.getPath());
- }
+ modificationList = changeMap.values().stream()
+ .map(e -> asModification(e.getType(), e.getPath()))
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .collect(Collectors.toList());
+ } else {
+ modificationList = emptyList();
}
- return modifications;
+
+ return new Modifications(revision, modificationList);
}
- /**
- * Method description
- *
- *
- * @param modifications
- * @param type
- * @param path
- */
- public static void appendModification(Modifications modifications, char type,
- String path)
- {
+ public static Optional asModification(char type, String path) {
if (path.startsWith("/"))
{
path = path.substring(1);
@@ -148,23 +145,18 @@ public final class SvnUtil
switch (type)
{
case SVNLogEntryPath.TYPE_ADDED :
- modifications.getAdded().add(path);
-
- break;
+ return Optional.of(new Modification.Added(path));
case SVNLogEntryPath.TYPE_DELETED :
- modifications.getRemoved().add(path);
-
- break;
+ return Optional.of(new Modification.Removed(path));
case TYPE_UPDATED :
case SVNLogEntryPath.TYPE_MODIFIED :
- modifications.getModified().add(path);
-
- break;
+ return Optional.of(new Modification.Modified(path));
default :
logger.debug("unknown modification type {}", type);
+ return empty();
}
}
diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java
index 97c44ce747..8daebf9245 100644
--- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java
+++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnModificationsCommand.java
@@ -31,10 +31,12 @@ import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.wc.SVNClientManager;
import org.tmatesoft.svn.core.wc.admin.SVNLookClient;
import sonia.scm.repository.InternalRepositoryException;
+import sonia.scm.repository.Modification;
import sonia.scm.repository.Modifications;
import sonia.scm.repository.SvnUtil;
import sonia.scm.util.Util;
+import java.util.ArrayList;
import java.util.Collection;
@Slf4j
@@ -78,12 +80,12 @@ public class SvnModificationsCommand extends AbstractSvnCommand implements Modif
private Modifications getModificationsFromTransaction(String transaction) throws SVNException {
log.debug("get svn modifications from transaction: {}", transaction);
- final Modifications modifications = new Modifications();
SVNLookClient client = SVNClientManager.newInstance().getLookClient();
+ Collection modificationList = new ArrayList<>();
client.doGetChanged(context.getDirectory(), transaction,
- e -> SvnUtil.appendModification(modifications, e.getType(), e.getPath()), true);
+ e -> SvnUtil.asModification(e.getType(), e.getPath()).ifPresent(modificationList::add), true);
- return modifications;
+ return new Modifications(null, modificationList);
}
@Override
diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnLogCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnLogCommandTest.java
index 52162419fa..cab001573b 100644
--- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnLogCommandTest.java
+++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnLogCommandTest.java
@@ -143,8 +143,8 @@ public class SvnLogCommandTest extends AbstractSvnCommandTestBase
assertEquals(1, modifications.getModified().size());
assertEquals(1, modifications.getRemoved().size());
assertTrue("added list should be empty", modifications.getAdded().isEmpty());
- assertEquals("a.txt", modifications.getModified().get(0));
- assertEquals("b.txt", modifications.getRemoved().get(0));
+ assertEquals("a.txt", modifications.getModified().get(0).getPath());
+ assertEquals("b.txt", modifications.getRemoved().get(0).getPath());
}
@Test
diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsDto.java
index 9dbfb5707d..d826ece42c 100644
--- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsDto.java
+++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsDto.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.api.v2.resources;
import de.otto.edison.hal.HalRepresentation;
@@ -54,10 +54,21 @@ public class ModificationsDto extends HalRepresentation {
*/
private List removed;
+ /**
+ * Mapping of renamed files
+ */
+ private List renamed;
+
@Override
@SuppressWarnings("squid:S1185") // We want to have this method available in this package
protected HalRepresentation add(Links links) {
return super.add(links);
}
+ @Getter
+ @Setter
+ public static class RenamedDto {
+ private String oldPath;
+ private String newPath;
+ }
}
diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java
index e393265c26..0e9f169f53 100644
--- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java
+++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.api.v2.resources;
import de.otto.edison.hal.Links;
@@ -30,6 +30,7 @@ import org.mapstruct.Context;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
+import sonia.scm.repository.Modification;
import sonia.scm.repository.Modifications;
import sonia.scm.repository.Repository;
@@ -52,4 +53,18 @@ public abstract class ModificationsToDtoMapper {
.self(resourceLinks.modifications().self(repository.getNamespace(), repository.getName(), target.getRevision()));
target.add(linksBuilder.build());
}
+
+ String map(Modification.Added added) {
+ return added.getPath();
+ }
+
+ String map(Modification.Removed removed) {
+ return removed.getPath();
+ }
+
+ String map(Modification.Modified modified) {
+ return modified.getPath();
+ }
+
+ abstract ModificationsDto.RenamedDto map(Modification.Renamed renamed);
}
diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java
index 23893f9f95..3697330587 100644
--- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.api.v2.resources;
import com.google.inject.util.Providers;
@@ -30,7 +30,6 @@ import org.apache.shiro.subject.Subject;
import org.apache.shiro.subject.support.SubjectThreadState;
import org.apache.shiro.util.ThreadContext;
import org.apache.shiro.util.ThreadState;
-import org.assertj.core.util.Lists;
import org.jboss.resteasy.mock.MockHttpRequest;
import org.jboss.resteasy.mock.MockHttpResponse;
import org.junit.After;
@@ -41,6 +40,9 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import sonia.scm.repository.InternalRepositoryException;
+import sonia.scm.repository.Modification.Added;
+import sonia.scm.repository.Modification.Modified;
+import sonia.scm.repository.Modification.Removed;
import sonia.scm.repository.Modifications;
import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Repository;
@@ -141,7 +143,6 @@ public class ModificationsResourceTest extends RepositoryTestBase {
@Test
public void shouldGetModifications() throws Exception {
- Modifications modifications = new Modifications();
String revision = "revision";
String addedFile_1 = "a.txt";
String addedFile_2 = "b.txt";
@@ -149,10 +150,13 @@ public class ModificationsResourceTest extends RepositoryTestBase {
String modifiedFile_2 = "c.txt";
String removedFile_1 = "e.txt";
String removedFile_2 = "f.txt";
- modifications.setRevision(revision);
- modifications.setAdded(Lists.newArrayList(addedFile_1, addedFile_2));
- modifications.setModified(Lists.newArrayList(modifiedFile_1, modifiedFile_2));
- modifications.setRemoved(Lists.newArrayList(removedFile_1, removedFile_2));
+ Modifications modifications = new Modifications(revision,
+ new Added(addedFile_1),
+ new Added(addedFile_2),
+ new Modified(modifiedFile_1),
+ new Modified(modifiedFile_2),
+ new Removed(removedFile_1),
+ new Removed(removedFile_2));
when(modificationsCommandBuilder.getModifications()).thenReturn(modifications);
when(modificationsCommandBuilder.revision(eq(revision))).thenReturn(modificationsCommandBuilder);
From 74b959e4514e1d1a8341f59963857bfc9958dab0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Fri, 15 May 2020 13:03:52 +0200
Subject: [PATCH 19/54] handle both paths as effected for rename
---
.../sonia/scm/repository/Modification.java | 25 ++++---
.../sonia/scm/repository/Modifications.java | 8 +-
.../scm/repository/ModificationsTest.java | 73 +++++++++++++++++++
3 files changed, 93 insertions(+), 13 deletions(-)
create mode 100644 scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java
diff --git a/scm-core/src/main/java/sonia/scm/repository/Modification.java b/scm-core/src/main/java/sonia/scm/repository/Modification.java
index 94d74ae722..2b675230fa 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Modification.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Modification.java
@@ -28,6 +28,9 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import java.io.Serializable;
+import java.util.stream.Stream;
+
+import static java.util.stream.Stream.of;
public interface Modification extends EffectedPath, Serializable {
@@ -37,8 +40,8 @@ public interface Modification extends EffectedPath, Serializable {
private final String path;
@Override
- public String getEffectedPath() {
- return path;
+ public Stream getEffectedPaths() {
+ return of(path);
}
}
@@ -48,8 +51,8 @@ public interface Modification extends EffectedPath, Serializable {
private final String path;
@Override
- public String getEffectedPath() {
- return path;
+ public Stream getEffectedPaths() {
+ return of(path);
}
}
@@ -59,8 +62,8 @@ public interface Modification extends EffectedPath, Serializable {
private final String path;
@Override
- public String getEffectedPath() {
- return path;
+ public Stream getEffectedPaths() {
+ return of(path);
}
}
@@ -71,8 +74,8 @@ public interface Modification extends EffectedPath, Serializable {
private final String newPath;
@Override
- public String getEffectedPath() {
- return newPath;
+ public Stream getEffectedPaths() {
+ return of(oldPath, newPath);
}
}
@@ -83,12 +86,12 @@ public interface Modification extends EffectedPath, Serializable {
private final String targetPath;
@Override
- public String getEffectedPath() {
- return targetPath;
+ public Stream getEffectedPaths() {
+ return of(targetPath);
}
}
}
interface EffectedPath {
- String getEffectedPath();
+ Stream getEffectedPaths();
}
diff --git a/scm-core/src/main/java/sonia/scm/repository/Modifications.java b/scm-core/src/main/java/sonia/scm/repository/Modifications.java
index ce43fe58f8..891bf50216 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Modifications.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Modifications.java
@@ -25,7 +25,6 @@
package sonia.scm.repository;
import com.google.common.collect.ImmutableList;
-import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
@@ -33,6 +32,7 @@ import lombok.ToString;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
+import java.util.stream.Stream;
import static java.util.Arrays.asList;
import static java.util.stream.Collectors.toList;
@@ -57,7 +57,11 @@ public class Modifications implements Serializable {
}
public List getEffectedPaths() {
- return modifications.stream().map(Modification::getEffectedPath).collect(toList());
+ return effectedPathsStream().collect(toList());
+ }
+
+ public Stream effectedPathsStream() {
+ return modifications.stream().flatMap(Modification::getEffectedPaths);
}
public List getAdded() {
diff --git a/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java b/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java
new file mode 100644
index 0000000000..2832d8f5ef
--- /dev/null
+++ b/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java
@@ -0,0 +1,73 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository;
+
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.*;
+
+class ModificationsTest {
+
+ public static final Modifications MODIFICATIONS = new Modifications("123",
+ new Modification.Added("added"),
+ new Modification.Removed("removed"),
+ new Modification.Modified("modified"),
+ new Modification.Renamed("rename from", "rename to"),
+ new Modification.Copied("copy from", "copy to")
+ );
+
+ @Test
+ void shouldFindAddedFilesAsEffected() {
+ assertThat(MODIFICATIONS.getEffectedPaths())
+ .contains("added");
+ }
+
+ @Test
+ void shouldFindRemovedFilesAsEffected() {
+ assertThat(MODIFICATIONS.getEffectedPaths())
+ .contains("removed");
+ }
+
+ @Test
+ void shouldFindModifiedFilesAsEffected() {
+ assertThat(MODIFICATIONS.getEffectedPaths())
+ .contains("modified");
+ }
+
+ @Test
+ void shouldFindRenamedFilesAsEffected() {
+ assertThat(MODIFICATIONS.getEffectedPaths())
+ .contains("rename from", "rename to");
+ }
+
+ @Test
+ void shouldFindTargetOfCopiedFilesAsEffected() {
+ assertThat(MODIFICATIONS.getEffectedPaths())
+ .contains("copy to")
+ .doesNotContain("copy from");
+ }
+}
From c722565109615b46b4c25044becc69ad7de186f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Fri, 15 May 2020 14:33:04 +0200
Subject: [PATCH 20/54] Hide `getEffectedPaths` for other packages
---
.../main/java/sonia/scm/repository/Added.java | 43 ++++++++++++
.../java/sonia/scm/repository/Copied.java | 44 ++++++++++++
.../sonia/scm/repository/EffectedPath.java | 31 +++++++++
.../sonia/scm/repository/Modification.java | 69 +------------------
.../sonia/scm/repository/Modifications.java | 30 ++++----
.../java/sonia/scm/repository/Modified.java | 43 ++++++++++++
.../java/sonia/scm/repository/Removed.java | 43 ++++++++++++
.../java/sonia/scm/repository/Renamed.java | 44 ++++++++++++
.../scm/repository/ModificationsTest.java | 12 ++--
.../spi/GitModificationsCommand.java | 12 ++--
.../repository/spi/GitMergeCommandTest.java | 4 +-
.../spi/javahg/AbstractChangesetCommand.java | 9 ++-
.../java/sonia/scm/repository/SvnUtil.java | 6 +-
.../resources/ModificationsToDtoMapper.java | 13 ++--
.../resources/ModificationsResourceTest.java | 6 +-
15 files changed, 299 insertions(+), 110 deletions(-)
create mode 100644 scm-core/src/main/java/sonia/scm/repository/Added.java
create mode 100644 scm-core/src/main/java/sonia/scm/repository/Copied.java
create mode 100644 scm-core/src/main/java/sonia/scm/repository/EffectedPath.java
create mode 100644 scm-core/src/main/java/sonia/scm/repository/Modified.java
create mode 100644 scm-core/src/main/java/sonia/scm/repository/Removed.java
create mode 100644 scm-core/src/main/java/sonia/scm/repository/Renamed.java
diff --git a/scm-core/src/main/java/sonia/scm/repository/Added.java b/scm-core/src/main/java/sonia/scm/repository/Added.java
new file mode 100644
index 0000000000..a5ccf848b4
--- /dev/null
+++ b/scm-core/src/main/java/sonia/scm/repository/Added.java
@@ -0,0 +1,43 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.stream.Stream;
+
+import static java.util.stream.Stream.of;
+
+@Getter
+@AllArgsConstructor
+public class Added extends Modification {
+ private final String path;
+
+ @Override
+ Stream getEffectedPaths() {
+ return of(path);
+ }
+}
diff --git a/scm-core/src/main/java/sonia/scm/repository/Copied.java b/scm-core/src/main/java/sonia/scm/repository/Copied.java
new file mode 100644
index 0000000000..841136a035
--- /dev/null
+++ b/scm-core/src/main/java/sonia/scm/repository/Copied.java
@@ -0,0 +1,44 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.stream.Stream;
+
+import static java.util.stream.Stream.of;
+
+@Getter
+@AllArgsConstructor
+public class Copied extends Modification {
+ private final String sourcePath;
+ private final String targetPath;
+
+ @Override
+ Stream getEffectedPaths() {
+ return of(targetPath);
+ }
+}
diff --git a/scm-core/src/main/java/sonia/scm/repository/EffectedPath.java b/scm-core/src/main/java/sonia/scm/repository/EffectedPath.java
new file mode 100644
index 0000000000..e591a47ac5
--- /dev/null
+++ b/scm-core/src/main/java/sonia/scm/repository/EffectedPath.java
@@ -0,0 +1,31 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository;
+
+import java.util.stream.Stream;
+
+abstract class EffectedPath {
+ abstract Stream getEffectedPaths();
+}
diff --git a/scm-core/src/main/java/sonia/scm/repository/Modification.java b/scm-core/src/main/java/sonia/scm/repository/Modification.java
index 2b675230fa..7bb41e0573 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Modification.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Modification.java
@@ -24,74 +24,7 @@
package sonia.scm.repository;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
import java.io.Serializable;
-import java.util.stream.Stream;
-import static java.util.stream.Stream.of;
-
-public interface Modification extends EffectedPath, Serializable {
-
- @Getter
- @AllArgsConstructor
- class Added implements Modification {
- private final String path;
-
- @Override
- public Stream getEffectedPaths() {
- return of(path);
- }
- }
-
- @Getter
- @AllArgsConstructor
- class Removed implements Modification {
- private final String path;
-
- @Override
- public Stream getEffectedPaths() {
- return of(path);
- }
- }
-
- @Getter
- @AllArgsConstructor
- class Modified implements Modification {
- private final String path;
-
- @Override
- public Stream getEffectedPaths() {
- return of(path);
- }
- }
-
- @Getter
- @AllArgsConstructor
- class Renamed implements Modification {
- private final String oldPath;
- private final String newPath;
-
- @Override
- public Stream getEffectedPaths() {
- return of(oldPath, newPath);
- }
- }
-
- @Getter
- @AllArgsConstructor
- class Copied implements Modification {
- private final String sourcePath;
- private final String targetPath;
-
- @Override
- public Stream getEffectedPaths() {
- return of(targetPath);
- }
- }
-}
-
-interface EffectedPath {
- Stream getEffectedPaths();
+public abstract class Modification extends EffectedPath implements Serializable {
}
diff --git a/scm-core/src/main/java/sonia/scm/repository/Modifications.java b/scm-core/src/main/java/sonia/scm/repository/Modifications.java
index 891bf50216..42f1d85aef 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Modifications.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Modifications.java
@@ -64,38 +64,38 @@ public class Modifications implements Serializable {
return modifications.stream().flatMap(Modification::getEffectedPaths);
}
- public List getAdded() {
+ public List getAdded() {
return modifications.stream()
- .filter(m -> m instanceof Modification.Added)
- .map(m -> (Modification.Added) m)
+ .filter(m -> m instanceof Added)
+ .map(m -> (Added) m)
.collect(toList());
}
- public List getRemoved() {
+ public List getRemoved() {
return modifications.stream()
- .filter(m -> m instanceof Modification.Removed)
- .map(m -> (Modification.Removed) m)
+ .filter(m -> m instanceof Removed)
+ .map(m -> (Removed) m)
.collect(toList());
}
- public List getModified() {
+ public List getModified() {
return modifications.stream()
- .filter(m -> m instanceof Modification.Modified)
- .map(m -> (Modification.Modified) m)
+ .filter(m -> m instanceof Modified)
+ .map(m -> (Modified) m)
.collect(toList());
}
- public List getRenamed() {
+ public List getRenamed() {
return modifications.stream()
- .filter(m -> m instanceof Modification.Renamed)
- .map(m -> (Modification.Renamed) m)
+ .filter(m -> m instanceof Renamed)
+ .map(m -> (Renamed) m)
.collect(toList());
}
- public List getCopied() {
+ public List getCopied() {
return modifications.stream()
- .filter(m -> m instanceof Modification.Copied)
- .map(m -> (Modification.Copied) m)
+ .filter(m -> m instanceof Copied)
+ .map(m -> (Copied) m)
.collect(toList());
}
}
diff --git a/scm-core/src/main/java/sonia/scm/repository/Modified.java b/scm-core/src/main/java/sonia/scm/repository/Modified.java
new file mode 100644
index 0000000000..6c0d7150a7
--- /dev/null
+++ b/scm-core/src/main/java/sonia/scm/repository/Modified.java
@@ -0,0 +1,43 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.stream.Stream;
+
+import static java.util.stream.Stream.of;
+
+@Getter
+@AllArgsConstructor
+public class Modified extends Modification {
+ private final String path;
+
+ @Override
+ Stream getEffectedPaths() {
+ return of(path);
+ }
+}
diff --git a/scm-core/src/main/java/sonia/scm/repository/Removed.java b/scm-core/src/main/java/sonia/scm/repository/Removed.java
new file mode 100644
index 0000000000..7b8e23021f
--- /dev/null
+++ b/scm-core/src/main/java/sonia/scm/repository/Removed.java
@@ -0,0 +1,43 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.stream.Stream;
+
+import static java.util.stream.Stream.of;
+
+@Getter
+@AllArgsConstructor
+public class Removed extends Modification {
+ private final String path;
+
+ @Override
+ Stream getEffectedPaths() {
+ return of(path);
+ }
+}
diff --git a/scm-core/src/main/java/sonia/scm/repository/Renamed.java b/scm-core/src/main/java/sonia/scm/repository/Renamed.java
new file mode 100644
index 0000000000..d00c01c6b6
--- /dev/null
+++ b/scm-core/src/main/java/sonia/scm/repository/Renamed.java
@@ -0,0 +1,44 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.stream.Stream;
+
+import static java.util.stream.Stream.of;
+
+@Getter
+@AllArgsConstructor
+public class Renamed extends Modification {
+ private final String oldPath;
+ private final String newPath;
+
+ @Override
+ Stream getEffectedPaths() {
+ return of(oldPath, newPath);
+ }
+}
diff --git a/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java b/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java
index 2832d8f5ef..f6023248e4 100644
--- a/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java
+++ b/scm-core/src/test/java/sonia/scm/repository/ModificationsTest.java
@@ -24,20 +24,18 @@
package sonia.scm.repository;
-import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.*;
class ModificationsTest {
public static final Modifications MODIFICATIONS = new Modifications("123",
- new Modification.Added("added"),
- new Modification.Removed("removed"),
- new Modification.Modified("modified"),
- new Modification.Renamed("rename from", "rename to"),
- new Modification.Copied("copy from", "copy to")
+ new Added("added"),
+ new Removed("removed"),
+ new Modified("modified"),
+ new Renamed("rename from", "rename to"),
+ new Copied("copy from", "copy to")
);
@Test
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java
index d04e8293ca..918d276148 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java
@@ -32,10 +32,14 @@ import org.eclipse.jgit.revwalk.RevTree;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.treewalk.EmptyTreeIterator;
import org.eclipse.jgit.treewalk.TreeWalk;
+import sonia.scm.repository.Added;
import sonia.scm.repository.GitUtil;
import sonia.scm.repository.InternalRepositoryException;
import sonia.scm.repository.Modification;
import sonia.scm.repository.Modifications;
+import sonia.scm.repository.Modified;
+import sonia.scm.repository.Removed;
+import sonia.scm.repository.Renamed;
import java.io.IOException;
import java.text.MessageFormat;
@@ -117,13 +121,13 @@ public class GitModificationsCommand extends AbstractGitCommand implements Modif
DiffEntry.ChangeType type = entry.getChangeType();
switch (type) {
case ADD:
- return new Modification.Added(entry.getNewPath());
+ return new Added(entry.getNewPath());
case MODIFY:
- return new Modification.Modified(entry.getNewPath());
+ return new Modified(entry.getNewPath());
case DELETE:
- return new Modification.Removed(entry.getOldPath());
+ return new Removed(entry.getOldPath());
case RENAME:
- return new Modification.Renamed(entry.getOldPath(), entry.getNewPath());
+ return new Renamed(entry.getOldPath(), entry.getNewPath());
default:
throw new UnsupportedModificationTypeException(entity(repository), MessageFormat.format("The modification type: {0} is not supported.", type));
}
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java
index f8e7be6fd4..ed21f683fb 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java
@@ -39,8 +39,8 @@ import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import sonia.scm.NoChangesMadeException;
import sonia.scm.NotFoundException;
+import sonia.scm.repository.Added;
import sonia.scm.repository.GitWorkdirFactory;
-import sonia.scm.repository.Modification;
import sonia.scm.repository.Person;
import sonia.scm.repository.api.MergeCommandResult;
import sonia.scm.repository.api.MergeStrategy;
@@ -319,7 +319,7 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase {
assertThat(message).isEqualTo("squash three commits");
GitModificationsCommand modificationsCommand = new GitModificationsCommand(createContext());
- List changes = modificationsCommand.getModifications("master").getAdded();
+ List changes = modificationsCommand.getModifications("master").getAdded();
assertThat(changes.size()).isEqualTo(3);
}
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java
index be2172f2fd..18ba2c8390 100644
--- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java
@@ -34,11 +34,14 @@ import com.aragost.javahg.internals.RuntimeIOException;
import com.aragost.javahg.internals.Utils;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
+import sonia.scm.repository.Added;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.HgConfig;
import sonia.scm.repository.Modification;
import sonia.scm.repository.Modifications;
+import sonia.scm.repository.Modified;
import sonia.scm.repository.Person;
+import sonia.scm.repository.Removed;
import java.io.IOException;
import java.util.ArrayList;
@@ -273,11 +276,11 @@ public abstract class AbstractChangesetCommand extends AbstractCommand
String line = in.textUpTo('\n');
while (line.length() > 0) {
if (line.startsWith("a ")) {
- modifications.add(new Modification.Added(line.substring(2)));
+ modifications.add(new Added(line.substring(2)));
} else if (line.startsWith("m ")) {
- modifications.add(new Modification.Modified(line.substring(2)));
+ modifications.add(new Modified(line.substring(2)));
} else if (line.startsWith("d ")) {
- modifications.add(new Modification.Removed(line.substring(2)));
+ modifications.add(new Removed(line.substring(2)));
}
line = in.textUpTo('\n');
}
diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java
index 40a5ee5a69..26a851d1e2 100644
--- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java
+++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java
@@ -145,14 +145,14 @@ public final class SvnUtil
switch (type)
{
case SVNLogEntryPath.TYPE_ADDED :
- return Optional.of(new Modification.Added(path));
+ return Optional.of(new Added(path));
case SVNLogEntryPath.TYPE_DELETED :
- return Optional.of(new Modification.Removed(path));
+ return Optional.of(new Removed(path));
case TYPE_UPDATED :
case SVNLogEntryPath.TYPE_MODIFIED :
- return Optional.of(new Modification.Modified(path));
+ return Optional.of(new Modified(path));
default :
logger.debug("unknown modification type {}", type);
diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java
index 0e9f169f53..ec545402b7 100644
--- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java
+++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java
@@ -30,8 +30,11 @@ import org.mapstruct.Context;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
-import sonia.scm.repository.Modification;
+import sonia.scm.repository.Added;
import sonia.scm.repository.Modifications;
+import sonia.scm.repository.Modified;
+import sonia.scm.repository.Removed;
+import sonia.scm.repository.Renamed;
import sonia.scm.repository.Repository;
import javax.inject.Inject;
@@ -54,17 +57,17 @@ public abstract class ModificationsToDtoMapper {
target.add(linksBuilder.build());
}
- String map(Modification.Added added) {
+ String map(Added added) {
return added.getPath();
}
- String map(Modification.Removed removed) {
+ String map(Removed removed) {
return removed.getPath();
}
- String map(Modification.Modified modified) {
+ String map(Modified modified) {
return modified.getPath();
}
- abstract ModificationsDto.RenamedDto map(Modification.Renamed renamed);
+ abstract ModificationsDto.RenamedDto map(Renamed renamed);
}
diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java
index 3697330587..9c6a3b984c 100644
--- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ModificationsResourceTest.java
@@ -39,12 +39,12 @@ import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
+import sonia.scm.repository.Added;
import sonia.scm.repository.InternalRepositoryException;
-import sonia.scm.repository.Modification.Added;
-import sonia.scm.repository.Modification.Modified;
-import sonia.scm.repository.Modification.Removed;
import sonia.scm.repository.Modifications;
import sonia.scm.repository.NamespaceAndName;
+import sonia.scm.repository.Removed;
+import sonia.scm.repository.Modified;
import sonia.scm.repository.Repository;
import sonia.scm.repository.api.ModificationsCommandBuilder;
import sonia.scm.repository.api.RepositoryService;
From 541d6ee0c607174e9383662107605d9f04b86f57 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Fri, 15 May 2020 21:39:04 +0200
Subject: [PATCH 21/54] Support copy and renamed modifications for hg
---
.../main/java/sonia/scm/repository/Added.java | 6 +-
.../java/sonia/scm/repository/Copied.java | 6 +-
.../java/sonia/scm/repository/Modified.java | 6 +-
.../java/sonia/scm/repository/Removed.java | 6 +-
.../java/sonia/scm/repository/Renamed.java | 6 +-
.../spi/javahg/AbstractChangesetCommand.java | 17 +---
.../spi/javahg/HgModificationParser.java | 64 +++++++++++++++
.../sonia/scm/styles/changesets-eager.style | 5 +-
.../spi/javahg/HgModificationParserTest.java | 82 +++++++++++++++++++
9 files changed, 162 insertions(+), 36 deletions(-)
create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgModificationParser.java
create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/javahg/HgModificationParserTest.java
diff --git a/scm-core/src/main/java/sonia/scm/repository/Added.java b/scm-core/src/main/java/sonia/scm/repository/Added.java
index a5ccf848b4..c61c82fd03 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Added.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Added.java
@@ -24,15 +24,13 @@
package sonia.scm.repository;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
+import lombok.Value;
import java.util.stream.Stream;
import static java.util.stream.Stream.of;
-@Getter
-@AllArgsConstructor
+@Value
public class Added extends Modification {
private final String path;
diff --git a/scm-core/src/main/java/sonia/scm/repository/Copied.java b/scm-core/src/main/java/sonia/scm/repository/Copied.java
index 841136a035..45153cb91e 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Copied.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Copied.java
@@ -24,15 +24,13 @@
package sonia.scm.repository;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
+import lombok.Value;
import java.util.stream.Stream;
import static java.util.stream.Stream.of;
-@Getter
-@AllArgsConstructor
+@Value
public class Copied extends Modification {
private final String sourcePath;
private final String targetPath;
diff --git a/scm-core/src/main/java/sonia/scm/repository/Modified.java b/scm-core/src/main/java/sonia/scm/repository/Modified.java
index 6c0d7150a7..38f50ef2c0 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Modified.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Modified.java
@@ -24,15 +24,13 @@
package sonia.scm.repository;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
+import lombok.Value;
import java.util.stream.Stream;
import static java.util.stream.Stream.of;
-@Getter
-@AllArgsConstructor
+@Value
public class Modified extends Modification {
private final String path;
diff --git a/scm-core/src/main/java/sonia/scm/repository/Removed.java b/scm-core/src/main/java/sonia/scm/repository/Removed.java
index 7b8e23021f..4cc7ba8800 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Removed.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Removed.java
@@ -24,15 +24,13 @@
package sonia.scm.repository;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
+import lombok.Value;
import java.util.stream.Stream;
import static java.util.stream.Stream.of;
-@Getter
-@AllArgsConstructor
+@Value
public class Removed extends Modification {
private final String path;
diff --git a/scm-core/src/main/java/sonia/scm/repository/Renamed.java b/scm-core/src/main/java/sonia/scm/repository/Renamed.java
index d00c01c6b6..3535b8bf9b 100644
--- a/scm-core/src/main/java/sonia/scm/repository/Renamed.java
+++ b/scm-core/src/main/java/sonia/scm/repository/Renamed.java
@@ -24,15 +24,13 @@
package sonia.scm.repository;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
+import lombok.Value;
import java.util.stream.Stream;
import static java.util.stream.Stream.of;
-@Getter
-@AllArgsConstructor
+@Value
public class Renamed extends Modification {
private final String oldPath;
private final String newPath;
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java
index 18ba2c8390..5aea125875 100644
--- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/AbstractChangesetCommand.java
@@ -34,17 +34,12 @@ import com.aragost.javahg.internals.RuntimeIOException;
import com.aragost.javahg.internals.Utils;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
-import sonia.scm.repository.Added;
import sonia.scm.repository.Changeset;
import sonia.scm.repository.HgConfig;
import sonia.scm.repository.Modification;
-import sonia.scm.repository.Modifications;
-import sonia.scm.repository.Modified;
import sonia.scm.repository.Person;
-import sonia.scm.repository.Removed;
import java.io.IOException;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -272,19 +267,13 @@ public abstract class AbstractChangesetCommand extends AbstractCommand
}
private Collection extractModifications(HgInputStream in) throws IOException {
- Collection modifications = new ArrayList<>();
+ HgModificationParser hgModificationParser = new HgModificationParser();
String line = in.textUpTo('\n');
while (line.length() > 0) {
- if (line.startsWith("a ")) {
- modifications.add(new Added(line.substring(2)));
- } else if (line.startsWith("m ")) {
- modifications.add(new Modified(line.substring(2)));
- } else if (line.startsWith("d ")) {
- modifications.add(new Removed(line.substring(2)));
- }
+ hgModificationParser.addLine(line);
line = in.textUpTo('\n');
}
- return modifications;
+ return hgModificationParser.getModifications();
}
/**
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgModificationParser.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgModificationParser.java
new file mode 100644
index 0000000000..e57cab9279
--- /dev/null
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/javahg/HgModificationParser.java
@@ -0,0 +1,64 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository.spi.javahg;
+
+import sonia.scm.repository.Added;
+import sonia.scm.repository.Copied;
+import sonia.scm.repository.Modification;
+import sonia.scm.repository.Modified;
+import sonia.scm.repository.Removed;
+import sonia.scm.repository.Renamed;
+
+import java.util.Collection;
+import java.util.LinkedHashSet;
+
+class HgModificationParser {
+ private final Collection modifications = new LinkedHashSet<>();
+
+ void addLine(String line) {
+ if (line.startsWith("a ")) {
+ modifications.add(new Added(line.substring(2)));
+ } else if (line.startsWith("m ")) {
+ modifications.add(new Modified(line.substring(2)));
+ } else if (line.startsWith("d ")) {
+ modifications.add(new Removed(line.substring(2)));
+ } else if (line.startsWith("c ")) {
+ String sourceTarget = line.substring(2);
+ int divider = sourceTarget.indexOf('\0');
+ String source = sourceTarget.substring(0, divider);
+ String target = sourceTarget.substring(divider + 1);
+ modifications.remove(new Added(target));
+ if (modifications.remove(new Removed(source))) {
+ modifications.add(new Renamed(source, target));
+ } else {
+ modifications.add(new Copied(source, target));
+ }
+ }
+ }
+
+ Collection getModifications() {
+ return modifications;
+ }
+}
diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/styles/changesets-eager.style b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/styles/changesets-eager.style
index 2185c47a05..07c31fd7ea 100644
--- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/styles/changesets-eager.style
+++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/styles/changesets-eager.style
@@ -1,8 +1,9 @@
header = "%{pattern}"
-changeset = "{rev}:{node}{author}\n{date|hgdate}\n{branch}\n{parents}{extras}\n{tags}{file_adds}{file_mods}{file_dels}\n{desc}\0"
+changeset = "{rev}:{node}{author}\n{date|hgdate}\n{branch}\n{parents}{extras}\n{tags}{file_adds}{file_mods}{file_dels}{file_copies}\n{desc}\0"
tag = "t {tag}\n"
file_add = "a {file_add}\n"
file_mod = "m {file_mod}\n"
file_del = "d {file_del}\n"
+file_copy = "c {source}\0{name}\n"
extra = "{key}={value|stringescape},"
-footer = "%{pattern}"
\ No newline at end of file
+footer = "%{pattern}"
diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/javahg/HgModificationParserTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/javahg/HgModificationParserTest.java
new file mode 100644
index 0000000000..5c36134a0d
--- /dev/null
+++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/javahg/HgModificationParserTest.java
@@ -0,0 +1,82 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package sonia.scm.repository.spi.javahg;
+
+import org.junit.jupiter.api.Test;
+import sonia.scm.repository.Added;
+import sonia.scm.repository.Copied;
+import sonia.scm.repository.Modified;
+import sonia.scm.repository.Removed;
+import sonia.scm.repository.Renamed;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class HgModificationParserTest {
+
+ HgModificationParser parser = new HgModificationParser();
+
+ @Test
+ void shouldDetectAddedPath() {
+ parser.addLine("a added/file");
+
+ assertThat(parser.getModifications())
+ .containsExactly(new Added("added/file"));
+ }
+
+ @Test
+ void shouldDetectModifiedPath() {
+ parser.addLine("m modified/file");
+
+ assertThat(parser.getModifications())
+ .containsExactly(new Modified("modified/file"));
+ }
+
+ @Test
+ void shouldDetectRemovedPath() {
+ parser.addLine("d removed/file");
+
+ assertThat(parser.getModifications())
+ .containsExactly(new Removed("removed/file"));
+ }
+
+ @Test
+ void shouldDetectRenamedPath() {
+ parser.addLine("a new/path");
+ parser.addLine("d old/path");
+ parser.addLine("c old/path\0new/path");
+
+ assertThat(parser.getModifications())
+ .containsExactly(new Renamed("old/path", "new/path"));
+ }
+
+ @Test
+ void shouldCopiedRenamedPath() {
+ parser.addLine("a new/path");
+ parser.addLine("c old/path\0new/path");
+
+ assertThat(parser.getModifications())
+ .containsExactly(new Copied("old/path", "new/path"));
+ }
+}
From 9c86107674e9024be53f64edd71dabdff7d6142e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 19 May 2020 09:53:16 +0200
Subject: [PATCH 22/54] Use fixed version of gitparser
---
package.json | 2 +-
yarn.lock | 1745 ++++++++++++++++++++++++++------------------------
2 files changed, 902 insertions(+), 845 deletions(-)
diff --git a/package.json b/package.json
index 6c3b45c9ca..4045306d30 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
},
"resolutions": {
"babel-core": "7.0.0-bridge.0",
- "gitdiff-parser": "https://github.com/scm-manager/gitdiff-parser#ed3fe7de73dbb0a06c3e6adbbdf22dbae6e66351",
+ "gitdiff-parser": "https://github.com/scm-manager/gitdiff-parser#1da10408e52ad1d58b1f817dd1d658d9f2eb4087",
"lowlight": "1.13.1"
},
"babel": {
diff --git a/yarn.lock b/yarn.lock
index f33b9dd3fd..bf850ef2f3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -16,28 +16,28 @@
dependencies:
"@babel/highlight" "^7.8.3"
-"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c"
- integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g==
+"@babel/compat-data@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.6.tgz#3f604c40e420131affe6f2c8052e9a275ae2049b"
+ integrity sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g==
dependencies:
- browserslist "^4.9.1"
+ browserslist "^4.11.1"
invariant "^2.2.4"
semver "^5.5.0"
"@babel/core@^7.1.0", "@babel/core@^7.4.5", "@babel/core@^7.6.3", "@babel/core@^7.7.5":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e"
- integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w==
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376"
+ integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==
dependencies:
"@babel/code-frame" "^7.8.3"
- "@babel/generator" "^7.9.0"
+ "@babel/generator" "^7.9.6"
"@babel/helper-module-transforms" "^7.9.0"
- "@babel/helpers" "^7.9.0"
- "@babel/parser" "^7.9.0"
+ "@babel/helpers" "^7.9.6"
+ "@babel/parser" "^7.9.6"
"@babel/template" "^7.8.6"
- "@babel/traverse" "^7.9.0"
- "@babel/types" "^7.9.0"
+ "@babel/traverse" "^7.9.6"
+ "@babel/types" "^7.9.6"
convert-source-map "^1.7.0"
debug "^4.1.0"
gensync "^1.0.0-beta.1"
@@ -47,12 +47,12 @@
semver "^5.4.1"
source-map "^0.5.0"
-"@babel/generator@^7.4.0", "@babel/generator@^7.9.0":
- version "7.9.4"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce"
- integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA==
+"@babel/generator@^7.4.0", "@babel/generator@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43"
+ integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==
dependencies:
- "@babel/types" "^7.9.0"
+ "@babel/types" "^7.9.6"
jsesc "^2.5.1"
lodash "^4.17.13"
source-map "^0.5.0"
@@ -73,13 +73,13 @@
"@babel/types" "^7.8.3"
"@babel/helper-builder-react-jsx-experimental@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz#066d80262ade488f9c1b1823ce5db88a4cedaa43"
- integrity sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ==
+ version "7.9.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3"
+ integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg==
dependencies:
"@babel/helper-annotate-as-pure" "^7.8.3"
"@babel/helper-module-imports" "^7.8.3"
- "@babel/types" "^7.9.0"
+ "@babel/types" "^7.9.5"
"@babel/helper-builder-react-jsx@^7.9.0":
version "7.9.0"
@@ -89,27 +89,27 @@
"@babel/helper-annotate-as-pure" "^7.8.3"
"@babel/types" "^7.9.0"
-"@babel/helper-compilation-targets@^7.8.7":
- version "7.8.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde"
- integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw==
+"@babel/helper-compilation-targets@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz#1e05b7ccc9d38d2f8b40b458b380a04dcfadd38a"
+ integrity sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw==
dependencies:
- "@babel/compat-data" "^7.8.6"
- browserslist "^4.9.1"
+ "@babel/compat-data" "^7.9.6"
+ browserslist "^4.11.1"
invariant "^2.2.4"
levenary "^1.1.1"
semver "^5.5.0"
-"@babel/helper-create-class-features-plugin@^7.8.3":
- version "7.8.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0"
- integrity sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg==
+"@babel/helper-create-class-features-plugin@^7.8.3", "@babel/helper-create-class-features-plugin@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz#965c8b0a9f051801fd9d3b372ca0ccf200a90897"
+ integrity sha512-6N9IeuyHvMBRyjNYOMJHrhwtu4WJMrYf8hVbEHD3pbbbmNOk1kmXSQs7bA4dYDUaIx4ZEzdnvo6NwC3WHd/Qow==
dependencies:
- "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-function-name" "^7.9.5"
"@babel/helper-member-expression-to-functions" "^7.8.3"
"@babel/helper-optimise-call-expression" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
- "@babel/helper-replace-supers" "^7.8.6"
+ "@babel/helper-replace-supers" "^7.9.6"
"@babel/helper-split-export-declaration" "^7.8.3"
"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8":
@@ -138,14 +138,14 @@
"@babel/traverse" "^7.8.3"
"@babel/types" "^7.8.3"
-"@babel/helper-function-name@^7.8.3":
- version "7.8.3"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca"
- integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==
+"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5":
+ version "7.9.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c"
+ integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==
dependencies:
"@babel/helper-get-function-arity" "^7.8.3"
"@babel/template" "^7.8.3"
- "@babel/types" "^7.8.3"
+ "@babel/types" "^7.9.5"
"@babel/helper-get-function-arity@^7.8.3":
version "7.8.3"
@@ -218,15 +218,15 @@
"@babel/traverse" "^7.8.3"
"@babel/types" "^7.8.3"
-"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6":
- version "7.8.6"
- resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8"
- integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA==
+"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6", "@babel/helper-replace-supers@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444"
+ integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==
dependencies:
"@babel/helper-member-expression-to-functions" "^7.8.3"
"@babel/helper-optimise-call-expression" "^7.8.3"
- "@babel/traverse" "^7.8.6"
- "@babel/types" "^7.8.6"
+ "@babel/traverse" "^7.9.6"
+ "@babel/types" "^7.9.6"
"@babel/helper-simple-access@^7.8.3":
version "7.8.3"
@@ -243,10 +243,10 @@
dependencies:
"@babel/types" "^7.8.3"
-"@babel/helper-validator-identifier@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed"
- integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw==
+"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5":
+ version "7.9.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
+ integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==
"@babel/helper-wrap-function@^7.8.3":
version "7.8.3"
@@ -258,14 +258,14 @@
"@babel/traverse" "^7.8.3"
"@babel/types" "^7.8.3"
-"@babel/helpers@^7.9.0":
- version "7.9.2"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f"
- integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA==
+"@babel/helpers@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580"
+ integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==
dependencies:
"@babel/template" "^7.8.3"
- "@babel/traverse" "^7.9.0"
- "@babel/types" "^7.9.0"
+ "@babel/traverse" "^7.9.6"
+ "@babel/types" "^7.9.6"
"@babel/highlight@^7.0.0", "@babel/highlight@^7.8.3":
version "7.9.0"
@@ -276,10 +276,10 @@
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0":
- version "7.9.4"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8"
- integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA==
+"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7"
+ integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==
"@babel/plugin-proposal-async-generator-functions@^7.8.3":
version "7.8.3"
@@ -330,13 +330,14 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-numeric-separator" "^7.8.3"
-"@babel/plugin-proposal-object-rest-spread@^7.6.2", "@babel/plugin-proposal-object-rest-spread@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f"
- integrity sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow==
+"@babel/plugin-proposal-object-rest-spread@^7.6.2", "@babel/plugin-proposal-object-rest-spread@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz#7a093586fcb18b08266eb1a7177da671ac575b63"
+ integrity sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-object-rest-spread" "^7.8.0"
+ "@babel/plugin-transform-parameters" "^7.9.5"
"@babel/plugin-proposal-optional-catch-binding@^7.8.3":
version "7.8.3"
@@ -491,14 +492,14 @@
"@babel/helper-plugin-utils" "^7.8.3"
lodash "^4.17.13"
-"@babel/plugin-transform-classes@^7.9.0":
- version "7.9.2"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d"
- integrity sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ==
+"@babel/plugin-transform-classes@^7.9.5":
+ version "7.9.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c"
+ integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==
dependencies:
"@babel/helper-annotate-as-pure" "^7.8.3"
"@babel/helper-define-map" "^7.8.3"
- "@babel/helper-function-name" "^7.8.3"
+ "@babel/helper-function-name" "^7.9.5"
"@babel/helper-optimise-call-expression" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/helper-replace-supers" "^7.8.6"
@@ -512,10 +513,10 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-destructuring@^7.8.3":
- version "7.8.8"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b"
- integrity sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ==
+"@babel/plugin-transform-destructuring@^7.9.5":
+ version "7.9.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50"
+ integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
@@ -579,34 +580,34 @@
dependencies:
"@babel/helper-plugin-utils" "^7.8.3"
-"@babel/plugin-transform-modules-amd@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4"
- integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q==
+"@babel/plugin-transform-modules-amd@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz#8539ec42c153d12ea3836e0e3ac30d5aae7b258e"
+ integrity sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==
dependencies:
"@babel/helper-module-transforms" "^7.9.0"
"@babel/helper-plugin-utils" "^7.8.3"
- babel-plugin-dynamic-import-node "^2.3.0"
+ babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-commonjs@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940"
- integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g==
+"@babel/plugin-transform-modules-commonjs@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz#64b7474a4279ee588cacd1906695ca721687c277"
+ integrity sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==
dependencies:
"@babel/helper-module-transforms" "^7.9.0"
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/helper-simple-access" "^7.8.3"
- babel-plugin-dynamic-import-node "^2.3.0"
+ babel-plugin-dynamic-import-node "^2.3.3"
-"@babel/plugin-transform-modules-systemjs@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90"
- integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ==
+"@babel/plugin-transform-modules-systemjs@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz#207f1461c78a231d5337a92140e52422510d81a4"
+ integrity sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==
dependencies:
"@babel/helper-hoist-variables" "^7.8.3"
"@babel/helper-module-transforms" "^7.9.0"
"@babel/helper-plugin-utils" "^7.8.3"
- babel-plugin-dynamic-import-node "^2.3.0"
+ babel-plugin-dynamic-import-node "^2.3.3"
"@babel/plugin-transform-modules-umd@^7.9.0":
version "7.9.0"
@@ -638,10 +639,10 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/helper-replace-supers" "^7.8.3"
-"@babel/plugin-transform-parameters@^7.8.7":
- version "7.9.3"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz#3028d0cc20ddc733166c6e9c8534559cee09f54a"
- integrity sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg==
+"@babel/plugin-transform-parameters@^7.9.5":
+ version "7.9.5"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795"
+ integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==
dependencies:
"@babel/helper-get-function-arity" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
@@ -754,11 +755,11 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-transform-typescript@^7.9.0":
- version "7.9.4"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.4.tgz#4bb4dde4f10bbf2d787fce9707fb09b483e33359"
- integrity sha512-yeWeUkKx2auDbSxRe8MusAG+n4m9BFY/v+lPjmQDgOFX5qnySkUY5oXzkp6FwPdsYqnKay6lorXYdC0n3bZO7w==
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.9.6.tgz#2248971416a506fc78278fc0c0ea3179224af1e9"
+ integrity sha512-8OvsRdvpt3Iesf2qsAn+YdlwAJD7zJ+vhFZmDCa4b8dTp7MmHtKk5FF2mCsGxjZwuwsy/yIIay/nLmxST1ctVQ==
dependencies:
- "@babel/helper-create-class-features-plugin" "^7.8.3"
+ "@babel/helper-create-class-features-plugin" "^7.9.6"
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-syntax-typescript" "^7.8.3"
@@ -779,12 +780,12 @@
regenerator-runtime "^0.13.4"
"@babel/preset-env@^7.4.5", "@babel/preset-env@^7.6.3":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8"
- integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ==
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.6.tgz#df063b276c6455ec6fcfc6e53aacc38da9b0aea6"
+ integrity sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==
dependencies:
- "@babel/compat-data" "^7.9.0"
- "@babel/helper-compilation-targets" "^7.8.7"
+ "@babel/compat-data" "^7.9.6"
+ "@babel/helper-compilation-targets" "^7.9.6"
"@babel/helper-module-imports" "^7.8.3"
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-proposal-async-generator-functions" "^7.8.3"
@@ -792,7 +793,7 @@
"@babel/plugin-proposal-json-strings" "^7.8.3"
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3"
"@babel/plugin-proposal-numeric-separator" "^7.8.3"
- "@babel/plugin-proposal-object-rest-spread" "^7.9.0"
+ "@babel/plugin-proposal-object-rest-spread" "^7.9.6"
"@babel/plugin-proposal-optional-catch-binding" "^7.8.3"
"@babel/plugin-proposal-optional-chaining" "^7.9.0"
"@babel/plugin-proposal-unicode-property-regex" "^7.8.3"
@@ -809,9 +810,9 @@
"@babel/plugin-transform-async-to-generator" "^7.8.3"
"@babel/plugin-transform-block-scoped-functions" "^7.8.3"
"@babel/plugin-transform-block-scoping" "^7.8.3"
- "@babel/plugin-transform-classes" "^7.9.0"
+ "@babel/plugin-transform-classes" "^7.9.5"
"@babel/plugin-transform-computed-properties" "^7.8.3"
- "@babel/plugin-transform-destructuring" "^7.8.3"
+ "@babel/plugin-transform-destructuring" "^7.9.5"
"@babel/plugin-transform-dotall-regex" "^7.8.3"
"@babel/plugin-transform-duplicate-keys" "^7.8.3"
"@babel/plugin-transform-exponentiation-operator" "^7.8.3"
@@ -819,14 +820,14 @@
"@babel/plugin-transform-function-name" "^7.8.3"
"@babel/plugin-transform-literals" "^7.8.3"
"@babel/plugin-transform-member-expression-literals" "^7.8.3"
- "@babel/plugin-transform-modules-amd" "^7.9.0"
- "@babel/plugin-transform-modules-commonjs" "^7.9.0"
- "@babel/plugin-transform-modules-systemjs" "^7.9.0"
+ "@babel/plugin-transform-modules-amd" "^7.9.6"
+ "@babel/plugin-transform-modules-commonjs" "^7.9.6"
+ "@babel/plugin-transform-modules-systemjs" "^7.9.6"
"@babel/plugin-transform-modules-umd" "^7.9.0"
"@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3"
"@babel/plugin-transform-new-target" "^7.8.3"
"@babel/plugin-transform-object-super" "^7.8.3"
- "@babel/plugin-transform-parameters" "^7.8.7"
+ "@babel/plugin-transform-parameters" "^7.9.5"
"@babel/plugin-transform-property-literals" "^7.8.3"
"@babel/plugin-transform-regenerator" "^7.8.7"
"@babel/plugin-transform-reserved-words" "^7.8.3"
@@ -837,8 +838,8 @@
"@babel/plugin-transform-typeof-symbol" "^7.8.4"
"@babel/plugin-transform-unicode-regex" "^7.8.3"
"@babel/preset-modules" "^0.1.3"
- "@babel/types" "^7.9.0"
- browserslist "^4.9.1"
+ "@babel/types" "^7.9.6"
+ browserslist "^4.11.1"
core-js-compat "^3.6.2"
invariant "^2.2.2"
levenary "^1.1.1"
@@ -884,17 +885,17 @@
"@babel/plugin-transform-typescript" "^7.9.0"
"@babel/runtime-corejs3@^7.8.3":
- version "7.9.2"
- resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz#26fe4aa77e9f1ecef9b776559bbb8e84d34284b7"
- integrity sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA==
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz#67aded13fffbbc2cb93247388cf84d77a4be9a71"
+ integrity sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==
dependencies:
core-js-pure "^3.0.0"
regenerator-runtime "^0.13.4"
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2":
- version "7.9.2"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06"
- integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f"
+ integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==
dependencies:
regenerator-runtime "^0.13.4"
@@ -907,27 +908,27 @@
"@babel/parser" "^7.8.6"
"@babel/types" "^7.8.6"
-"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892"
- integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w==
+"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442"
+ integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==
dependencies:
"@babel/code-frame" "^7.8.3"
- "@babel/generator" "^7.9.0"
- "@babel/helper-function-name" "^7.8.3"
+ "@babel/generator" "^7.9.6"
+ "@babel/helper-function-name" "^7.9.5"
"@babel/helper-split-export-declaration" "^7.8.3"
- "@babel/parser" "^7.9.0"
- "@babel/types" "^7.9.0"
+ "@babel/parser" "^7.9.6"
+ "@babel/types" "^7.9.6"
debug "^4.1.0"
globals "^11.1.0"
lodash "^4.17.13"
-"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0":
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5"
- integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng==
+"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6":
+ version "7.9.6"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7"
+ integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==
dependencies:
- "@babel/helper-validator-identifier" "^7.9.0"
+ "@babel/helper-validator-identifier" "^7.9.5"
lodash "^4.17.13"
to-fast-properties "^2.0.0"
@@ -1315,24 +1316,24 @@
"@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^13.0.0"
-"@jest/types@^25.2.6":
- version "25.2.6"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.2.6.tgz#c12f44af9bed444438091e4b59e7ed05f8659cb6"
- integrity sha512-myJTTV37bxK7+3NgKc4Y/DlQ5q92/NOwZsZ+Uch7OXdElxOg61QYc72fPYNAjlvbnJ2YvbXLamIsa9tj48BmyQ==
+"@jest/types@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
+ integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
dependencies:
"@types/istanbul-lib-coverage" "^2.0.0"
"@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^15.0.0"
chalk "^3.0.0"
-"@lerna/add@3.20.0":
- version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.20.0.tgz#bea7edf36fc93fb72ec34cb9ba854c48d4abf309"
- integrity sha512-AnH1oRIEEg/VDa3SjYq4x1/UglEAvrZuV0WssHUMN81RTZgQk3we+Mv3qZNddrZ/fBcZu2IAdN/EQ3+ie2JxKQ==
+"@lerna/add@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.21.0.tgz#27007bde71cc7b0a2969ab3c2f0ae41578b4577b"
+ integrity sha512-vhUXXF6SpufBE1EkNEXwz1VLW03f177G9uMOFMQkp6OJ30/PWg4Ekifuz9/3YfgB2/GH8Tu4Lk3O51P2Hskg/A==
dependencies:
"@evocateur/pacote" "^9.6.3"
- "@lerna/bootstrap" "3.20.0"
- "@lerna/command" "3.18.5"
+ "@lerna/bootstrap" "3.21.0"
+ "@lerna/command" "3.21.0"
"@lerna/filter-options" "3.20.0"
"@lerna/npm-conf" "3.16.0"
"@lerna/validation-error" "3.13.0"
@@ -1341,12 +1342,12 @@
p-map "^2.1.0"
semver "^6.2.0"
-"@lerna/bootstrap@3.20.0":
- version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.20.0.tgz#635d71046830f208e851ab429a63da1747589e37"
- integrity sha512-Wylullx3uthKE7r4izo09qeRGL20Y5yONlQEjPCfnbxCC2Elu+QcPu4RC6kqKQ7b+g7pdC3OOgcHZjngrwr5XQ==
+"@lerna/bootstrap@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.21.0.tgz#bcd1b651be5b0970b20d8fae04c864548123aed6"
+ integrity sha512-mtNHlXpmvJn6JTu0KcuTTPl2jLsDNud0QacV/h++qsaKbhAaJr/FElNZ5s7MwZFUM3XaDmvWzHKaszeBMHIbBw==
dependencies:
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/filter-options" "3.20.0"
"@lerna/has-npm-version" "3.16.5"
"@lerna/npm-install" "3.16.5"
@@ -1370,13 +1371,13 @@
read-package-tree "^5.1.6"
semver "^6.2.0"
-"@lerna/changed@3.20.0":
- version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.20.0.tgz#66b97ebd6c8f8d207152ee524a0791846a9097ae"
- integrity sha512-+hzMFSldbRPulZ0vbKk6RD9f36gaH3Osjx34wrrZ62VB4pKmjyuS/rxVYkCA3viPLHoiIw2F8zHM5BdYoDSbjw==
+"@lerna/changed@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.21.0.tgz#108e15f679bfe077af500f58248c634f1044ea0b"
+ integrity sha512-hzqoyf8MSHVjZp0gfJ7G8jaz+++mgXYiNs9iViQGA8JlN/dnWLI5sWDptEH3/B30Izo+fdVz0S0s7ydVE3pWIw==
dependencies:
"@lerna/collect-updates" "3.20.0"
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/listable" "3.18.5"
"@lerna/output" "3.13.0"
@@ -1398,12 +1399,12 @@
execa "^1.0.0"
strong-log-transformer "^2.0.0"
-"@lerna/clean@3.20.0":
- version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.20.0.tgz#ba777e373ddeae63e57860df75d47a9e5264c5b2"
- integrity sha512-9ZdYrrjQvR5wNXmHfDsfjWjp0foOkCwKe3hrckTzkAeQA1ibyz5llGwz5e1AeFrV12e2/OLajVqYfe+qdkZUgg==
+"@lerna/clean@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.21.0.tgz#c0b46b5300cc3dae2cda3bec14b803082da3856d"
+ integrity sha512-b/L9l+MDgE/7oGbrav6rG8RTQvRiZLO1zTcG17zgJAAuhlsPxJExMlh2DFwJEVi2les70vMhHfST3Ue1IMMjpg==
dependencies:
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/filter-options" "3.20.0"
"@lerna/prompt" "3.18.5"
"@lerna/pulse-till-done" "3.13.0"
@@ -1443,14 +1444,14 @@
npmlog "^4.1.2"
slash "^2.0.0"
-"@lerna/command@3.18.5":
- version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.18.5.tgz#14c6d2454adbfd365f8027201523e6c289cd3cd9"
- integrity sha512-36EnqR59yaTU4HrR1C9XDFti2jRx0BgpIUBeWn129LZZB8kAB3ov1/dJNa1KcNRKp91DncoKHLY99FZ6zTNpMQ==
+"@lerna/command@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.21.0.tgz#9a2383759dc7b700dacfa8a22b2f3a6e190121f7"
+ integrity sha512-T2bu6R8R3KkH5YoCKdutKv123iUgUbW8efVjdGCDnCMthAQzoentOJfDeodBwn0P2OqCl3ohsiNVtSn9h78fyQ==
dependencies:
"@lerna/child-process" "3.16.5"
"@lerna/package-graph" "3.18.5"
- "@lerna/project" "3.18.0"
+ "@lerna/project" "3.21.0"
"@lerna/validation-error" "3.13.0"
"@lerna/write-log-file" "3.13.0"
clone-deep "^4.0.1"
@@ -1485,14 +1486,14 @@
fs-extra "^8.1.0"
npmlog "^4.1.2"
-"@lerna/create@3.18.5":
- version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.18.5.tgz#11ac539f069248eaf7bc4c42e237784330f4fc47"
- integrity sha512-cHpjocbpKmLopCuZFI7cKEM3E/QY8y+yC7VtZ4FQRSaLU8D8i2xXtXmYaP1GOlVNavji0iwoXjuNpnRMInIr2g==
+"@lerna/create@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.21.0.tgz#e813832adf3488728b139e5a75c8b01b1372e62f"
+ integrity sha512-cRIopzKzE2vXJPmsiwCDMWo4Ct+KTmX3nvvkQLDoQNrrRK7w+3KQT3iiorbj1koD95RsVQA7mS2haWok9SIv0g==
dependencies:
"@evocateur/pacote" "^9.6.3"
"@lerna/child-process" "3.16.5"
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/npm-conf" "3.16.0"
"@lerna/validation-error" "3.13.0"
camelcase "^5.0.0"
@@ -1517,23 +1518,23 @@
"@lerna/child-process" "3.16.5"
npmlog "^4.1.2"
-"@lerna/diff@3.18.5":
- version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.18.5.tgz#e9e2cb882f84d5b84f0487c612137305f07accbc"
- integrity sha512-u90lGs+B8DRA9Z/2xX4YaS3h9X6GbypmGV6ITzx9+1Ga12UWGTVlKaCXBgONMBjzJDzAQOK8qPTwLA57SeBLgA==
+"@lerna/diff@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.21.0.tgz#e6df0d8b9916167ff5a49fcb02ac06424280a68d"
+ integrity sha512-5viTR33QV3S7O+bjruo1SaR40m7F2aUHJaDAC7fL9Ca6xji+aw1KFkpCtVlISS0G8vikUREGMJh+c/VMSc8Usw==
dependencies:
"@lerna/child-process" "3.16.5"
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/validation-error" "3.13.0"
npmlog "^4.1.2"
-"@lerna/exec@3.20.0":
- version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.20.0.tgz#29f0c01aee2340eb46f90706731fef2062a49639"
- integrity sha512-pS1mmC7kzV668rHLWuv31ClngqeXjeHC8kJuM+W2D6IpUVMGQHLcCTYLudFgQsuKGVpl0DGNYG+sjLhAPiiu6A==
+"@lerna/exec@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.21.0.tgz#17f07533893cb918a17b41bcc566dc437016db26"
+ integrity sha512-iLvDBrIE6rpdd4GIKTY9mkXyhwsJ2RvQdB9ZU+/NhR3okXfqKc6py/24tV111jqpXTtZUW6HNydT4dMao2hi1Q==
dependencies:
"@lerna/child-process" "3.16.5"
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/filter-options" "3.20.0"
"@lerna/profiler" "3.20.0"
"@lerna/run-topologically" "3.18.5"
@@ -1609,13 +1610,13 @@
"@lerna/child-process" "3.16.5"
semver "^6.2.0"
-"@lerna/import@3.18.5":
- version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.18.5.tgz#a9c7d8601870729851293c10abd18b3707f7ba5e"
- integrity sha512-PH0WVLEgp+ORyNKbGGwUcrueW89K3Iuk/DDCz8mFyG2IG09l/jOF0vzckEyGyz6PO5CMcz4TI1al/qnp3FrahQ==
+"@lerna/import@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.21.0.tgz#87b08f2a2bfeeff7357c6fd8490e638d3cd5b32d"
+ integrity sha512-aISkL4XD0Dqf5asDaOZWu65jgj8fWUhuQseZWuQe3UfHxav69fTS2YLIngUfencaOSZVOcVCom28YCzp61YDxw==
dependencies:
"@lerna/child-process" "3.16.5"
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/prompt" "3.18.5"
"@lerna/pulse-till-done" "3.13.0"
"@lerna/validation-error" "3.13.0"
@@ -1623,43 +1624,43 @@
fs-extra "^8.1.0"
p-map-series "^1.0.0"
-"@lerna/info@3.20.0":
- version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.20.0.tgz#3a5212f3029f2bc6255f9533bdf4bcb120ef329a"
- integrity sha512-Rsz+KQF9mczbGUbPTrtOed1N0C+cA08Qz0eX/oI+NNjvsryZIju/o7uedG4I3P55MBiAioNrJI88fHH3eTgYug==
+"@lerna/info@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/info/-/info-3.21.0.tgz#76696b676fdb0f35d48c83c63c1e32bb5e37814f"
+ integrity sha512-0XDqGYVBgWxUquFaIptW2bYSIu6jOs1BtkvRTWDDhw4zyEdp6q4eaMvqdSap1CG+7wM5jeLCi6z94wS0AuiuwA==
dependencies:
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/output" "3.13.0"
envinfo "^7.3.1"
-"@lerna/init@3.18.5":
- version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.18.5.tgz#86dd0b2b3290755a96975069b5cb007f775df9f5"
- integrity sha512-oCwipWrha98EcJAHm8AGd2YFFLNI7AW9AWi0/LbClj1+XY9ah+uifXIgYGfTk63LbgophDd8936ZEpHMxBsbAg==
+"@lerna/init@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.21.0.tgz#1e810934dc8bf4e5386c031041881d3b4096aa5c"
+ integrity sha512-6CM0z+EFUkFfurwdJCR+LQQF6MqHbYDCBPyhu/d086LRf58GtYZYj49J8mKG9ktayp/TOIxL/pKKjgLD8QBPOg==
dependencies:
"@lerna/child-process" "3.16.5"
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
fs-extra "^8.1.0"
p-map "^2.1.0"
write-json-file "^3.2.0"
-"@lerna/link@3.18.5":
- version "3.18.5"
- resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.18.5.tgz#f24347e4f0b71d54575bd37cfa1794bc8ee91b18"
- integrity sha512-xTN3vktJpkT7Nqc3QkZRtHO4bT5NvuLMtKNIBDkks0HpGxC9PRyyqwOoCoh1yOGbrWIuDezhfMg3Qow+6I69IQ==
+"@lerna/link@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.21.0.tgz#8be68ff0ccee104b174b5bbd606302c2f06e9d9b"
+ integrity sha512-tGu9GxrX7Ivs+Wl3w1+jrLi1nQ36kNI32dcOssij6bg0oZ2M2MDEFI9UF2gmoypTaN9uO5TSsjCFS7aR79HbdQ==
dependencies:
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/package-graph" "3.18.5"
"@lerna/symlink-dependencies" "3.17.0"
p-map "^2.1.0"
slash "^2.0.0"
-"@lerna/list@3.20.0":
- version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.20.0.tgz#7e67cc29c5cf661cfd097e8a7c2d3dcce7a81029"
- integrity sha512-fXTicPrfioVnRzknyPawmYIVkzDRBaQqk9spejS1S3O1DOidkihK0xxNkr8HCVC0L22w6f92g83qWDp2BYRUbg==
+"@lerna/list@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.21.0.tgz#42f76fafa56dea13b691ec8cab13832691d61da2"
+ integrity sha512-KehRjE83B1VaAbRRkRy6jLX1Cin8ltsrQ7FHf2bhwhRHK0S54YuA6LOoBnY/NtA8bHDX/Z+G5sMY78X30NS9tg==
dependencies:
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/filter-options" "3.20.0"
"@lerna/listable" "3.18.5"
"@lerna/output" "3.13.0"
@@ -1805,10 +1806,10 @@
npmlog "^4.1.2"
upath "^1.2.0"
-"@lerna/project@3.18.0":
- version "3.18.0"
- resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.18.0.tgz#56feee01daeb42c03cbdf0ed8a2a10cbce32f670"
- integrity sha512-+LDwvdAp0BurOAWmeHE3uuticsq9hNxBI0+FMHiIai8jrygpJGahaQrBYWpwbshbQyVLeQgx3+YJdW2TbEdFWA==
+"@lerna/project@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.21.0.tgz#5d784d2d10c561a00f20320bcdb040997c10502d"
+ integrity sha512-xT1mrpET2BF11CY32uypV2GPtPVm6Hgtha7D81GQP9iAitk9EccrdNjYGt5UBYASl4CIDXBRxwmTTVGfrCx82A==
dependencies:
"@lerna/package" "3.16.0"
"@lerna/validation-error" "3.13.0"
@@ -1831,10 +1832,10 @@
inquirer "^6.2.0"
npmlog "^4.1.2"
-"@lerna/publish@3.20.2":
- version "3.20.2"
- resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.20.2.tgz#a45d29813099b3249657ea913d0dc3f8ebc5cc2e"
- integrity sha512-N7Y6PdhJ+tYQPdI1tZum8W25cDlTp4D6brvRacKZusweWexxaopbV8RprBaKexkEX/KIbncuADq7qjDBdQHzaA==
+"@lerna/publish@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.21.0.tgz#0112393125f000484c3f50caba71a547f91bd7f4"
+ integrity sha512-JZ+ehZB9UCQ9nqH8Ld/Yqc/If++aK/7XIubkrB9sQ5hf2GeIbmI/BrJpMgLW/e9T5bKrUBZPUvoUN3daVipA5A==
dependencies:
"@evocateur/libnpmaccess" "^3.1.2"
"@evocateur/npm-registry-fetch" "^4.0.0"
@@ -1842,7 +1843,7 @@
"@lerna/check-working-tree" "3.16.5"
"@lerna/child-process" "3.16.5"
"@lerna/collect-updates" "3.20.0"
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/describe-ref" "3.16.5"
"@lerna/log-packed" "3.16.0"
"@lerna/npm-conf" "3.16.0"
@@ -1857,7 +1858,7 @@
"@lerna/run-lifecycle" "3.16.2"
"@lerna/run-topologically" "3.18.5"
"@lerna/validation-error" "3.13.0"
- "@lerna/version" "3.20.2"
+ "@lerna/version" "3.21.0"
figgy-pudding "^3.5.1"
fs-extra "^8.1.0"
npm-package-arg "^6.1.0"
@@ -1920,12 +1921,12 @@
figgy-pudding "^3.5.1"
p-queue "^4.0.0"
-"@lerna/run@3.20.0":
- version "3.20.0"
- resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.20.0.tgz#a479f7c42bdf9ebabb3a1e5a2bdebb7a8d201151"
- integrity sha512-9U3AqeaCeB7KsGS9oyKNp62s9vYoULg/B4cqXTKZkc+OKL6QOEjYHYVSBcMK9lUXrMjCjDIuDSX3PnTCPxQ2Dw==
+"@lerna/run@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.21.0.tgz#2a35ec84979e4d6e42474fe148d32e5de1cac891"
+ integrity sha512-fJF68rT3veh+hkToFsBmUJ9MHc9yGXA7LSDvhziAojzOb0AI/jBDp6cEcDQyJ7dbnplba2Lj02IH61QUf9oW0Q==
dependencies:
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/filter-options" "3.20.0"
"@lerna/npm-run-script" "3.16.5"
"@lerna/output" "3.13.0"
@@ -1970,15 +1971,15 @@
dependencies:
npmlog "^4.1.2"
-"@lerna/version@3.20.2":
- version "3.20.2"
- resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.20.2.tgz#3709141c0f537741d9bc10cb24f56897bcb30428"
- integrity sha512-ckBJMaBWc+xJen0cMyCE7W67QXLLrc0ELvigPIn8p609qkfNM0L0CF803MKxjVOldJAjw84b8ucNWZLvJagP/Q==
+"@lerna/version@3.21.0":
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.21.0.tgz#5bcc3d2de9eb8f4db18efb0d88973f9a509eccc3"
+ integrity sha512-nIT3u43fCNj6uSMN1dRxFnF4GhmIiOEqSTkGSjrMU+8kHKwzOqS/6X6TOzklBmCyEZOpF/fLlGqH3BZHnwLDzQ==
dependencies:
"@lerna/check-working-tree" "3.16.5"
"@lerna/child-process" "3.16.5"
"@lerna/collect-updates" "3.20.0"
- "@lerna/command" "3.18.5"
+ "@lerna/command" "3.21.0"
"@lerna/conventional-commits" "3.18.5"
"@lerna/github-client" "3.16.5"
"@lerna/gitlab-client" "3.15.0"
@@ -2030,12 +2031,12 @@
dependencies:
"@octokit/types" "^2.0.0"
-"@octokit/endpoint@^6.0.0":
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.0.tgz#4c7acd79ab72df78732a7d63b09be53ec5a2230b"
- integrity sha512-3nx+MEYoZeD0uJ+7F/gvELLvQJzLXhep2Az0bBSXagbApDvDW0LWwpnAIY/hb0Jwe17A0fJdz0O12dPh05cj7A==
+"@octokit/endpoint@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.1.tgz#16d5c0e7a83e3a644d1ddbe8cded6c3d038d31d7"
+ integrity sha512-pOPHaSz57SFT/m3R5P8MUu4wLPszokn5pXcB/pzavLTQf2jbU+6iayTvzaY6/BiotuRS0qyEUkx3QglT4U958A==
dependencies:
- "@octokit/types" "^2.0.0"
+ "@octokit/types" "^2.11.1"
is-plain-object "^3.0.0"
universal-user-agent "^5.0.0"
@@ -2083,13 +2084,13 @@
once "^1.4.0"
"@octokit/request@^5.2.0":
- version "5.3.4"
- resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.4.tgz#fbc950bf785d59da3b0399fc6d042c8cf52e2905"
- integrity sha512-qyj8G8BxQyXjt9Xu6NvfvOr1E0l35lsXtwm3SopsYg/JWXjlsnwqLc8rsD2OLguEL/JjLfBvrXr4az7z8Lch2A==
+ version "5.4.2"
+ resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.2.tgz#74f8e5bbd39dc738a1b127629791f8ad1b3193ee"
+ integrity sha512-zKdnGuQ2TQ2vFk9VU8awFT4+EYf92Z/v3OlzRaSh4RIP0H6cvW1BFPXq4XYvNez+TPQjqN+0uSkCYnMFFhcFrw==
dependencies:
- "@octokit/endpoint" "^6.0.0"
+ "@octokit/endpoint" "^6.0.1"
"@octokit/request-error" "^2.0.0"
- "@octokit/types" "^2.0.0"
+ "@octokit/types" "^2.11.1"
deprecation "^2.0.0"
is-plain-object "^3.0.0"
node-fetch "^2.3.0"
@@ -2118,10 +2119,10 @@
once "^1.4.0"
universal-user-agent "^4.0.0"
-"@octokit/types@^2.0.0", "@octokit/types@^2.0.1":
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.5.1.tgz#22563b3bb50034bea3176eac1860340c5e812e2a"
- integrity sha512-q4Wr7RexkPRrkQpXzUYF5Fj/14Mr65RyOHj6B9d/sQACpqGcStkHZj4qMEtlMY5SnD/69jlL9ItGPbDM0dR/dA==
+"@octokit/types@^2.0.0", "@octokit/types@^2.0.1", "@octokit/types@^2.11.1":
+ version "2.16.2"
+ resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.16.2.tgz#4c5f8da3c6fecf3da1811aef678fda03edac35d2"
+ integrity sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==
dependencies:
"@types/node" ">= 8"
@@ -2646,16 +2647,16 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
- version "7.0.9"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a"
- integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw==
+ version "7.0.11"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.11.tgz#1ae3010e8bf8851d324878b42acec71986486d18"
+ integrity sha512-ddHK5icION5U6q11+tV2f9Mo6CZVuT8GJKld2q9LqHSZbvLbH34Kcu2yFGckZut453+eQU6btIA3RihmnRgI+Q==
dependencies:
"@babel/types" "^7.3.0"
"@types/cheerio@*":
- version "0.22.17"
- resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.17.tgz#e54f71c3135f71ebc16c8dc62edad533872c9e72"
- integrity sha512-izlm+hbqWN9csuB9GSMfCnAyd3/57XZi3rfz1B0C4QBGVMp+9xQ7+9KYnep+ySfUrCWql4lGzkLf0XmprXcz9g==
+ version "0.22.18"
+ resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.18.tgz#19018dceae691509901e339d63edf1e935978fe6"
+ integrity sha512-Fq7R3fINAPSdUEhOyjG4iVxgHrOnqDJbY0/BUuiN0pvD/rfmZWekVZnv+vcs8TtpA2XF50uv50LaE4EnpEL/Hw==
dependencies:
"@types/node" "*"
@@ -2714,9 +2715,9 @@
"@types/node" "*"
"@types/history@*", "@types/history@^4.7.3":
- version "4.7.5"
- resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.5.tgz#527d20ef68571a4af02ed74350164e7a67544860"
- integrity sha512-wLD/Aq2VggCJXSjxEwrMafIP51Z+13H78nXIX0ABEuIGhmB5sNGbR113MOKo+yfw+RDo1ZU3DM6yfnnRF/+ouw==
+ version "4.7.6"
+ resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.6.tgz#ed8fc802c45b8e8f54419c2d054e55c9ea344356"
+ integrity sha512-GRTZLeLJ8ia00ZH8mxMO8t0aC9M1N9bN461Z2eaRurJo6Fpa+utgCwLzI4jQHcrdzuzp5WPN9jRwpsCQ1VhJ5w==
"@types/hoist-non-react-statics@*":
version "3.3.1"
@@ -2727,9 +2728,9 @@
hoist-non-react-statics "^3.3.0"
"@types/html-minifier-terser@^5.0.0":
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.0.0.tgz#7532440c138605ced1b555935c3115ddd20e8bef"
- integrity sha512-q95SP4FdkmF0CwO0F2q0H6ZgudsApaY/yCtAQNRn1gduef5fGpyEphzy0YCq/N0UFvDSnLg5V8jFK/YGXlDiCw==
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880"
+ integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==
"@types/i18next@^13.0.0":
version "13.0.0"
@@ -2744,9 +2745,9 @@
integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w==
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
- integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz#79d7a78bad4219f4c03d6557a1c72d9ca6ba62d5"
+ integrity sha512-rsZg7eL+Xcxsxk2XlBt9KcG8nOp9iYdKCOikY9x2RFJCyOdNj4MKPQty0e8oZr29vVAzKXr1BmR+kZauti3o1w==
"@types/istanbul-lib-report@*":
version "3.0.0"
@@ -2756,9 +2757,9 @@
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-reports@^1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
- integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2"
+ integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==
dependencies:
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
@@ -2771,9 +2772,9 @@
"@types/jest" "*"
"@types/jest@*":
- version "25.2.1"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.1.tgz#9544cd438607955381c1bdbdb97767a249297db5"
- integrity sha512-msra1bCaAeEdkSyA0CZ6gW1ukMIvZ5YoJkdXw/qhQdsuuDlFTcEUrUw8CLCPt2rVRUfXlClVvK2gvPs9IokZaA==
+ version "25.2.3"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.2.3.tgz#33d27e4c4716caae4eced355097a47ad363fdcaf"
+ integrity sha512-JXc1nK/tXHiDhV55dvfzqtmP4S3sy3T3ouV2tkViZgxY/zeUkcpQcQPGRlgF4KmWzWW5oiWYSZwtCB+2RsE4Fw==
dependencies:
jest-diff "^25.2.1"
pretty-format "^25.2.1"
@@ -2798,9 +2799,9 @@
"@types/lodash" "*"
"@types/lodash@*", "@types/lodash@^4.14.136":
- version "4.14.149"
- resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440"
- integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ==
+ version "4.14.151"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.151.tgz#7d58cac32bedb0ec37cb7f99094a167d6176c9d5"
+ integrity sha512-Zst90IcBX5wnwSu7CAS0vvJkTjTELY4ssKbHiTnGcJgi170uiS8yQDdc3v6S77bRqYQIN1App5a1Pc2lceE5/g==
"@types/lowlight@^0.0.0":
version "0.0.0"
@@ -2812,10 +2813,15 @@
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+"@types/minimist@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6"
+ integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=
+
"@types/node@*", "@types/node@>= 8":
- version "13.11.0"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b"
- integrity sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ==
+ version "14.0.1"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.1.tgz#5d93e0a099cd0acd5ef3d5bde3c086e1f49ff68c"
+ integrity sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA==
"@types/normalize-package-data@^2.4.0":
version "2.4.0"
@@ -2843,9 +2849,9 @@
integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
"@types/q@^1.5.1":
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8"
- integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
+ version "1.5.4"
+ resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
+ integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
"@types/query-string@5":
version "5.1.0"
@@ -2853,24 +2859,24 @@
integrity sha512-9/sJK+T04pNq7uwReR0CLxqXj1dhxiTapZ1tIxA0trEsT6FRS0bz09YMcMb7tsVBTm4RJ0NEBYGsAjoEmqoFXg==
"@types/reach__router@^1.2.3":
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.4.tgz#98ef393d06f59d296b5c021ba94b94e5fc463245"
- integrity sha512-DZgYfxUIlVSjvf0AvBbYNbpXLrTFNNpU1HrvCRbnMtx3nvGUUWC1/zlAe4dD4FCPFtc+LQuIPEsDiTb0zQkthg==
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.5.tgz#14e1e981cccd3a5e50dc9e969a72de0b9d472f6d"
+ integrity sha512-h0NbqXN/tJuBY/xggZSej1SKQEstbHO7J/omt1tYoFGmj3YXOodZKbbqD4mNDh7zvEGYd7YFrac1LTtAr3xsYQ==
dependencies:
"@types/history" "*"
"@types/react" "*"
"@types/react-dom@*", "@types/react-dom@^16.9.2":
- version "16.9.6"
- resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.6.tgz#9e7f83d90566521cc2083be2277c6712dcaf754c"
- integrity sha512-S6ihtlPMDotrlCJE9ST1fRmYrQNNwfgL61UB4I1W7M6kPulUKx9fXAleW5zpdIjUQ4fTaaog8uERezjsGUj9HQ==
+ version "16.9.8"
+ resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.8.tgz#fe4c1e11dfc67155733dfa6aa65108b4971cb423"
+ integrity sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA==
dependencies:
"@types/react" "*"
"@types/react-native@*":
- version "0.62.1"
- resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.62.1.tgz#a51d50ade85420a68d594778316ed74e5040078c"
- integrity sha512-4uKqYGek9/OstJWW0hEfF/6fx8BzNkzdAFxeY+VOxec+SPKK/hvGEjnX6+0jV1MnJDBHYKdWfWA4sYCQ8G3sqA==
+ version "0.62.10"
+ resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.62.10.tgz#82c481df21db4e7460755dc3fc7091e333a1d2bd"
+ integrity sha512-QR4PGrzZ3IvRIHlScyIPuv2GV8tD/BMICZz514KGvn3KHbh0mLphHHemtHZC1o8u4xM5LxwVpMpMYHQ+ncSfag==
dependencies:
"@types/react" "*"
@@ -2883,18 +2889,18 @@
redux "^3.6.0"
"@types/react-router-dom@^5.1.0":
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.3.tgz#b5d28e7850bd274d944c0fbbe5d57e6b30d71196"
- integrity sha512-pCq7AkOvjE65jkGS5fQwQhvUp4+4PVD9g39gXLZViP2UqFiFzsEpB3PKf0O6mdbKsewSK8N14/eegisa/0CwnA==
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.5.tgz#7c334a2ea785dbad2b2dcdd83d2cf3d9973da090"
+ integrity sha512-ArBM4B1g3BWLGbaGvwBGO75GNFbLDUthrDojV2vHLih/Tq8M+tgvY1DSwkuNrPSwdp/GUL93WSEpTZs8nVyJLw==
dependencies:
"@types/history" "*"
"@types/react" "*"
"@types/react-router" "*"
"@types/react-router@*":
- version "5.1.5"
- resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.5.tgz#7b2f9b7cc3d350e92664c4e38c0ef529286fe628"
- integrity sha512-RZPdCtZympi6X7EkGyaU7ISiAujDYTWgqMF9owE3P6efITw27IWQykcti0BvA5h4Mu1LLl5rxrpO3r8kHyUZ/Q==
+ version "5.1.7"
+ resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.7.tgz#e9d12ed7dcfc79187e4d36667745b69a5aa11556"
+ integrity sha512-2ouP76VQafKjtuc0ShpwUebhHwJo0G6rhahW9Pb8au3tQTjYXd2jta4wv6U2tGLR/I42yuG00+UXjNYY0dTzbg==
dependencies:
"@types/history" "*"
"@types/react" "*"
@@ -2930,9 +2936,9 @@
"@types/react" "*"
"@types/react@*", "@types/react@^16.9.9":
- version "16.9.32"
- resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.32.tgz#f6368625b224604148d1ddf5920e4fefbd98d383"
- integrity sha512-fmejdp0CTH00mOJmxUPPbWCEBWPvRIL4m8r0qD+BSDUqmutPyGQCHifzMpMzdvZwROdEdL78IuZItntFWgPXHQ==
+ version "16.9.35"
+ resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.35.tgz#a0830d172e8aadd9bd41709ba2281a3124bbd368"
+ integrity sha512-q0n0SsWcGc8nDqH2GJfWQWUOmZSJhXV64CjVN5SvcNti3TdEaA3AH0D8DwNmMdzjMAC/78tB8nAZIlV8yTz+zQ==
dependencies:
"@types/prop-types" "*"
csstype "^2.2.0"
@@ -2975,16 +2981,16 @@
integrity sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==
"@types/uglify-js@*":
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.0.5.tgz#2c70d5c68f6e002e3b2e4f849adc5f162546f633"
- integrity sha512-L7EbSkhSaWBpkl+PZAEAqZTqtTeIsq7s/oX/q0LNnxxJoRVKQE0T81XDVyaxjiiKQwiV2vhVeYRqxdRNqGOGJw==
+ version "3.9.1"
+ resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.9.1.tgz#0ad39d6a72979593f669acdfc7e980d590d3fb94"
+ integrity sha512-rdBIeMQyRBOXogop/EYBvSkYFn9D9yGxUa5hagBVG55KIdSUbp22EACJSHCs6kmmfunojAhf7zJH+Ds06/qLaQ==
dependencies:
source-map "^0.6.1"
"@types/webpack-env@^1.15.0":
- version "1.15.1"
- resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.1.tgz#c8e84705e08eed430b5e15b39c65b0944e4d1422"
- integrity sha512-eWN5ElDTeBc5lRDh95SqA8x18D0ll2pWudU3uWiyfsRmIZcmUXpEsxPU+7+BsdCrO2vfLRC629u/MmjbmF+2tA==
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.2.tgz#927997342bb9f4a5185a86e6579a0a18afc33b0a"
+ integrity sha512-67ZgZpAlhIICIdfQrB5fnDvaKFcDxpKibxznfYRVAT4mQE41Dido/3Ty+E3xGBmTogc5+0Qb8tWhna+5B8z1iQ==
"@types/webpack-sources@*":
version "0.1.7"
@@ -2996,9 +3002,9 @@
source-map "^0.6.1"
"@types/webpack@^4.41.8":
- version "4.41.10"
- resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.10.tgz#2e1f6b3508a249854efe3dcc7690905ac5ee10be"
- integrity sha512-vIy0qaq8AjOjZLuFPqpo7nAJzcoVXMdw3mvpNN07Uvdy0p1IpJeLNBe3obdRP7FX2jIusDE7z1pZa0A6qYUgnA==
+ version "4.41.13"
+ resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.13.tgz#988d114c8913d039b8a0e0502a7fe4f1f84f3d5e"
+ integrity sha512-RYmIHOWSxnTTa765N6jJBVE45pd2SYNblEYshVDduLw6RhocazNmRzE5/ytvBD8IkDMH6DI+bcrqxh8NILimBA==
dependencies:
"@types/anymatch" "*"
"@types/node" "*"
@@ -3013,60 +3019,60 @@
integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
"@types/yargs@^13.0.0":
- version "13.0.8"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.8.tgz#a38c22def2f1c2068f8971acb3ea734eb3c64a99"
- integrity sha512-XAvHLwG7UQ+8M4caKIH0ZozIOYay5fQkAgyIXegXT9jPtdIGdhga+sUEdAr1CiG46aB+c64xQEYyEzlwWVTNzA==
+ version "13.0.9"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.9.tgz#44028e974343c7afcf3960f1a2b1099c39a7b5e1"
+ integrity sha512-xrvhZ4DZewMDhoH1utLtOAwYQy60eYFoXeje30TzM3VOvQlBwQaEpKFq5m34k1wOw2AKIi2pwtiAjdmhvlBUzg==
dependencies:
"@types/yargs-parser" "*"
"@types/yargs@^15.0.0":
- version "15.0.4"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299"
- integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg==
+ version "15.0.5"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79"
+ integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==
dependencies:
"@types/yargs-parser" "*"
"@typescript-eslint/eslint-plugin@^2.12.0":
- version "2.26.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.26.0.tgz#04c96560c8981421e5a9caad8394192363cc423f"
- integrity sha512-4yUnLv40bzfzsXcTAtZyTjbiGUXMrcIJcIMioI22tSOyAxpdXiZ4r7YQUU8Jj6XXrLz9d5aMHPQf5JFR7h27Nw==
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9"
+ integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==
dependencies:
- "@typescript-eslint/experimental-utils" "2.26.0"
+ "@typescript-eslint/experimental-utils" "2.34.0"
functional-red-black-tree "^1.0.1"
regexpp "^3.0.0"
tsutils "^3.17.1"
-"@typescript-eslint/experimental-utils@2.26.0":
- version "2.26.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.26.0.tgz#063390c404d9980767d76274df386c0aa675d91d"
- integrity sha512-RELVoH5EYd+JlGprEyojUv9HeKcZqF7nZUGSblyAw1FwOGNnmQIU8kxJ69fttQvEwCsX5D6ECJT8GTozxrDKVQ==
+"@typescript-eslint/experimental-utils@2.34.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f"
+ integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==
dependencies:
"@types/json-schema" "^7.0.3"
- "@typescript-eslint/typescript-estree" "2.26.0"
+ "@typescript-eslint/typescript-estree" "2.34.0"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
"@typescript-eslint/parser@^2.12.0":
- version "2.26.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.26.0.tgz#385463615818b33acb72a25b39c03579df93d76f"
- integrity sha512-+Xj5fucDtdKEVGSh9353wcnseMRkPpEAOY96EEenN7kJVrLqy/EVwtIh3mxcUz8lsFXW1mT5nN5vvEam/a5HiQ==
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8"
+ integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==
dependencies:
"@types/eslint-visitor-keys" "^1.0.0"
- "@typescript-eslint/experimental-utils" "2.26.0"
- "@typescript-eslint/typescript-estree" "2.26.0"
+ "@typescript-eslint/experimental-utils" "2.34.0"
+ "@typescript-eslint/typescript-estree" "2.34.0"
eslint-visitor-keys "^1.1.0"
-"@typescript-eslint/typescript-estree@2.26.0":
- version "2.26.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.26.0.tgz#d8132cf1ee8a72234f996519a47d8a9118b57d56"
- integrity sha512-3x4SyZCLB4zsKsjuhxDLeVJN6W29VwBnYpCsZ7vIdPel9ZqLfIZJgJXO47MNUkurGpQuIBALdPQKtsSnWpE1Yg==
+"@typescript-eslint/typescript-estree@2.34.0":
+ version "2.34.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5"
+ integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==
dependencies:
debug "^4.1.1"
eslint-visitor-keys "^1.1.0"
glob "^7.1.6"
is-glob "^4.0.1"
lodash "^4.17.15"
- semver "^6.3.0"
+ semver "^7.3.2"
tsutils "^3.17.1"
"@webassemblyjs/ast@1.9.0":
@@ -3282,15 +3288,15 @@ acorn@^5.5.3:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e"
integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==
-acorn@^6.0.1, acorn@^6.2.1:
+acorn@^6.0.1, acorn@^6.4.1:
version "6.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474"
integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==
acorn@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf"
- integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe"
+ integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==
address@1.1.2, address@^1.0.1:
version "1.1.2"
@@ -3376,9 +3382,9 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.5.5:
- version "6.12.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7"
- integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==
+ version "6.12.2"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
+ integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
dependencies:
fast-deep-equal "^3.1.1"
fast-json-stable-stringify "^2.0.0"
@@ -3641,6 +3647,11 @@ arrify@^1.0.1:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+arrify@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+ integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
asap@^2.0.0, asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
@@ -3733,17 +3744,17 @@ atob@^2.1.2:
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
autoprefixer@^9.7.2:
- version "9.7.5"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.5.tgz#8df10b9ff9b5814a8d411a5cfbab9c793c392376"
- integrity sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg==
+ version "9.8.0"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz#68e2d2bef7ba4c3a65436f662d0a56a741e56511"
+ integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A==
dependencies:
- browserslist "^4.11.0"
- caniuse-lite "^1.0.30001036"
+ browserslist "^4.12.0"
+ caniuse-lite "^1.0.30001061"
chalk "^2.4.2"
normalize-range "^0.1.2"
num2fraction "^1.2.2"
- postcss "^7.0.27"
- postcss-value-parser "^4.0.3"
+ postcss "^7.0.30"
+ postcss-value-parser "^4.1.0"
aws-sign2@~0.7.0:
version "0.7.0"
@@ -3850,10 +3861,10 @@ babel-plugin-add-react-displayname@^0.0.5:
resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5"
integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U=
-babel-plugin-dynamic-import-node@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f"
- integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==
+babel-plugin-dynamic-import-node@^2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3"
+ integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==
dependencies:
object.assign "^4.1.0"
@@ -4241,11 +4252,16 @@ bluebird@^3.3.5, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5:
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0:
version "4.11.8"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+bn.js@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.1.tgz#48efc4031a9c4041b9c99c6941d903463ab62eb5"
+ integrity sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==
+
body-parser@1.19.0:
version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
@@ -4372,7 +4388,7 @@ browserify-des@^1.0.0:
inherits "^2.0.1"
safe-buffer "^5.1.2"
-browserify-rsa@^4.0.0:
+browserify-rsa@^4.0.0, browserify-rsa@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
@@ -4381,17 +4397,19 @@ browserify-rsa@^4.0.0:
randombytes "^2.0.1"
browserify-sign@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
- integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11"
+ integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==
dependencies:
- bn.js "^4.1.1"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.2"
- elliptic "^6.0.0"
- inherits "^2.0.1"
- parse-asn1 "^5.0.0"
+ bn.js "^5.1.1"
+ browserify-rsa "^4.0.1"
+ create-hash "^1.2.0"
+ create-hmac "^1.1.7"
+ elliptic "^6.5.2"
+ inherits "^2.0.4"
+ parse-asn1 "^5.1.5"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
browserify-zlib@^0.2.0:
version "0.2.0"
@@ -4409,13 +4427,13 @@ browserslist@4.7.0:
electron-to-chromium "^1.3.247"
node-releases "^1.1.29"
-browserslist@^4.0.0, browserslist@^4.11.0, browserslist@^4.8.3, browserslist@^4.9.1:
- version "4.11.1"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b"
- integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g==
+browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.12.0, browserslist@^4.8.5:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.0.tgz#06c6d5715a1ede6c51fc39ff67fd647f740b656d"
+ integrity sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==
dependencies:
- caniuse-lite "^1.0.30001038"
- electron-to-chromium "^1.3.390"
+ caniuse-lite "^1.0.30001043"
+ electron-to-chromium "^1.3.413"
node-releases "^1.1.53"
pkg-up "^2.0.0"
@@ -4476,9 +4494,9 @@ bulma-tooltip@^3.0.0:
integrity sha512-CsT3APjhlZScskFg38n8HYL8oYNUHQtcu4sz6ERarxkUpBRbk9v0h/5KAvXeKapVSn2dp9l7bOGit5SECP8EWQ==
bulma@^0.8.0:
- version "0.8.1"
- resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.8.1.tgz#a5feacb703b73a87fdeae4f0d12317d62fc1d301"
- integrity sha512-Afi2zv4DKmNSYfmx55V+Mtnt8+WfR8Rs65kWArmzEuWP7vNr7dSAEDI+ORZlgOR1gueNZwpKaPdUi4ZiTNwgPA==
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.8.2.tgz#5d928f16ed4a84549c2873f95c92c38c69c631a7"
+ integrity sha512-vMM/ijYSxX+Sm+nD7Lmc1UgWDy2JcL2nTKqwgEqXuOMU+IGALbXd5MLt/BcjBAPLIx36TtzhzBcSnOP974gcqA==
byline@^5.0.0:
version "5.0.0"
@@ -4614,6 +4632,15 @@ camelcase-keys@^4.0.0:
map-obj "^2.0.0"
quick-lru "^1.0.0"
+camelcase-keys@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
+ integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
+ dependencies:
+ camelcase "^5.3.1"
+ map-obj "^4.0.0"
+ quick-lru "^4.0.1"
+
camelcase@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
@@ -4629,6 +4656,11 @@ camelcase@^5.0.0, camelcase@^5.3.1:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+camelcase@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e"
+ integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==
+
camelize@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b"
@@ -4649,10 +4681,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001036, caniuse-lite@^1.0.30001038:
- version "1.0.30001039"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz#b3814a1c38ffeb23567f8323500c09526a577bbe"
- integrity sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001061:
+ version "1.0.30001062"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz#d814b648338504b315222ace6f1a533d9a55e390"
+ integrity sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw==
capture-exit@^2.0.0:
version "2.0.0"
@@ -4736,10 +4768,10 @@ cheerio@^1.0.0-rc.3:
lodash "^4.15.0"
parse5 "^3.0.1"
-"chokidar@>=2.0.0 <4.0.0":
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450"
- integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==
+"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8"
+ integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==
dependencies:
anymatch "~3.1.1"
braces "~3.0.2"
@@ -4747,7 +4779,7 @@ cheerio@^1.0.0-rc.3:
is-binary-path "~2.1.0"
is-glob "~4.0.1"
normalize-path "~3.0.0"
- readdirp "~3.3.0"
+ readdirp "~3.4.0"
optionalDependencies:
fsevents "~2.1.2"
@@ -4852,9 +4884,9 @@ cli-table3@0.5.1:
colors "^1.1.2"
cli-width@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
- integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
+ integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
clipboard@^2.0.0:
version "2.0.6"
@@ -4865,15 +4897,6 @@ clipboard@^2.0.0:
select "^1.1.2"
tiny-emitter "^2.0.0"
-cliui@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
- integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==
- dependencies:
- string-width "^2.1.1"
- strip-ansi "^4.0.0"
- wrap-ansi "^2.0.0"
-
cliui@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
@@ -5026,9 +5049,9 @@ commondir@^1.0.1:
integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
compare-func@^1.3.1:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648"
- integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.4.tgz#6b07c4c5e8341119baf44578085bda0f4a823516"
+ integrity sha512-sq2sWtrqKPkEXAC8tEJA1+BqAH9GbFkGBtUOqrUX57VSfwp8xyktctk+uLoRy5eccTdxzDcVIztlYDpKs3Jv1Q==
dependencies:
array-ify "^1.0.0"
dot-prop "^3.0.0"
@@ -5134,9 +5157,9 @@ content-type@~1.0.4:
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
conventional-changelog-angular@^5.0.3:
- version "5.0.6"
- resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.6.tgz#269540c624553aded809c29a3508fdc2b544c059"
- integrity sha512-QDEmLa+7qdhVIv8sFZfVxU1VSyVvnXPsxq8Vam49mKUcO1Z8VTLEJk9uI21uiJUsnmm0I4Hrsdc9TgkOQo9WSA==
+ version "5.0.10"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.10.tgz#5cf7b00dd315b6a6a558223c80d5ef24ddb34205"
+ integrity sha512-k7RPPRs0vp8+BtPsM9uDxRl6KcgqtCJmzRD1wRtgqmhQ96g8ifBGo9O/TZBG23jqlXS/rg8BKRDELxfnQQGiaA==
dependencies:
compare-func "^1.3.1"
q "^1.5.1"
@@ -5161,43 +5184,43 @@ conventional-changelog-core@^3.1.6:
through2 "^3.0.0"
conventional-changelog-preset-loader@^2.1.1:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.0.tgz#580fa8ab02cef22c24294d25e52d7ccd247a9a6a"
- integrity sha512-/rHb32J2EJnEXeK4NpDgMaAVTFZS3o1ExmjKMtYVgIC4MQn0vkNSbYpdGRotkfGGRWiqk3Ri3FBkiZGbAfIfOQ==
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz#14a855abbffd59027fd602581f1f34d9862ea44c"
+ integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==
conventional-changelog-writer@^4.0.6:
- version "4.0.11"
- resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.11.tgz#9f56d2122d20c96eb48baae0bf1deffaed1edba4"
- integrity sha512-g81GQOR392I+57Cw3IyP1f+f42ME6aEkbR+L7v1FBBWolB0xkjKTeCWVguzRrp6UiT1O6gBpJbEy2eq7AnV1rw==
+ version "4.0.16"
+ resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-4.0.16.tgz#ca10f2691a8ea6d3c2eb74bd35bcf40aa052dda5"
+ integrity sha512-jmU1sDJDZpm/dkuFxBeRXvyNcJQeKhGtVcFFkwTphUAzyYWcwz2j36Wcv+Mv2hU3tpvLMkysOPXJTLO55AUrYQ==
dependencies:
compare-func "^1.3.1"
- conventional-commits-filter "^2.0.2"
+ conventional-commits-filter "^2.0.6"
dateformat "^3.0.0"
- handlebars "^4.4.0"
+ handlebars "^4.7.6"
json-stringify-safe "^5.0.1"
lodash "^4.17.15"
- meow "^5.0.0"
+ meow "^7.0.0"
semver "^6.0.0"
split "^1.0.0"
through2 "^3.0.0"
-conventional-commits-filter@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.2.tgz#f122f89fbcd5bb81e2af2fcac0254d062d1039c1"
- integrity sha512-WpGKsMeXfs21m1zIw4s9H5sys2+9JccTzpN6toXtxhpw2VNF2JUXwIakthKBy+LN4DvJm+TzWhxOMWOs1OFCFQ==
+conventional-commits-filter@^2.0.2, conventional-commits-filter@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-2.0.6.tgz#0935e1240c5ca7698329affee1b6a46d33324c4c"
+ integrity sha512-4g+sw8+KA50/Qwzfr0hL5k5NWxqtrOVw4DDk3/h6L85a9Gz0/Eqp3oP+CWCNfesBvZZZEFHF7OTEbRe+yYSyKw==
dependencies:
lodash.ismatch "^4.4.0"
modify-values "^1.0.0"
conventional-commits-parser@^3.0.3:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.0.8.tgz#23310a9bda6c93c874224375e72b09fb275fe710"
- integrity sha512-YcBSGkZbYp7d+Cr3NWUeXbPDFUN6g3SaSIzOybi8bjHL5IJ5225OSCxJJ4LgziyEJ7AaJtE9L2/EU6H7Nt/DDQ==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.1.0.tgz#10140673d5e7ef5572633791456c5d03b69e8be4"
+ integrity sha512-RSo5S0WIwXZiRxUGTPuYFbqvrR4vpJ1BDdTlthFgvHt5kEdnd1+pdvwWphWn57/oIl4V72NMmOocFqqJ8mFFhA==
dependencies:
JSONStream "^1.0.4"
is-text-path "^1.0.1"
lodash "^4.17.15"
- meow "^5.0.0"
+ meow "^7.0.0"
split2 "^2.0.0"
through2 "^3.0.0"
trim-off-newlines "^1.0.0"
@@ -5258,17 +5281,17 @@ copy-to-clipboard@^3.0.8:
toggle-selection "^1.0.6"
core-js-compat@^3.6.2:
- version "3.6.4"
- resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17"
- integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c"
+ integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==
dependencies:
- browserslist "^4.8.3"
+ browserslist "^4.8.5"
semver "7.0.0"
core-js-pure@^3.0.0, core-js-pure@^3.0.1:
- version "3.6.4"
- resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a"
- integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw==
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813"
+ integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==
core-js@^1.0.0:
version "1.2.7"
@@ -5281,9 +5304,9 @@ core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5, core-js@^2.6.9:
integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
core-js@^3.0.1, core-js@^3.0.4:
- version "3.6.4"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647"
- integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==
+ version "3.6.5"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
+ integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
@@ -5340,7 +5363,7 @@ create-emotion@^9.2.12:
stylis "^3.5.0"
stylis-rule-sheet "^0.0.10"
-create-hash@^1.1.0, create-hash@^1.1.2:
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
@@ -5351,7 +5374,7 @@ create-hash@^1.1.0, create-hash@^1.1.2:
ripemd160 "^2.0.1"
sha.js "^2.4.0"
-create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
@@ -5418,22 +5441,23 @@ css-declaration-sorter@^4.0.1:
timsort "^0.3.0"
css-loader@^3.0.0, css-loader@^3.2.0:
- version "3.4.2"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.4.2.tgz#d3fdb3358b43f233b78501c5ed7b1c6da6133202"
- integrity sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA==
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz#95ac16468e1adcd95c844729e0bb167639eb0bcf"
+ integrity sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw==
dependencies:
camelcase "^5.3.1"
cssesc "^3.0.0"
icss-utils "^4.1.1"
loader-utils "^1.2.3"
normalize-path "^3.0.0"
- postcss "^7.0.23"
+ postcss "^7.0.27"
postcss-modules-extract-imports "^2.0.0"
postcss-modules-local-by-default "^3.0.2"
- postcss-modules-scope "^2.1.1"
+ postcss-modules-scope "^2.2.0"
postcss-modules-values "^3.0.0"
- postcss-value-parser "^4.0.2"
- schema-utils "^2.6.0"
+ postcss-value-parser "^4.0.3"
+ schema-utils "^2.6.6"
+ semver "^6.3.0"
css-select-base-adapter@^0.1.1:
version "0.1.1"
@@ -5633,9 +5657,9 @@ data-urls@^1.0.0:
whatwg-url "^7.0.0"
date-fns@^2.4.1:
- version "2.11.1"
- resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.11.1.tgz#197b8be1bbf5c5e6fe8bea817f0fe111820e7a12"
- integrity sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w==
+ version "2.14.0"
+ resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.14.0.tgz#359a87a265bb34ef2e38f93ecf63ac453f9bc7ba"
+ integrity sha512-1zD+68jhFgDIM0rF05rcwYO8cExdNqxjq4xP1QKM60Q45mnO6zaMWB4tOzrIr4M4GSLntsKeE4c9Bdl2jhL/yw==
dateformat@^3.0.0:
version "3.0.3"
@@ -5675,7 +5699,7 @@ debuglog@^1.0.1:
resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
-decamelize-keys@^1.0.0:
+decamelize-keys@^1.0.0, decamelize-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=
@@ -6043,9 +6067,9 @@ domutils@^1.5.1, domutils@^1.7.0:
domelementtype "1"
domutils@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.0.0.tgz#15b8278e37bfa8468d157478c58c367718133c08"
- integrity sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.1.0.tgz#7ade3201af43703fde154952e3a868eb4b635f16"
+ integrity sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==
dependencies:
dom-serializer "^0.2.1"
domelementtype "^2.0.1"
@@ -6093,9 +6117,9 @@ dotenv-expand@^5.1.0:
integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
dotenv-webpack@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.7.0.tgz#4384d8c57ee6f405c296278c14a9f9167856d3a1"
- integrity sha512-wwNtOBW/6gLQSkb8p43y0Wts970A3xtNiG/mpwj9MLUhtPCQG6i+/DSXXoNN7fbPCU/vQ7JjwGmgOeGZSSZnsw==
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz#7ca79cef2497dd4079d43e81e0796bc9d0f68a5e"
+ integrity sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg==
dependencies:
dotenv-defaults "^1.0.2"
@@ -6142,10 +6166,10 @@ ejs@^2.7.4:
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
-electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.390:
- version "1.3.397"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.397.tgz#db640c2e67b08d590a504c20b56904537aa2bafa"
- integrity sha512-zcUd1p/7yzTSdWkCTrqGvbnEOASy96d0RJL/lc5BDJoO23Z3G/VHd0yIPbguDU9n8QNUTCigLO7oEdtOb7fp2A==
+electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.413:
+ version "1.3.442"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.442.tgz#62f96e0529f40a214a97411b57f27c4f080f0aa2"
+ integrity sha512-3OjmbnD9+LyWzh9o3rjC7LNIkcDHjKyHM6Xt0G/+7gHGCaEIwvWYi8TrNA8feNnuGmvI9WKu289PFMQGMLHAig==
element-resize-detector@^1.2.1:
version "1.2.1"
@@ -6154,7 +6178,7 @@ element-resize-detector@^1.2.1:
dependencies:
batch-processor "1.0.0"
-elliptic@^6.0.0:
+elliptic@^6.0.0, elliptic@^6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
@@ -6247,9 +6271,9 @@ entities@^1.1.1, entities@^1.1.2, entities@~1.1.1:
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
entities@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
- integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.2.tgz#ac74db0bba8d33808bbf36809c3a5c3683531436"
+ integrity sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==
env-paths@^2.2.0:
version "2.2.0"
@@ -6257,9 +6281,9 @@ env-paths@^2.2.0:
integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==
envinfo@^7.3.1:
- version "7.5.0"
- resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.0.tgz#91410bb6db262fb4f1409bd506e9ff57e91023f4"
- integrity sha512-jDgnJaF/Btomk+m3PZDTTCb5XIIIX3zYItnCRfF73zVgvinLoRomuhi75Y4su0PtQxWz4v66XnLLckyvyJTOIQ==
+ version "7.5.1"
+ resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236"
+ integrity sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ==
enzyme-adapter-react-16@^1.15.0:
version "1.15.2"
@@ -6289,9 +6313,9 @@ enzyme-adapter-utils@^1.13.0:
semver "^5.7.1"
enzyme-context-react-router-4@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/enzyme-context-react-router-4/-/enzyme-context-react-router-4-2.0.0.tgz#d23ab6a4e3a6c6d34519def1bdacea4fd19daecd"
- integrity sha512-q/0Fugcvipzo6qxghQ9NQjMrj0PW1wZh02dQ67AVg/j35naD4MeXihI2la3s4fUKGhrK6IUCQ4QGEw15slTNqQ==
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/enzyme-context-react-router-4/-/enzyme-context-react-router-4-2.1.0.tgz#3154fc5294047e55fa65c4f15b3df912500f5b20"
+ integrity sha512-PCH0DuZ70r5PTDn6ZkETsF8MS2g9sgbrJGM2lvHsBHNI41p6HUo8nPf2zWJJ1vyWCDGQNlvuNUt5p9ZdgL0vCA==
dependencies:
"@types/history" "^4.7.3"
enzyme-context-utils "^1.1.0"
@@ -6463,9 +6487,9 @@ escodegen@^1.9.1:
source-map "~0.6.1"
eslint-config-prettier@^6.4.0:
- version "6.10.1"
- resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.10.1.tgz#129ef9ec575d5ddc0e269667bf09defcd898642a"
- integrity sha512-svTy6zh1ecQojvpbJSgH3aei/Rt7C6i090l5f2WQ4aB05lYHeZIR1qL4wZyyILTbtmnbHP5Yn8MrsOJMGa8RkQ==
+ version "6.11.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.11.0.tgz#f6d2238c1290d01c859a8b5c1f7d352a0b0da8b1"
+ integrity sha512-oB8cpLWSAjOVFEJhhyMZh6NOEOtBVziaqdDQ86+qhDHFbZXoRTM7pNSvFRfW/W/L/LrQ38C99J5CGuRBBzBsdA==
dependencies:
get-stdin "^6.0.0"
@@ -6533,9 +6557,9 @@ eslint-plugin-jsx-a11y@^6.2.3:
jsx-ast-utils "^2.2.1"
eslint-plugin-prettier@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba"
- integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz#ae116a0fc0e598fdae48743a4430903de5b4e6ca"
+ integrity sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ==
dependencies:
prettier-linter-helpers "^1.0.0"
@@ -6545,9 +6569,9 @@ eslint-plugin-react-hooks@^2.1.2:
integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==
eslint-plugin-react@^7.16.0:
- version "7.19.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666"
- integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==
+ version "7.20.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3"
+ integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA==
dependencies:
array-includes "^3.1.1"
doctrine "^2.1.0"
@@ -6558,7 +6582,6 @@ eslint-plugin-react@^7.16.0:
object.values "^1.1.1"
prop-types "^15.7.2"
resolve "^1.15.1"
- semver "^6.3.0"
string.prototype.matchall "^4.0.2"
xregexp "^4.3.0"
@@ -6655,11 +6678,11 @@ esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0:
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
esquery@^1.0.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe"
- integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q==
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
+ integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
dependencies:
- estraverse "^5.0.0"
+ estraverse "^5.1.0"
esrecurse@^4.1.0:
version "4.2.1"
@@ -6673,10 +6696,10 @@ estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-estraverse@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22"
- integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A==
+estraverse@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642"
+ integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
esutils@^2.0.2:
version "2.0.3"
@@ -6694,9 +6717,9 @@ eventemitter3@^3.1.0:
integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==
eventemitter3@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
- integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
+ integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
events@^3.0.0:
version "3.1.0"
@@ -7044,7 +7067,7 @@ find-cache-dir@^2.1.0:
make-dir "^2.0.0"
pkg-dir "^3.0.0"
-find-cache-dir@^3.0.0, find-cache-dir@^3.2.0:
+find-cache-dir@^3.0.0, find-cache-dir@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880"
integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==
@@ -7120,10 +7143,10 @@ flush-write-stream@^1.0.0:
inherits "^2.0.3"
readable-stream "^2.3.6"
-focus-lock@^0.6.6:
- version "0.6.6"
- resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.6.tgz#98119a755a38cfdbeda0280eaa77e307eee850c7"
- integrity sha512-Dx69IXGCq1qsUExWuG+5wkiMqVM/zGx/reXSJSLogECwp3x6KeNQZ+NAetgxEFpnC41rD8U3+jRCW68+LNzdtw==
+focus-lock@^0.6.7:
+ version "0.6.8"
+ resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.6.8.tgz#61985fadfa92f02f2ee1d90bc738efaf7f3c9f46"
+ integrity sha512-vkHTluRCoq9FcsrldC0ulQHiyBYgVJB2CX53I8r0nTC6KnEij7Of0jpBspjt3/CuNb6fyoj3aOh9J2HgQUM0og==
follow-redirects@^1.0.0:
version "1.11.0"
@@ -7257,17 +7280,17 @@ fs.realpath@^1.0.0:
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@^1.2.7:
- version "1.2.12"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c"
- integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38"
+ integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==
dependencies:
bindings "^1.5.0"
nan "^2.12.1"
fsevents@~2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805"
- integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
+ integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
function-bind@^1.1.1:
version "1.1.1"
@@ -7322,11 +7345,6 @@ gensync@^1.0.0-beta.1:
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
-get-caller-file@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
- integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
-
get-caller-file@^2.0.1:
version "2.0.5"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
@@ -7426,9 +7444,9 @@ gitconfiglocal@^1.0.0:
dependencies:
ini "^1.3.2"
-gitdiff-parser@^0.1.2, "gitdiff-parser@https://github.com/scm-manager/gitdiff-parser#ed3fe7de73dbb0a06c3e6adbbdf22dbae6e66351":
+gitdiff-parser@^0.1.2, "gitdiff-parser@https://github.com/scm-manager/gitdiff-parser#1da10408e52ad1d58b1f817dd1d658d9f2eb4087":
version "0.1.2"
- resolved "https://github.com/scm-manager/gitdiff-parser#ed3fe7de73dbb0a06c3e6adbbdf22dbae6e66351"
+ resolved "https://github.com/scm-manager/gitdiff-parser#1da10408e52ad1d58b1f817dd1d658d9f2eb4087"
glob-base@^0.3.0:
version "0.3.0"
@@ -7591,9 +7609,9 @@ good-listener@^1.2.2:
delegate "^3.1.2"
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.2:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
- integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
+ version "4.2.4"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
+ integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
growly@^1.3.0:
version "1.3.0"
@@ -7618,7 +7636,7 @@ handle-thing@^2.0.0:
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
-handlebars@^4.4.0:
+handlebars@^4.7.6:
version "4.7.6"
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e"
integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==
@@ -7643,6 +7661,11 @@ har-validator@~5.1.3:
ajv "^6.5.5"
har-schema "^2.0.0"
+hard-rejection@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
+ integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
+
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
@@ -7709,12 +7732,13 @@ has@^1.0.0, has@^1.0.3:
function-bind "^1.1.1"
hash-base@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
- integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+ integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
+ inherits "^2.0.4"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
hash.js@^1.0.0, hash.js@^1.0.3:
version "1.1.7"
@@ -7843,10 +7867,10 @@ html-encoding-sniffer@^1.0.2:
dependencies:
whatwg-encoding "^1.0.1"
-html-entities@^1.2.0, html-entities@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
- integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
+html-entities@^1.2.0, html-entities@^1.2.1, html-entities@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
+ integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==
html-escaper@^2.0.0:
version "2.0.2"
@@ -7854,9 +7878,9 @@ html-escaper@^2.0.0:
integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
html-minifier-terser@^5.0.1:
- version "5.0.5"
- resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.0.5.tgz#8f12f639789f04faa9f5cf2ff9b9f65607f21f8b"
- integrity sha512-cBSFFghQh/uHcfSiL42KxxIRMF7A144+3E44xdlctIjxEmkEfCvouxNyFH2wysXk1fCGBPwtcr3hDWlGTfkDew==
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054"
+ integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==
dependencies:
camel-case "^4.1.1"
clean-css "^4.2.3"
@@ -7884,9 +7908,9 @@ html-to-react@^1.3.4:
ramda "^0.26"
html-webpack-plugin@^4.0.0-beta.2:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.4.tgz#90cdfb168094e93e047174d9baca098ec5540636"
- integrity sha512-BREQzUbFfIQS39KqxkT2L1Ot0tuu1isako1CaCQLrgEQ43zi2ScHAe3SMTnVBWsStnIsGtl8jprDdxwZkNhrwQ==
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz#53bf8f6d696c4637d5b656d3d9863d89ce8174fd"
+ integrity sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w==
dependencies:
"@types/html-minifier-terser" "^5.0.0"
"@types/tapable" "^1.0.5"
@@ -7986,9 +8010,9 @@ http-proxy-middleware@0.19.1:
micromatch "^3.1.10"
http-proxy@^1.17.0:
- version "1.18.0"
- resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a"
- integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==
+ version "1.18.1"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
+ integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
dependencies:
eventemitter3 "^4.0.0"
follow-redirects "^1.0.0"
@@ -8024,21 +8048,21 @@ humanize-ms@^1.2.1:
ms "^2.0.0"
i18next-browser-languagedetector@^4.0.0:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-4.0.2.tgz#eb02535cc5e57dd534fc60abeede05a3823a8551"
- integrity sha512-AK4IZ3XST4HIKShgpB2gOFeDPrMOnZx56GLA6dGo/8rvkiczIlq05lV8w77c3ShEZxtTZeUVRI4Q/cBFFVXS/w==
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-4.2.0.tgz#82e35d31f88a1d7c2b6d5913bf8c8481cd40aafb"
+ integrity sha512-qRSCBWgDUSqVQb3sTxkDC+ImYLhF+wB387Y1RpOcJvyex+V3abi+W83n4Awy+dx719AOBbKTy97FjrUGrAhbyw==
dependencies:
"@babel/runtime" "^7.5.5"
i18next-fetch-backend@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/i18next-fetch-backend/-/i18next-fetch-backend-2.2.0.tgz#39ff6578596e0122e80692e04d7897ee373607d6"
- integrity sha512-HodOCr4fezjMgJwWnOR/JUotdbM1onXdnB6Y+XDgDpXX58SkZXcyz6VmmUGc/8XMxFzq3162Qs2vO+SlO4TCFw==
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/i18next-fetch-backend/-/i18next-fetch-backend-2.3.1.tgz#5bad723cfdec4b29698e580957fa547f4ff6e37a"
+ integrity sha512-cn0GFBbkkaXwaiXqfb3bpmhoBYvFR9bFBR5BeSNMP9KSmYE8M+q0QKwd68rcVDwasFxrurI97hYOY+5svGM51Q==
i18next@*:
- version "19.3.4"
- resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.3.4.tgz#512de50ee6075df825c646e1ce646a104f0938c9"
- integrity sha512-ef7AxxutzdhBsBNugE9jgqsbwesG1muJOtZ9ZrPARPs/jXegViTp4+8JCeMp8BAyTIo1Zn0giqc8+2UpqFjU0w==
+ version "19.4.4"
+ resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.4.4.tgz#c0a18bc2f2be554da636e67bfbf5200c7948b60d"
+ integrity sha512-ofaHtdsDdX3A5nYur1HWblB7J4hIcjr2ACdnwTAJgc8hTfPbyzZfGX0hVkKpI3vzDIgO6Uzc4v1ffW2W6gG6zw==
dependencies:
"@babel/runtime" "^7.3.1"
@@ -8173,7 +8197,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -8523,9 +8547,9 @@ is-fullwidth-code-point@^3.0.0:
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
is-function@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
- integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
+ integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
is-generator-fn@^2.0.0:
version "2.1.0"
@@ -8633,11 +8657,6 @@ is-plain-object@^3.0.0:
dependencies:
isobject "^4.0.0"
-is-promise@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
- integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
-
is-regex@^1.0.4, is-regex@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae"
@@ -8714,9 +8733,9 @@ is-utf8@^0.2.0:
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
is-what@^3.3.1:
- version "3.7.1"
- resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.7.1.tgz#a3f810a99f88e9122cf17bf2be7709688970db1a"
- integrity sha512-IAoapxlqyLSqt0Zr/7ZMT/fjEw9nwxxmz/TlBH+TJjvcXxmmAdRvo41W74uw3XJMGFpbeft97cpkPmLK89lJWw==
+ version "3.8.0"
+ resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.8.0.tgz#610bc46a524355f2424eb85eedc6ebbbf7e1ff8c"
+ integrity sha512-UKeBoQfV8bjlM4pmx1FLDHdxslW/1mTksEs8ReVsilPmUv5cORd4+2/wFcviI3cUjrLybxCjzc8DnodAzJ/Wrg==
is-whitespace-character@^1.0.0:
version "1.0.4"
@@ -8744,9 +8763,11 @@ is-wsl@^1.1.0:
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
is-wsl@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d"
- integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
isarray@0.0.1:
version "0.0.1"
@@ -8918,14 +8939,14 @@ jest-diff@^24.3.0, jest-diff@^24.9.0:
pretty-format "^24.9.0"
jest-diff@^25.2.1:
- version "25.2.6"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.2.6.tgz#a6d70a9ab74507715ea1092ac513d1ab81c1b5e7"
- integrity sha512-KuadXImtRghTFga+/adnNrv9s61HudRMR7gVSbP35UKZdn4IK2/0N0PpGZIqtmllK9aUyye54I3nu28OYSnqOg==
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
+ integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
dependencies:
chalk "^3.0.0"
diff-sequences "^25.2.6"
jest-get-type "^25.2.6"
- pretty-format "^25.2.6"
+ pretty-format "^25.5.0"
jest-docblock@^24.3.0:
version "24.9.0"
@@ -9234,10 +9255,10 @@ jest-worker@^24.6.0, jest-worker@^24.9.0:
merge-stream "^2.0.0"
supports-color "^6.1.0"
-jest-worker@^25.1.0:
- version "25.2.6"
- resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.2.6.tgz#d1292625326794ce187c38f51109faced3846c58"
- integrity sha512-FJn9XDUSxcOR4cwDzRfL1z56rUofNTFs539FGASpd50RHdb6EVkhxQqktodW2mI49l+W3H+tFJDotCHUQF6dmA==
+jest-worker@^25.4.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1"
+ integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==
dependencies:
merge-stream "^2.0.0"
supports-color "^7.0.0"
@@ -9427,7 +9448,7 @@ kind-of@^5.0.0:
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
-kind-of@^6.0.0, kind-of@^6.0.2:
+kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
@@ -9486,26 +9507,26 @@ left-pad@^1.3.0:
integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
lerna@^3.17.0:
- version "3.20.2"
- resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.20.2.tgz#abf84e73055fe84ee21b46e64baf37b496c24864"
- integrity sha512-bjdL7hPLpU3Y8CBnw/1ys3ynQMUjiK6l9iDWnEGwFtDy48Xh5JboR9ZJwmKGCz9A/sarVVIGwf1tlRNKUG9etA==
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.21.0.tgz#c81a0f8df45c6b7c9d3fc9fdcd0f846aca2375c6"
+ integrity sha512-ux8yOwQEgIXOZVUfq+T8nVzPymL19vlIoPbysOP3YA4hcjKlqQIlsjI/1ugBe6b4MF7W4iV5vS3gH9cGqBBc1A==
dependencies:
- "@lerna/add" "3.20.0"
- "@lerna/bootstrap" "3.20.0"
- "@lerna/changed" "3.20.0"
- "@lerna/clean" "3.20.0"
+ "@lerna/add" "3.21.0"
+ "@lerna/bootstrap" "3.21.0"
+ "@lerna/changed" "3.21.0"
+ "@lerna/clean" "3.21.0"
"@lerna/cli" "3.18.5"
- "@lerna/create" "3.18.5"
- "@lerna/diff" "3.18.5"
- "@lerna/exec" "3.20.0"
- "@lerna/import" "3.18.5"
- "@lerna/info" "3.20.0"
- "@lerna/init" "3.18.5"
- "@lerna/link" "3.18.5"
- "@lerna/list" "3.20.0"
- "@lerna/publish" "3.20.2"
- "@lerna/run" "3.20.0"
- "@lerna/version" "3.20.2"
+ "@lerna/create" "3.21.0"
+ "@lerna/diff" "3.21.0"
+ "@lerna/exec" "3.21.0"
+ "@lerna/import" "3.21.0"
+ "@lerna/info" "3.21.0"
+ "@lerna/init" "3.21.0"
+ "@lerna/link" "3.21.0"
+ "@lerna/list" "3.21.0"
+ "@lerna/publish" "3.21.0"
+ "@lerna/run" "3.21.0"
+ "@lerna/version" "3.21.0"
import-local "^2.0.0"
npmlog "^4.1.2"
@@ -9599,6 +9620,15 @@ loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0:
emojis-list "^3.0.0"
json5 "^1.0.1"
+loader-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0"
+ integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^2.1.2"
+
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
@@ -9727,10 +9757,10 @@ lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
-loglevel@^1.6.6:
- version "1.6.7"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56"
- integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A==
+loglevel@^1.6.8:
+ version "1.6.8"
+ resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171"
+ integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
version "1.4.0"
@@ -9790,9 +9820,9 @@ make-dir@^2.0.0, make-dir@^2.1.0:
semver "^5.6.0"
make-dir@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392"
- integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
dependencies:
semver "^6.0.0"
@@ -9842,6 +9872,11 @@ map-obj@^2.0.0:
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9"
integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk=
+map-obj@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.1.0.tgz#b91221b542734b9f14256c0132c897c5d7256fd5"
+ integrity sha512-glc9y00wgtwcDmp7GaE/0b0OnxpNJsVf3ael/An6Fe2Q51LLwN1er6sdomLRzz5h0+yMpiYLhWYF5R7HeqVd4g==
+
map-or-similar@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08"
@@ -9860,9 +9895,9 @@ markdown-escapes@^1.0.0:
integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==
markdown-to-jsx@^6.9.1, markdown-to-jsx@^6.9.3:
- version "6.11.0"
- resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.11.0.tgz#a2e3f2bc781c3402d8bb0f8e0a12a186474623b0"
- integrity sha512-RH7LCJQ4RFmPqVeZEesKaO1biRzB/k4utoofmTCp3Eiw6D7qfvK8fzZq/2bjEJAtVkfPrM5SMt5APGf2rnaKMg==
+ version "6.11.1"
+ resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.11.1.tgz#3931612cfffaa5fd6610ecf2a4055eccccb98fa8"
+ integrity sha512-FdtDAv8d9/tjyHxdCvWZxxOgK2icwzBkTq/dPk+XlQ2B+DYDcwE89FWGzT92erXQ0CQR/bQbpNK3loNYhYL70g==
dependencies:
prop-types "^15.6.2"
unquote "^1.1.0"
@@ -9966,20 +10001,24 @@ meow@^4.0.0:
redent "^2.0.0"
trim-newlines "^2.0.0"
-meow@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4"
- integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==
+meow@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/meow/-/meow-7.0.1.tgz#1ed4a0a50b3844b451369c48362eb0515f04c1dc"
+ integrity sha512-tBKIQqVrAHqwit0vfuFPY3LlzJYkEOFyKa3bPgxzNl6q/RtN8KQ+ALYEASYuFayzSAsjlhXj/JZ10rH85Q6TUw==
dependencies:
- camelcase-keys "^4.0.0"
- decamelize-keys "^1.0.0"
- loud-rejection "^1.0.0"
- minimist-options "^3.0.1"
- normalize-package-data "^2.3.4"
- read-pkg-up "^3.0.0"
- redent "^2.0.0"
- trim-newlines "^2.0.0"
- yargs-parser "^10.0.0"
+ "@types/minimist" "^1.2.0"
+ arrify "^2.0.1"
+ camelcase "^6.0.0"
+ camelcase-keys "^6.2.2"
+ decamelize-keys "^1.1.0"
+ hard-rejection "^2.1.0"
+ minimist-options "^4.0.2"
+ normalize-package-data "^2.5.0"
+ read-pkg-up "^7.0.1"
+ redent "^3.0.0"
+ trim-newlines "^3.0.0"
+ type-fest "^0.13.1"
+ yargs-parser "^18.1.3"
merge-anything@^2.2.4:
version "2.4.4"
@@ -10057,17 +10096,17 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0"
brorand "^1.0.1"
-mime-db@1.43.0, "mime-db@>= 1.43.0 < 2":
- version "1.43.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
- integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
+mime-db@1.44.0, "mime-db@>= 1.43.0 < 2":
+ version "1.44.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92"
+ integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==
mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24:
- version "2.1.26"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
- integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
+ version "2.1.27"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f"
+ integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==
dependencies:
- mime-db "1.43.0"
+ mime-db "1.44.0"
mime@1.6.0:
version "1.6.0"
@@ -10075,9 +10114,9 @@ mime@1.6.0:
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mime@^2.4.4:
- version "2.4.4"
- resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
- integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
+ version "2.4.5"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.5.tgz#d8de2ecb92982dedbb6541c9b6841d7f218ea009"
+ integrity sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==
mimic-fn@^1.0.0:
version "1.2.0"
@@ -10101,14 +10140,13 @@ min-indent@^1.0.0:
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256"
integrity sha1-z8RcN+nsDY8KDsPdTvf3w6vjklY=
-mini-create-react-context@^0.3.0:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189"
- integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==
+mini-create-react-context@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz#df60501c83151db69e28eac0ef08b4002efab040"
+ integrity sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==
dependencies:
- "@babel/runtime" "^7.4.0"
- gud "^1.0.0"
- tiny-warning "^1.0.2"
+ "@babel/runtime" "^7.5.5"
+ tiny-warning "^1.0.3"
mini-css-extract-plugin@^0.7.0:
version "0.7.0"
@@ -10155,6 +10193,15 @@ minimist-options@^3.0.1:
arrify "^1.0.1"
is-plain-obj "^1.1.0"
+minimist-options@^4.0.2:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
+ integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
+ dependencies:
+ arrify "^1.0.1"
+ is-plain-obj "^1.1.0"
+ kind-of "^6.0.3"
+
minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
@@ -10175,9 +10222,9 @@ minipass-flush@^1.0.5:
minipass "^3.0.0"
minipass-pipeline@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a"
- integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz#55f7839307d74859d6e8ada9c3ebe72cec216a34"
+ integrity sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==
dependencies:
minipass "^3.0.0"
@@ -10190,9 +10237,9 @@ minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
yallist "^3.0.0"
minipass@^3.0.0, minipass@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5"
- integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd"
+ integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==
dependencies:
yallist "^4.0.0"
@@ -10339,9 +10386,9 @@ mz@^2.5.0:
thenify-all "^1.0.0"
nan@^2.12.1:
- version "2.14.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
- integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
+ version "2.14.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01"
+ integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==
nanomatch@^1.2.9:
version "1.2.13"
@@ -10366,9 +10413,9 @@ natural-compare@^1.4.0:
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
nearley@^2.7.10:
- version "2.19.1"
- resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.1.tgz#4af4006e16645ff800e9f993c3af039857d9dbdc"
- integrity sha512-xq47GIUGXxU9vQg7g/y1o1xuKnkO7ev4nRWqftmQrLkfnE/FjRqDaGOUakM8XHPn/6pW3bGjU2wgoJyId90rqg==
+ version "2.19.3"
+ resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.3.tgz#ae3b040e27616b5348102c436d1719209476a5a1"
+ integrity sha512-FpAy1PmTsUpOtgxr23g4jRNvJHYzZEW2PixXeSzksLR/ykPfwKhAodc2+9wQhY+JneWLcvkDw6q7FJIsIdF/aQ==
dependencies:
commander "^2.19.0"
moo "^0.5.0"
@@ -10501,9 +10548,9 @@ node-notifier@^5.4.2:
which "^1.3.0"
node-releases@^1.1.29, node-releases@^1.1.53:
- version "1.1.53"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4"
- integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==
+ version "1.1.55"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.55.tgz#8af23b7c561d8e2e6e36a46637bab84633b07cee"
+ integrity sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w==
nopt@^4.0.1:
version "4.0.3"
@@ -10680,9 +10727,12 @@ object-inspect@^1.7.0:
integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
object-is@^1.0.1, object-is@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4"
- integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6"
+ integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==
+ dependencies:
+ define-properties "^1.1.3"
+ es-abstract "^1.17.5"
object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1:
version "1.1.1"
@@ -10802,9 +10852,9 @@ open@^6.3.0:
is-wsl "^1.1.0"
open@^7.0.0:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48"
- integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA==
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/open/-/open-7.0.4.tgz#c28a9d315e5c98340bf979fdcb2e58664aa10d83"
+ integrity sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ==
dependencies:
is-docker "^2.0.0"
is-wsl "^2.1.1"
@@ -10853,7 +10903,7 @@ os-homedir@^1.0.0:
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
-os-locale@^3.0.0, os-locale@^3.1.0:
+os-locale@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
@@ -10912,7 +10962,7 @@ p-limit@^1.1.0:
dependencies:
p-try "^1.0.0"
-p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.2.2:
+p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
@@ -11029,7 +11079,7 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-asn1@^5.0.0:
+parse-asn1@^5.0.0, parse-asn1@^5.1.5:
version "5.1.5"
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
@@ -11244,7 +11294,7 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7:
+picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
@@ -11324,21 +11374,21 @@ pnp-webpack-plugin@1.5.0:
ts-pnp "^1.1.2"
polished@^3.3.1:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/polished/-/polished-3.5.1.tgz#657b6faf4c2308f3e0b1951196803a5e5d67b122"
- integrity sha512-GVbvskpBiDV5TknurGL6OyFfLHsCknxbU8w5iMppT8rW0tLEoQHrIRfrPNPqGXNj3HGhkjRvhmg59Fy7HSnCAw==
+ version "3.6.3"
+ resolved "https://registry.yarnpkg.com/polished/-/polished-3.6.3.tgz#68f4fe7ffad46530733029b939dd12978200cb59"
+ integrity sha512-QJ0q0b6gX1+0OJtPMfgVJxV0vg5XTa4im+Rca989dAtmsd/fEky3X+0A+V+OUXq1nyiDGplJwqD853dTS0gkPg==
dependencies:
- "@babel/runtime" "^7.8.7"
+ "@babel/runtime" "^7.9.2"
popper.js@^1.14.4, popper.js@^1.14.7:
version "1.16.1"
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
-portfinder@^1.0.25:
- version "1.0.25"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"
- integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==
+portfinder@^1.0.26:
+ version "1.0.26"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70"
+ integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==
dependencies:
async "^2.6.2"
debug "^3.1.1"
@@ -11406,9 +11456,9 @@ postcss-discard-overridden@^4.0.1:
postcss "^7.0.0"
postcss-flexbugs-fixes@^4.1.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.0.tgz#662b3dcb6354638b9213a55eed8913bcdc8d004a"
- integrity sha512-QRE0n3hpkxxS/OGvzOa+PDuy4mh/Jg4o9ui22/ko5iGYOG3M5dfJabjnAZjTdh2G9F85c7Hv8hWcEDEKW/xceQ==
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690"
+ integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==
dependencies:
postcss "^7.0.26"
@@ -11509,7 +11559,7 @@ postcss-modules-local-by-default@^3.0.2:
postcss-selector-parser "^6.0.2"
postcss-value-parser "^4.0.0"
-postcss-modules-scope@^2.1.1:
+postcss-modules-scope@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee"
integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==
@@ -11677,15 +11727,15 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0:
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
-postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d"
- integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg==
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3, postcss-value-parser@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
+ integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
-postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.23, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.5, postcss@^7.0.6:
- version "7.0.27"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9"
- integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==
+postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.5, postcss@^7.0.6:
+ version "7.0.30"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.30.tgz#cc9378beffe46a02cbc4506a0477d05fcea9a8e2"
+ integrity sha512-nu/0m+NtIzoubO+xdAlwZl/u5S5vi/y6BCsoL8D+8IxsD3XvBS8X4YEADNIVXKVuQvduiucnRv+vPIqj56EGMQ==
dependencies:
chalk "^2.4.2"
source-map "^0.6.1"
@@ -11736,12 +11786,12 @@ pretty-format@^24.9.0:
ansi-styles "^3.2.0"
react-is "^16.8.4"
-pretty-format@^25.2.1, pretty-format@^25.2.6:
- version "25.2.6"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.2.6.tgz#542a1c418d019bbf1cca2e3620443bc1323cb8d7"
- integrity sha512-DEiWxLBaCHneffrIT4B+TpMvkV9RNvvJrd3lY9ew1CEQobDzEXmYT1mg0hJhljZty7kCc10z13ohOFAE8jrUDg==
+pretty-format@^25.2.1, pretty-format@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
+ integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
dependencies:
- "@jest/types" "^25.2.6"
+ "@jest/types" "^25.5.0"
ansi-regex "^5.0.0"
ansi-styles "^4.0.0"
react-is "^16.12.0"
@@ -11859,9 +11909,9 @@ prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1,
react-is "^16.8.1"
property-information@^5.0.0:
- version "5.4.0"
- resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.4.0.tgz#16e08f13f4e5c4a7be2e4ec431c01c4f8dba869a"
- integrity sha512-nmMWAm/3vKFGmmOWOcdLjgq/Hlxa+hsuR/px1Lp/UGEyc5A22A6l78Shc2C0E71sPmAqglni+HrS7L7VJ7AUCA==
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.5.0.tgz#4dc075d493061a82e2b7d096f406e076ed859943"
+ integrity sha512-RgEbCx2HLa1chNgvChcx+rrCWD0ctBmGSE0M7lVm1yyv4UbvbrWoXp/BkVLZefzjrRBGW8/Js6uh/BnlHXFyjA==
dependencies:
xtend "^4.0.0"
@@ -11963,9 +12013,9 @@ qs@6.7.0:
integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
qs@^6.6.0:
- version "6.9.3"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e"
- integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==
+ version "6.9.4"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687"
+ integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==
qs@~6.5.2:
version "6.5.2"
@@ -12009,6 +12059,11 @@ quick-lru@^1.0.0:
resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8"
integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=
+quick-lru@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
+ integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
+
raf@^3.4.0, raf@^3.4.1:
version "3.4.1"
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
@@ -12121,9 +12176,9 @@ react-dev-utils@^9.0.0, react-dev-utils@^9.1.0:
text-table "0.2.0"
react-diff-view@^2.4.1:
- version "2.4.3"
- resolved "https://registry.yarnpkg.com/react-diff-view/-/react-diff-view-2.4.3.tgz#ad78f9760409757563f1a9b25682dc792a87baf6"
- integrity sha512-7pCMzojlN2ql0ppg4Ppcg3STpJw3l98AA4fZqmUuSYNtX2D9jVLNHT60c+UGKQwfWRFKQPrswq0o4BOy4SpRzw==
+ version "2.4.4"
+ resolved "https://registry.yarnpkg.com/react-diff-view/-/react-diff-view-2.4.4.tgz#d255622ebaf9d1339600d5febccfc0bff30abf4a"
+ integrity sha512-eS+NIxOHpgGy/uGGB0wv4GvN6iXNaOlxiTPreBsKj6VpzbgsaeF5h084ZDQD9Q28gdCB5K5CQ5ZLqKfqEw+SPw==
dependencies:
classnames "^2.2.6"
diff-match-patch "^1.0.4"
@@ -12156,9 +12211,9 @@ react-dom@^16.10.2, react-dom@^16.8.3, react-dom@^16.8.6:
scheduler "^0.19.1"
react-draggable@^4.0.3:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.2.0.tgz#40cc5209082ca7d613104bf6daf31372cc0e1114"
- integrity sha512-5wFq//gEoeTYprnd4ze8GrFc+Rbnx+9RkOMR3vk4EbWxj02U6L6T3yrlKeiw4X5CtjD2ma2+b3WujghcXNRzkw==
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.2.tgz#f3cefecee25f467f865144cda0d066e5f05f94a0"
+ integrity sha512-zLQs4R4bnBCGnCVTZiD8hPsHtkiJxgMpGDlRESM+EHQo8ysXhKJ2GKdJ8UxxLJdRVceX1j19jy+hQS2wHislPQ==
dependencies:
classnames "^2.2.5"
prop-types "^15.6.0"
@@ -12168,32 +12223,32 @@ react-error-overlay@^6.0.3:
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108"
integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==
-react-fast-compare@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
- integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
+react-fast-compare@^3.0.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.1.1.tgz#0becf31e3812fa70dc231e259f40d892d4767900"
+ integrity sha512-SCsAORWK59BvauR2L1BTdjQbJcSGJJz03U0awektk2hshLKrITDDFTlgGCqIZpTDlPC/NFlZee6xTMzXPVLiHw==
react-focus-lock@^2.1.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.2.1.tgz#1d12887416925dc53481914b7cedd39494a3b24a"
- integrity sha512-47g0xYcCTZccdzKRGufepY8oZ3W1Qg+2hn6u9SHZ0zUB6uz/4K4xJe7yYFNZ1qT6m+2JDm82F6QgKeBTbjW4PQ==
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.3.1.tgz#9d5d85899773609c7eefa4fc54fff6a0f5f2fc47"
+ integrity sha512-j15cWLPzH0gOmRrUg01C09Peu8qbcdVqr6Bjyfxj80cNZmH+idk/bNBYEDSmkAtwkXI+xEYWSmHYqtaQhZ8iUQ==
dependencies:
"@babel/runtime" "^7.0.0"
- focus-lock "^0.6.6"
+ focus-lock "^0.6.7"
prop-types "^15.6.2"
react-clientside-effect "^1.2.2"
use-callback-ref "^1.2.1"
use-sidecar "^1.0.1"
react-helmet-async@^1.0.2:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.4.tgz#079ef10b7fefcaee6240fefd150711e62463cc97"
- integrity sha512-KTGHE9sz8N7+fCkZ2a3vzXH9eIkiTNhL2NhKR7XzzQl3WsGlCHh76arauJUIiGdfhjeMp7DY7PkASAmYFXeJYg==
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.6.tgz#11c15c74e79b3f66670c73779bef3e0e352b1d4e"
+ integrity sha512-t+bhAI4NgxfEv8ez4r77cLfR4O4Z55E/FH2DT+uiE4U7yfWgAk7OAOi7IxHxuYEVLI26bqjZvlVCkpC5/5AoNA==
dependencies:
- "@babel/runtime" "^7.3.4"
+ "@babel/runtime" "^7.9.2"
invariant "^2.2.4"
prop-types "^15.7.2"
- react-fast-compare "^2.0.4"
+ react-fast-compare "^3.0.1"
shallowequal "^1.1.0"
react-hotkeys@2.0.0:
@@ -12212,9 +12267,9 @@ react-i18next@^10.13.1:
html-parse-stringify2 "2.0.1"
react-i18next@^11.3.3:
- version "11.3.4"
- resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.3.4.tgz#355df5fe5133e5e30302d166f529678100ffc968"
- integrity sha512-IRZMD7PAM3C+fJNzRbyLNi1ZD0kc3Z3obBspJjEl+9H+ME41PhVor3BpdIqv/Rm7lUoGhMjmpu42J45ooJ61KA==
+ version "11.4.0"
+ resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.4.0.tgz#dde6bf3a695910af7a4270fea2e111bc331cf151"
+ integrity sha512-lyOZSSQkif4H9HnHN3iEKVkryLI+WkdZSEw3VAZzinZLopfYRMHVY5YxCopdkXPLEHs6S5GjKYPh3+j0j336Fg==
dependencies:
"@babel/runtime" "^7.3.1"
html-parse-stringify2 "2.0.1"
@@ -12294,33 +12349,33 @@ react-redux@^5.0.7:
react-lifecycles-compat "^3.0.0"
react-refresh@^0.8.0:
- version "0.8.1"
- resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.1.tgz#5500506ad6fc891fdd057d0bf3581f9310abc6a2"
- integrity sha512-xZIKi49RtLUUSAZ4a4ut2xr+zr4+glOD5v0L413B55MPvlg4EQ6Ctx8PD4CmjlPGoAWmSCTmmkY59TErizNsow==
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.2.tgz#24bb0858eac92b0d7b0dd561747f0c9fd6c60327"
+ integrity sha512-n8GXxo3DwM2KtFEL69DAVhGc4A1THn2qjmfvSo3nze0NLCoPbywazeJPqdp0RdSGLmyhQzeyA+XPXOobbYlkzg==
react-router-dom@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.2.tgz#06701b834352f44d37fbb6311f870f84c76b9c18"
- integrity sha512-7BPHAaIwWpZS074UKaw1FjVdZBSVWEk8IuDXdB+OkLb8vd/WRQIpA4ag9WQk61aEfQs47wHyjWUoUGGZxpQXew==
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662"
+ integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==
dependencies:
"@babel/runtime" "^7.1.2"
history "^4.9.0"
loose-envify "^1.3.1"
prop-types "^15.6.2"
- react-router "5.1.2"
+ react-router "5.2.0"
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
-react-router@5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418"
- integrity sha512-yjEuMFy1ONK246B+rsa0cUam5OeAQ8pyclRDgpxuSCrAlJ1qN9uZ5IgyKC7gQg0w8OM50NXHEegPh/ks9YuR2A==
+react-router@5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293"
+ integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==
dependencies:
"@babel/runtime" "^7.1.2"
history "^4.9.0"
hoist-non-react-statics "^3.1.0"
loose-envify "^1.3.1"
- mini-create-react-context "^0.3.0"
+ mini-create-react-context "^0.4.0"
path-to-regexp "^1.7.0"
prop-types "^15.6.2"
react-is "^16.6.0"
@@ -12458,7 +12513,7 @@ read-pkg-up@^4.0.0:
find-up "^3.0.0"
read-pkg "^3.0.0"
-read-pkg-up@^7.0.0:
+read-pkg-up@^7.0.0, read-pkg-up@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
@@ -12524,7 +12579,7 @@ read@1, read@~1.0.1:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
-"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1:
+"readable-stream@2 || 3", readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
@@ -12552,12 +12607,12 @@ readdirp@^2.2.1:
micromatch "^3.1.10"
readable-stream "^2.0.2"
-readdirp@~3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17"
- integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==
+readdirp@~3.4.0:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada"
+ integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==
dependencies:
- picomatch "^2.0.7"
+ picomatch "^2.2.1"
realpath-native@^1.1.0:
version "1.1.0"
@@ -12618,6 +12673,14 @@ redent@^2.0.0:
indent-string "^3.0.0"
strip-indent "^2.0.0"
+redent@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
+ integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
+ dependencies:
+ indent-string "^4.0.0"
+ strip-indent "^3.0.0"
+
redux-devtools-extension@^2.13.5:
version "2.13.8"
resolved "https://registry.yarnpkg.com/redux-devtools-extension/-/redux-devtools-extension-2.13.8.tgz#37b982688626e5e4993ff87220c9bbb7cd2d96e1"
@@ -12870,11 +12933,6 @@ require-directory@^2.1.1:
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
-require-main-filename@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
- integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
-
require-main-filename@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
@@ -12936,9 +12994,9 @@ resolve@1.1.7:
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2:
- version "1.15.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8"
- integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
+ integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
dependencies:
path-parse "^1.0.6"
@@ -13019,11 +13077,9 @@ rsvp@^4.8.4:
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
run-async@^2.2.0, run-async@^2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8"
- integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==
- dependencies:
- is-promise "^2.1.0"
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
run-queue@^1.0.0, run-queue@^1.0.3:
version "1.0.3"
@@ -13050,9 +13106,9 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
- integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
safe-regex@^1.1.0:
version "1.1.0"
@@ -13093,9 +13149,9 @@ sass-loader@^8.0.0:
semver "^6.3.0"
sass@^1.26.3:
- version "1.26.3"
- resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.3.tgz#412df54486143b76b5a65cdf7569e86f44659f46"
- integrity sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw==
+ version "1.26.5"
+ resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.5.tgz#2d7aecfbbabfa298567c8f06615b6e24d2d68099"
+ integrity sha512-FG2swzaZUiX53YzZSjSakzvGtlds0lcbF+URuU9mxOv7WBh7NhXEVDa4kPKN4hN6fC2TkOTOKqiqp6d53N9X5Q==
dependencies:
chokidar ">=2.0.0 <4.0.0"
@@ -13121,10 +13177,10 @@ schema-utils@^1.0.0:
ajv-errors "^1.0.0"
ajv-keywords "^3.1.0"
-schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5:
- version "2.6.5"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.5.tgz#c758f0a7e624263073d396e29cd40aa101152d8a"
- integrity sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==
+schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6:
+ version "2.6.6"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.6.tgz#299fe6bd4a3365dc23d99fd446caff8f1d6c330c"
+ integrity sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==
dependencies:
ajv "^6.12.0"
ajv-keywords "^3.4.1"
@@ -13168,6 +13224,11 @@ semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+semver@^7.3.2:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
+ integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+
send@0.17.1:
version "0.17.1"
resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
@@ -13192,6 +13253,11 @@ serialize-javascript@^2.1.2:
resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61"
integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==
+serialize-javascript@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.0.0.tgz#492e489a2d77b7b804ad391a5f5d97870952548e"
+ integrity sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw==
+
serve-favicon@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0"
@@ -13309,9 +13375,9 @@ shell-quote@1.7.2:
integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==
shelljs@^0.8.3:
- version "0.8.3"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
- integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
+ version "0.8.4"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2"
+ integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==
dependencies:
glob "^7.0.0"
interpret "^1.0.0"
@@ -13438,13 +13504,14 @@ sockjs-client@1.4.0:
json3 "^3.3.2"
url-parse "^1.4.3"
-sockjs@0.3.19:
- version "0.3.19"
- resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
- integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==
+sockjs@0.3.20:
+ version "0.3.20"
+ resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855"
+ integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==
dependencies:
faye-websocket "^0.10.0"
- uuid "^3.0.1"
+ uuid "^3.4.0"
+ websocket-driver "0.6.5"
socks-proxy-agent@^4.0.0:
version "4.0.2"
@@ -13493,9 +13560,9 @@ source-map-resolve@^0.5.0:
urix "^0.1.0"
source-map-support@^0.5.6, source-map-support@~0.5.12:
- version "0.5.16"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
- integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
+ version "0.5.19"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
+ integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
dependencies:
buffer-from "^1.0.0"
source-map "^0.6.0"
@@ -13534,14 +13601,14 @@ spdx-correct@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-exceptions@^2.1.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
- integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
+ integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
spdx-expression-parse@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
- integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
+ integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
dependencies:
spdx-exceptions "^2.1.0"
spdx-license-ids "^3.0.0"
@@ -13563,7 +13630,7 @@ spdy-transport@^3.0.0:
readable-stream "^3.0.6"
wbuf "^1.7.3"
-spdy@^4.0.1:
+spdy@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b"
integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==
@@ -13669,9 +13736,9 @@ stealthy-require@^1.1.1:
integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
store2@^2.7.1:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/store2/-/store2-2.11.0.tgz#307636a239014ef4d8f1c8b47afe903509484fc8"
- integrity sha512-WeIZ5+c/KzBSutSqOjUCAkk1qTLVBcYUuvrhNx8ndjLZKdZRfP6Vv7AOxlynuL6tVU/6zt6e2CTHwWI5KE+fKg==
+ version "2.11.2"
+ resolved "https://registry.yarnpkg.com/store2/-/store2-2.11.2.tgz#a298e5e97b21b3ce7419b732540bc7c79cb007db"
+ integrity sha512-TQMKs+C6n9idtzLpxluikmDCYiDJrTbbIGn9LFxMg0BVTu+8JZKSlXTWYRpOFKlfKD5HlDWLVpJJyNGZ2e9l1A==
storybook-addon-i18next@^1.2.1:
version "1.3.0"
@@ -13740,7 +13807,7 @@ string-width@^1.0.1:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
-"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
@@ -13804,9 +13871,9 @@ string.prototype.trim@^1.2.1:
function-bind "^1.1.1"
string.prototype.trimend@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373"
- integrity sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA==
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913"
+ integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
dependencies:
define-properties "^1.1.3"
es-abstract "^1.17.5"
@@ -13830,9 +13897,9 @@ string.prototype.trimright@^2.1.1:
string.prototype.trimend "^1.0.0"
string.prototype.trimstart@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2"
- integrity sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w==
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54"
+ integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
dependencies:
define-properties "^1.1.3"
es-abstract "^1.17.5"
@@ -13930,12 +13997,12 @@ strong-log-transformer@^2.0.0:
through "^2.3.4"
style-loader@^1.0.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.3.tgz#9e826e69c683c4d9bf9db924f85e9abb30d5e200"
- integrity sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw==
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a"
+ integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==
dependencies:
- loader-utils "^1.2.3"
- schema-utils "^2.6.4"
+ loader-utils "^2.0.0"
+ schema-utils "^2.6.6"
styled-components@^4.4.0:
version "4.4.1"
@@ -14128,24 +14195,24 @@ terser-webpack-plugin@^1.4.3:
worker-farm "^1.7.0"
terser-webpack-plugin@^2.1.2:
- version "2.3.5"
- resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz#5ad971acce5c517440ba873ea4f09687de2f4a81"
- integrity sha512-WlWksUoq+E4+JlJ+h+U+QUzXpcsMSSNXkDy9lBVkSqDn1w23Gg29L/ary9GeJVYCGiNJJX7LnVc4bwL1N3/g1w==
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.6.tgz#a4014b311a61f87c6a1b217ef4f5a75bd0665a69"
+ integrity sha512-I8IDsQwZrqjdmOicNeE8L/MhwatAap3mUrtcAKJuilsemUNcX+Hier/eAzwStVqhlCxq0aG3ni9bK/0BESXkTg==
dependencies:
cacache "^13.0.1"
- find-cache-dir "^3.2.0"
- jest-worker "^25.1.0"
- p-limit "^2.2.2"
- schema-utils "^2.6.4"
- serialize-javascript "^2.1.2"
+ find-cache-dir "^3.3.1"
+ jest-worker "^25.4.0"
+ p-limit "^2.3.0"
+ schema-utils "^2.6.6"
+ serialize-javascript "^3.0.0"
source-map "^0.6.1"
- terser "^4.4.3"
+ terser "^4.6.12"
webpack-sources "^1.4.3"
-terser@^4.1.2, terser@^4.4.3, terser@^4.6.3:
- version "4.6.10"
- resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.10.tgz#90f5bd069ff456ddbc9503b18e52f9c493d3b7c2"
- integrity sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA==
+terser@^4.1.2, terser@^4.6.12, terser@^4.6.3:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006"
+ integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==
dependencies:
commander "^2.20.0"
source-map "~0.6.1"
@@ -14242,7 +14309,7 @@ tiny-invariant@^1.0.2:
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875"
integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==
-tiny-warning@^1.0.0, tiny-warning@^1.0.2:
+tiny-warning@^1.0.0, tiny-warning@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
@@ -14343,6 +14410,11 @@ trim-newlines@^2.0.0:
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20"
integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=
+trim-newlines@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30"
+ integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==
+
trim-off-newlines@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3"
@@ -14374,9 +14446,9 @@ ts-pnp@^1.1.2:
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
- integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
+ integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
tsutils@^3.17.1:
version "3.17.1"
@@ -14414,6 +14486,11 @@ type-fest@^0.11.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+type-fest@^0.13.1:
+ version "0.13.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
+ integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+
type-fest@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
@@ -14448,9 +14525,9 @@ typedarray@^0.0.6:
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typescript@^3.7.2:
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
- integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
+ version "3.9.2"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.2.tgz#64e9c8e9be6ea583c54607677dd4680a1cf35db9"
+ integrity sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw==
ua-parser-js@^0.7.18:
version "0.7.21"
@@ -14458,12 +14535,11 @@ ua-parser-js@^0.7.18:
integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==
uglify-js@^3.1.4:
- version "3.8.1"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.1.tgz#43bb15ce6f545eaa0a64c49fd29375ea09fa0f93"
- integrity sha512-W7KxyzeaQmZvUFbGj4+YFshhVrMBGSg2IbcYAjGWGvx8DHvJMclbTDMpffdxFUGPBHjIytk7KJUR/KUXstUGDw==
+ version "3.9.3"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.9.3.tgz#4a285d1658b8a2ebaef9e51366b3a0f7acd79ec2"
+ integrity sha512-r5ImcL6QyzQGVimQoov3aL2ZScywrOgBXGndbWrdehKoSvGe/RmiE5Jpw/v+GvxODt6l2tpBXwA7n+qZVlHBMA==
dependencies:
commander "~2.20.3"
- source-map "~0.6.1"
uid-number@0.0.6:
version "0.0.6"
@@ -14673,9 +14749,9 @@ url@^0.11.0:
querystring "0.2.0"
use-callback-ref@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.1.tgz#898759ccb9e14be6c7a860abafa3ffbd826c89bb"
- integrity sha512-C3nvxh0ZpaOxs9RCnWwAJ+7bJPwQI8LHF71LzbQ3BvzH5XkdtlkMadqElGevg5bYBDFip4sAnD4m06zAKebg1w==
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.3.tgz#9f939dfb5740807bbf9dd79cdd4e99d27e827756"
+ integrity sha512-DPBPh1i2adCZoIArRlTuKRy7yue7QogtEnfv0AKrWsY+GA+4EKe37zhRDouNnyWMoNQFYZZRF+2dLHsWE4YvJA==
use-sidecar@^1.0.1:
version "1.0.2"
@@ -14744,7 +14820,7 @@ utils-merge@1.0.1:
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-uuid@^3.0.1, uuid@^3.3.2:
+uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
@@ -14851,14 +14927,23 @@ warning@^4.0.2, warning@^4.0.3:
dependencies:
loose-envify "^1.0.0"
-watchpack@^1.6.0:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2"
- integrity sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==
+watchpack-chokidar2@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0"
+ integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==
dependencies:
chokidar "^2.1.8"
+
+watchpack@^1.6.1:
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa"
+ integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==
+ dependencies:
graceful-fs "^4.1.2"
neo-async "^2.5.0"
+ optionalDependencies:
+ chokidar "^3.4.0"
+ watchpack-chokidar2 "^2.0.0"
wbuf@^1.1.0, wbuf@^1.7.3:
version "1.7.3"
@@ -14908,9 +14993,9 @@ webpack-dev-middleware@^3.7.0, webpack-dev-middleware@^3.7.2:
webpack-log "^2.0.0"
webpack-dev-server@^3.10.1:
- version "3.10.3"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0"
- integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ==
+ version "3.11.0"
+ resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c"
+ integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==
dependencies:
ansi-html "0.0.7"
bonjour "^3.5.0"
@@ -14920,31 +15005,31 @@ webpack-dev-server@^3.10.1:
debug "^4.1.1"
del "^4.1.1"
express "^4.17.1"
- html-entities "^1.2.1"
+ html-entities "^1.3.1"
http-proxy-middleware "0.19.1"
import-local "^2.0.0"
internal-ip "^4.3.0"
ip "^1.1.5"
is-absolute-url "^3.0.3"
killable "^1.0.1"
- loglevel "^1.6.6"
+ loglevel "^1.6.8"
opn "^5.5.0"
p-retry "^3.0.1"
- portfinder "^1.0.25"
+ portfinder "^1.0.26"
schema-utils "^1.0.0"
selfsigned "^1.10.7"
semver "^6.3.0"
serve-index "^1.9.1"
- sockjs "0.3.19"
+ sockjs "0.3.20"
sockjs-client "1.4.0"
- spdy "^4.0.1"
+ spdy "^4.0.2"
strip-ansi "^3.0.1"
supports-color "^6.1.0"
url "^0.11.0"
webpack-dev-middleware "^3.7.2"
webpack-log "^2.0.0"
ws "^6.2.1"
- yargs "12.0.5"
+ yargs "^13.3.2"
webpack-hot-middleware@^2.25.0:
version "2.25.0"
@@ -14973,22 +15058,22 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-
source-map "~0.6.1"
webpack-virtual-modules@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.1.tgz#8ab73d4df0fd37ed27bb8d823bc60ea7266c8bf7"
- integrity sha512-0PWBlxyt4uGDofooIEanWhhyBOHdd+lr7QpYNDLC7/yc5lqJT8zlc04MTIBnKj+c2BlQNNuwE5er/Tg4wowHzA==
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz#20863dc3cb6bb2104729fff951fbe14b18bd0299"
+ integrity sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==
dependencies:
debug "^3.0.0"
webpack@^4.33.0, webpack@^4.38.0, webpack@^4.41.5:
- version "4.42.1"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.1.tgz#ae707baf091f5ca3ef9c38b884287cfe8f1983ef"
- integrity sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==
+ version "4.43.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6"
+ integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==
dependencies:
"@webassemblyjs/ast" "1.9.0"
"@webassemblyjs/helper-module-context" "1.9.0"
"@webassemblyjs/wasm-edit" "1.9.0"
"@webassemblyjs/wasm-parser" "1.9.0"
- acorn "^6.2.1"
+ acorn "^6.4.1"
ajv "^6.10.2"
ajv-keywords "^3.4.1"
chrome-trace-event "^1.0.2"
@@ -15005,9 +15090,16 @@ webpack@^4.33.0, webpack@^4.38.0, webpack@^4.41.5:
schema-utils "^1.0.0"
tapable "^1.1.3"
terser-webpack-plugin "^1.4.3"
- watchpack "^1.6.0"
+ watchpack "^1.6.1"
webpack-sources "^1.4.1"
+websocket-driver@0.6.5:
+ version "0.6.5"
+ resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36"
+ integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=
+ dependencies:
+ websocket-extensions ">=0.1.1"
+
websocket-driver@>=0.5.1:
version "0.7.3"
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"
@@ -15084,9 +15176,9 @@ widest-line@^3.1.0:
string-width "^4.0.0"
windows-release@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f"
- integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.0.tgz#dce167e9f8be733f21c849ebd4d03fe66b29b9f0"
+ integrity sha512-2HetyTg1Y+R+rUgrKeUEhAG/ZuOmTrI1NBb3ZyAGQMYmOJjBBPe4MTodghRkmLJZHwkuPi02anbeGP+Zf401LQ==
dependencies:
execa "^1.0.0"
@@ -15121,14 +15213,6 @@ worker-rpc@^0.1.0:
dependencies:
microevent.ts "~0.1.1"
-wrap-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
- integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
-
wrap-ansi@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
@@ -15241,7 +15325,7 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0:
+y18n@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
@@ -15257,26 +15341,9 @@ yallist@^4.0.0:
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@^1.7.2:
- version "1.8.3"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.8.3.tgz#2f420fca58b68ce3a332d0ca64be1d191dd3f87a"
- integrity sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==
- dependencies:
- "@babel/runtime" "^7.8.7"
-
-yargs-parser@^10.0.0:
- version "10.1.0"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8"
- integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==
- dependencies:
- camelcase "^4.1.0"
-
-yargs-parser@^11.1.1:
- version "11.1.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"
- integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==
- dependencies:
- camelcase "^5.0.0"
- decamelize "^1.2.0"
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
+ integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
yargs-parser@^13.1.0, yargs-parser@^13.1.2:
version "13.1.2"
@@ -15294,23 +15361,13 @@ yargs-parser@^15.0.1:
camelcase "^5.0.0"
decamelize "^1.2.0"
-yargs@12.0.5:
- version "12.0.5"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"
- integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==
+yargs-parser@^18.1.3:
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
dependencies:
- cliui "^4.0.0"
+ camelcase "^5.0.0"
decamelize "^1.2.0"
- find-up "^3.0.0"
- get-caller-file "^1.0.1"
- os-locale "^3.0.0"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^2.0.0"
- which-module "^2.0.0"
- y18n "^3.2.1 || ^4.0.0"
- yargs-parser "^11.1.1"
yargs@13.2.4:
version "13.2.4"
@@ -15329,7 +15386,7 @@ yargs@13.2.4:
y18n "^4.0.0"
yargs-parser "^13.1.0"
-yargs@^13.3.0:
+yargs@^13.3.0, yargs@^13.3.2:
version "13.3.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
From 5c7491c2541feeb5ae132deb532ebfb398fc688d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 19 May 2020 10:43:10 +0200
Subject: [PATCH 23/54] Add unit test for hg modifications command
---
.../spi/HgModificationsCommandTest.java | 90 ++++++++++++++++++-
1 file changed, 89 insertions(+), 1 deletion(-)
diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java
index 993b8a6fb9..914a063790 100644
--- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java
+++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java
@@ -25,7 +25,9 @@
package sonia.scm.repository.spi;
import com.aragost.javahg.Changeset;
+import com.aragost.javahg.commands.CopyCommand;
import com.aragost.javahg.commands.RemoveCommand;
+import com.aragost.javahg.commands.RenameCommand;
import org.junit.Before;
import org.junit.Test;
import sonia.scm.repository.HgTestUtil;
@@ -34,7 +36,7 @@ import sonia.scm.repository.Modifications;
import java.io.File;
import java.util.function.Consumer;
-import static org.assertj.core.api.Java6Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThat;
public class HgModificationsCommandTest extends IncomingOutgoingTestBase {
@@ -83,6 +85,31 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase {
assertModifications.accept(outgoingModificationsCommand.getModifications(revision));
}
+ @Test
+ public void shouldReadRenamedFiles() throws Exception {
+ String oldFileName = "a.txt";
+ String newFileName = "b.txt";
+ writeNewFile(outgoing, outgoingDirectory, oldFileName, "bal bla");
+ commit(outgoing, "added a.txt");
+ RenameCommand.on(outgoing).execute(oldFileName, newFileName);
+ Changeset changeset = commit(outgoing, "rename a.txt to b.txt");
+ String revision = String.valueOf(changeset.getRevision());
+ Consumer assertModifications = assertRenamedFiles(oldFileName, newFileName);
+ assertModifications.accept(outgoingModificationsCommand.getModifications(revision));
+ }
+
+ @Test
+ public void shouldReadCopiedFiles() throws Exception {
+ String srcFileName = "a.txt";
+ String newFileName = "b.txt";
+ writeNewFile(outgoing, outgoingDirectory, srcFileName, "bal bla");
+ commit(outgoing, "added a.txt");
+ CopyCommand.on(outgoing).execute(srcFileName, newFileName);
+ Changeset changeset = commit(outgoing, "copy a.txt to b.txt");
+ String revision = String.valueOf(changeset.getRevision());
+ Consumer assertModifications = assertCopiedFiles(srcFileName, newFileName);
+ assertModifications.accept(outgoingModificationsCommand.getModifications(revision));
+ }
Consumer assertRemovedFiles(String fileName) {
return (modifications) -> {
@@ -98,9 +125,64 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase {
.hasSize(1)
.extracting("path")
.containsOnly(fileName);
+ assertThat(modifications.getRenamed())
+ .as("renamed files modifications")
+ .isEmpty();
};
}
+ Consumer assertRenamedFiles(String oldFileName, String newFileName) {
+ return (modifications) -> {
+ assertThat(modifications).isNotNull();
+ assertThat(modifications.getAdded())
+ .as("added files modifications")
+ .hasSize(0);
+ assertThat(modifications.getModified())
+ .as("modified files modifications")
+ .hasSize(0);
+ assertThat(modifications.getRemoved())
+ .as("removed files modifications")
+ .isEmpty();
+ assertThat(modifications.getRenamed())
+ .as("renamed files modifications")
+ .hasSize(1)
+ .extracting("oldPath")
+ .containsOnly(oldFileName);
+ assertThat(modifications.getRenamed())
+ .as("renamed files modifications")
+ .hasSize(1)
+ .extracting("newPath")
+ .containsOnly(newFileName);
+ };
+ }
+
+ Consumer assertCopiedFiles(String srcFileName, String newFileName) {
+ return (modifications) -> {
+ assertThat(modifications).isNotNull();
+ assertThat(modifications.getAdded())
+ .as("added files modifications")
+ .hasSize(0);
+ assertThat(modifications.getModified())
+ .as("modified files modifications")
+ .hasSize(0);
+ assertThat(modifications.getRemoved())
+ .as("removed files modifications")
+ .isEmpty();
+ assertThat(modifications.getRenamed())
+ .as("renamed files modifications")
+ .isEmpty();
+ assertThat(modifications.getCopied())
+ .as("copied files modifications")
+ .hasSize(1)
+ .extracting("sourcePath")
+ .containsOnly(srcFileName);
+ assertThat(modifications.getCopied())
+ .as("copied files modifications")
+ .hasSize(1)
+ .extracting("targetPath")
+ .containsOnly(newFileName);
+ };
+ }
Consumer assertModifiedFiles(String file) {
return (modifications) -> {
@@ -116,6 +198,9 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase {
assertThat(modifications.getRemoved())
.as("removed files modifications")
.hasSize(0);
+ assertThat(modifications.getRenamed())
+ .as("renamed files modifications")
+ .hasSize(0);
};
}
@@ -133,6 +218,9 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase {
assertThat(modifications.getRemoved())
.as("removed files modifications")
.hasSize(0);
+ assertThat(modifications.getRenamed())
+ .as("renamed files modifications")
+ .hasSize(0);
};
}
}
From 5f2a049c165b80ac01616af6b46259882893b36c Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Tue, 19 May 2020 10:48:04 +0200
Subject: [PATCH 24/54] do not measure coverage for frontend stories
---
Jenkinsfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index 666ca23869..22005b2d01 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -199,7 +199,7 @@ Maven setupMavenBuild() {
def logConf = "scm-webapp/src/main/resources/logback.ci.xml"
mvn.additionalArgs += " -Dlogback.configurationFile=${logConf}"
mvn.additionalArgs += " -Dscm-it.logbackConfiguration=${logConf}"
- mvn.additionalArgs += " -Dsonar.coverage.exclusions=**/*.test.ts,**/*.test.tsx"
+ mvn.additionalArgs += " -Dsonar.coverage.exclusions=**/*.test.ts,**/*.test.tsx,**/*.stories.tsx"
if (isMainBranch() || isReleaseBranch()) {
// Release starts javadoc, which takes very long, so do only for certain branches
From a470831bf80ab6d1fa06fa3480f05d7fe872b6dd Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Tue, 19 May 2020 12:55:41 +0200
Subject: [PATCH 25/54] separate ExternalLink from ExternalNavLink
---
.../src/layout/Footer.stories.tsx | 8 +--
scm-ui/ui-components/src/layout/Footer.tsx | 11 ++--
.../src/navigation/ExternalLink.tsx | 29 ++--------
.../src/navigation/ExternalNavLink.tsx | 56 +++++++++++++++++++
scm-ui/ui-components/src/navigation/index.ts | 2 +
5 files changed, 74 insertions(+), 32 deletions(-)
create mode 100644 scm-ui/ui-components/src/navigation/ExternalNavLink.tsx
diff --git a/scm-ui/ui-components/src/layout/Footer.stories.tsx b/scm-ui/ui-components/src/layout/Footer.stories.tsx
index c25b618a87..d2b592a46e 100644
--- a/scm-ui/ui-components/src/layout/Footer.stories.tsx
+++ b/scm-ui/ui-components/src/layout/Footer.stories.tsx
@@ -32,7 +32,7 @@ import hitchhiker from "../__resources__/hitchhiker.png";
// @ts-ignore ignore unknown jpg
import marvin from "../__resources__/marvin.jpg";
import NavLink from "../navigation/NavLink";
-import ExternalLink from "../navigation/ExternalLink";
+import ExternalNavLink from "../navigation/ExternalNavLink";
import { MemoryRouter } from "react-router-dom";
const trillian: Me = {
@@ -50,9 +50,9 @@ const bindAvatar = (binder: Binder, avatar: string) => {
};
const bindLinks = (binder: Binder) => {
- binder.bind("footer.information", () => );
- binder.bind("footer.information", () => );
- binder.bind("footer.support", () => );
+ binder.bind("footer.information", () => );
+ binder.bind("footer.information", () => );
+ binder.bind("footer.support", () => );
binder.bind("profile.setting", () => );
};
diff --git a/scm-ui/ui-components/src/layout/Footer.tsx b/scm-ui/ui-components/src/layout/Footer.tsx
index 8f27e8042a..355a74c67e 100644
--- a/scm-ui/ui-components/src/layout/Footer.tsx
+++ b/scm-ui/ui-components/src/layout/Footer.tsx
@@ -29,7 +29,7 @@ import NavLink from "../navigation/NavLink";
import FooterSection from "./FooterSection";
import styled from "styled-components";
import { EXTENSION_POINT } from "../avatar/Avatar";
-import ExternalLink from "../navigation/ExternalLink";
+import ExternalNavLink from "../navigation/ExternalNavLink";
import { useTranslation } from "react-i18next";
type Props = {
@@ -99,12 +99,15 @@ const Footer: FC = ({ me, version, links }) => {
}>
-
+
}>
-
-
+
+
diff --git a/scm-ui/ui-components/src/navigation/ExternalLink.tsx b/scm-ui/ui-components/src/navigation/ExternalLink.tsx
index 1565f6fa79..bf1dbad5ea 100644
--- a/scm-ui/ui-components/src/navigation/ExternalLink.tsx
+++ b/scm-ui/ui-components/src/navigation/ExternalLink.tsx
@@ -22,34 +22,15 @@
* SOFTWARE.
*/
import React, { FC } from "react";
-import classNames from "classnames";
type Props = {
to: string;
- icon?: string;
- label: string;
};
-// TODO is it used in the menu? should it use MenuContext for collapse state?
-
-const ExternalLink: FC = ({ to, icon, label }) => {
- let showIcon;
- if (icon) {
- showIcon = (
- <>
- {" "}
- >
- );
- }
-
- return (
-
-
- {showIcon}
- {label}
-
-
- );
-};
+const ExternalLink: FC = ({ to, children }) => (
+
+ {children}
+
+);
export default ExternalLink;
diff --git a/scm-ui/ui-components/src/navigation/ExternalNavLink.tsx b/scm-ui/ui-components/src/navigation/ExternalNavLink.tsx
new file mode 100644
index 0000000000..3b88b495ae
--- /dev/null
+++ b/scm-ui/ui-components/src/navigation/ExternalNavLink.tsx
@@ -0,0 +1,56 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+import React, { FC } from "react";
+import classNames from "classnames";
+import ExternalLink from "./ExternalLink";
+
+type Props = {
+ to: string;
+ icon?: string;
+ label: string;
+};
+
+// TODO is it used in the menu? should it use MenuContext for collapse state?
+
+const ExternalNavLink: FC = ({ to, icon, label }) => {
+ let showIcon;
+ if (icon) {
+ showIcon = (
+ <>
+ {" "}
+ >
+ );
+ }
+
+ return (
+
+
+ {showIcon}
+ {label}
+
+
+ );
+};
+
+export default ExternalNavLink;
diff --git a/scm-ui/ui-components/src/navigation/index.ts b/scm-ui/ui-components/src/navigation/index.ts
index 4dcce4321b..9ab01d755d 100644
--- a/scm-ui/ui-components/src/navigation/index.ts
+++ b/scm-ui/ui-components/src/navigation/index.ts
@@ -33,3 +33,5 @@ export { default as PrimaryNavigationLink } from "./PrimaryNavigationLink";
export { default as SecondaryNavigation } from "./SecondaryNavigation";
export { MenuContext, StateMenuContextProvider } from "./MenuContext";
export { default as SecondaryNavigationItem } from "./SecondaryNavigationItem";
+export { default as ExternalLink } from "./ExternalLink";
+export { default as ExternalNavLink } from "./ExternalNavLink";
From 50e4316886f50cf7245609bc4a4af74e4a6b0abb Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Tue, 19 May 2020 12:59:02 +0200
Subject: [PATCH 26/54] improve MarkdownLinkRenderer
- render target _blank link for all external http links
- render simple a link for all links with protocol or anchor links
- render local html push link for all internal links
---
.../src/MarkdownLinkRenderer.test.tsx | 90 +++++++++++--------
.../src/MarkdownLinkRenderer.tsx | 64 +++++++------
2 files changed, 90 insertions(+), 64 deletions(-)
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
index d2a52f70e3..262fe43b31 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
@@ -21,52 +21,72 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-import React from "react";
-import { correctLocalLink } from "./MarkdownLinkRenderer";
+import { isAnchorLink, isExternalLink, isLinkWithProtocol, createLocalLink } from "./MarkdownLinkRenderer";
-const basePath = "/repo/space/name/sources/master/";
-const pathname = basePath + "README.md/";
-
-describe("correctLocalLink tests", () => {
- it("should return same directory", () => {
- expect(correctLocalLink(pathname, "./another.md")).toBe(basePath + "./another.md/");
- expect(correctLocalLink(pathname, "./another.md#42")).toBe(basePath + "./another.md/#42");
+describe("test isAnchorLink", () => {
+ it("should return true", () => {
+ expect(isAnchorLink("#some-thing")).toBe(true);
+ expect(isAnchorLink("#/some/more/complicated-link")).toBe(true);
});
- it("should return same url", () => {
- expect(correctLocalLink(pathname, "")).toBe(pathname);
- expect(correctLocalLink(pathname, "#42")).toBe("#42");
+ it("should return false", () => {
+ expect(isAnchorLink("https://cloudogu.com")).toBe(false);
+ expect(isAnchorLink("/some/path/link")).toBe(false);
+ });
+});
+
+describe("test isExternalLink", () => {
+ it("should return true", () => {
+ expect(isExternalLink("https://cloudogu.com")).toBe(true);
+ expect(isExternalLink("http://cloudogu.com")).toBe(true);
+ });
+
+ it("should return false", () => {
+ expect(isExternalLink("some/path/link")).toBe(false);
+ expect(isExternalLink("/some/path/link")).toBe(false);
+ expect(isExternalLink("#some-anchor")).toBe(false);
+ expect(isExternalLink("mailto:trillian@hitchhiker.com")).toBe(false);
+ });
+});
+
+describe("test isLinkWithProtocol", () => {
+ it("should return true", () => {
+ expect(isLinkWithProtocol("ldap://[2001:db8::7]/c=GB?objectClass?one")).toBe(true);
+ expect(isLinkWithProtocol("mailto:trillian@hitchhiker.com")).toBe(true);
+ expect(isLinkWithProtocol("tel:+1-816-555-1212")).toBe(true);
+ expect(isLinkWithProtocol("urn:oasis:names:specification:docbook:dtd:xml:4.1.2")).toBe(true);
+ expect(isLinkWithProtocol("about:config")).toBe(true);
+ expect(isLinkWithProtocol("http://cloudogu.com")).toBe(true);
+ });
+ it("should return false", () => {
+ expect(isExternalLink("some/path/link")).toBe(false);
+ expect(isExternalLink("/some/path/link")).toBe(false);
+ expect(isExternalLink("#some-anchor")).toBe(false);
+ });
+});
+
+describe("test createLocalLink", () => {
+ const basePath = "/repo/space/name/sources/master/";
+ const pathname = basePath + "README.md/";
+
+ it("should return same directory", () => {
+ expect(createLocalLink(pathname, "./another.md")).toBe(basePath + "./another.md/");
+ expect(createLocalLink(pathname, "./another.md#42")).toBe(basePath + "./another.md/#42");
});
it("should return main directory", () => {
- expect(correctLocalLink(pathname, "/")).toBe("/");
- expect(correctLocalLink(pathname, "/users/")).toBe("/users/");
- expect(correctLocalLink(pathname, "/users/#42")).toBe("/users/#42");
+ expect(createLocalLink(pathname, "/")).toBe("/");
+ expect(createLocalLink(pathname, "/users/")).toBe("/users/");
+ expect(createLocalLink(pathname, "/users/#42")).toBe("/users/#42");
});
it("should return ascend directory", () => {
- expect(correctLocalLink(pathname, "../")).toBe(basePath + "../");
- expect(correctLocalLink(pathname, "../../")).toBe(basePath + "../../");
+ expect(createLocalLink(pathname, "../")).toBe(basePath + "../");
+ expect(createLocalLink(pathname, "../../")).toBe(basePath + "../../");
});
it("should return deeper links", () => {
- expect(correctLocalLink(pathname, "docs/Home.md")).toBe(basePath + "docs/Home.md/");
- expect(correctLocalLink(pathname, "docs/Home.md#42")).toBe(basePath + "docs/Home.md/#42");
- });
-
- it("should return external link", () => {
- expect(correctLocalLink(pathname, "https://foo.bar/baz#42")).toBe("https://foo.bar/baz#42");
- expect(correctLocalLink(pathname, "ldap://[2001:db8::7]/c=GB?objectClass?one")).toBe(
- "ldap://[2001:db8::7]/c=GB?objectClass?one"
- );
- expect(correctLocalLink(pathname, "mailto:John.Doe@example.com")).toBe("mailto:John.Doe@example.com");
- expect(correctLocalLink(pathname, "http://userid:password@example.com:8080")).toBe(
- "http://userid:password@example.com:8080"
- );
- expect(correctLocalLink(pathname, "tel:+1-816-555-1212")).toBe("tel:+1-816-555-1212");
- expect(correctLocalLink(pathname, "urn:oasis:names:specification:docbook:dtd:xml:4.1.2")).toBe(
- "urn:oasis:names:specification:docbook:dtd:xml:4.1.2"
- );
- expect(correctLocalLink(pathname, "about:config")).toBe("about:config");
+ expect(createLocalLink(pathname, "docs/Home.md")).toBe(basePath + "docs/Home.md/");
+ expect(createLocalLink(pathname, "docs/Home.md#42")).toBe(basePath + "docs/Home.md/#42");
});
});
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
index 3b97bcedef..bc3afdf158 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
@@ -21,68 +21,74 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-import React, { FC, ReactNode } from "react";
+import React, { FC } from "react";
import { Link, useLocation } from "react-router-dom";
import { withContextPath } from "./urls";
+import ExternalLink from "./navigation/ExternalLink";
type Props = {
- children: ReactNode;
href: string;
};
-const regex = new RegExp("[a-z]:");
+const externalLinkRegex = new RegExp("^http(s)?://");
+export const isExternalLink = (link: string) => {
+ return externalLinkRegex.test(link);
+};
-/**
- * Handle local SCM-Manager and external links
- *
- * @VisibleForTesting
- */
-export function correctLocalLink(pathname: string, link: string) {
- if (link === "") {
- return pathname;
- }
+export const isAnchorLink = (link: string) => {
+ return link.startsWith("#");
+};
- // Leave uris unchanged which start with schemes or fragment
- if (link.match(regex) || link.startsWith("#")) {
- return link;
- }
+const linkWithProtcolRegex = new RegExp("^[a-z]+:");
+export const isLinkWithProtocol = (link: string) => {
+ return linkWithProtcolRegex.test(link);
+};
+export const createLocalLink = (pathname: string, link: string) => {
// Reference to the main directory possible if link starts with slash
let base = "";
let path = link;
if (!link.startsWith("/")) {
base = pathname;
// Remove last slash temporary
- if (base.endsWith("/")) base = base.substring(0, base.length - 1);
+ if (base.endsWith("/")) {
+ base = base.substring(0, base.length - 1);
+ }
+
// Remove current called file from path
base = base.substr(0, base.lastIndexOf("/") + 1);
// Remove first slash for absolute consistence
- if (path.startsWith("/")) path = path.substring(1);
+ if (path.startsWith("/")) {
+ path = path.substring(1);
+ }
}
// Link must end with fragment if it contains one
const pathParts = path.split("#");
if (pathParts.length > 1) {
// Add ending slash in front of fragment
- if (!pathParts[0].endsWith("/")) pathParts[0] += "/";
+ if (!pathParts[0].endsWith("/")) {
+ pathParts[0] += "/";
+ }
path = pathParts[0] + "#" + pathParts[1];
- } else {
- // Add ending slash
- if (!path.endsWith("/")) path += "/";
+ } else if (!path.endsWith("/")) {
+ path += "/";
}
return base + path;
-}
+};
-const MarkdownLinkRenderer: FC = ({ children, href }) => {
+const MarkdownLinkRenderer: FC = ({ href, children }) => {
const location = useLocation();
- const compositeUrl = correctLocalLink(withContextPath(location.pathname), href);
-
- if (compositeUrl.match(regex)) {
- return {children} ;
+ if (isExternalLink(href)) {
+ return {children} ;
+ } else if (isAnchorLink(href) || isLinkWithProtocol(href)) {
+ return {children} ;
+ } else {
+ const compositeUrl = createLocalLink(withContextPath(location.pathname), href);
+ return {children};
}
- return {children};
};
export default MarkdownLinkRenderer;
From d1f10ec5a72480ff133815f2bd151001b8974196 Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Tue, 19 May 2020 15:51:33 +0200
Subject: [PATCH 27/54] rebuild MarkdownLinkRenderer and added real world use
cases
---
.../src/MarkdownLinkRenderer.test.tsx | 43 +++++----
.../src/MarkdownLinkRenderer.tsx | 92 ++++++++++---------
scm-ui/ui-components/src/MarkdownView.tsx | 10 +-
3 files changed, 83 insertions(+), 62 deletions(-)
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
index 262fe43b31..f6b01eb06b 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
@@ -66,27 +66,38 @@ describe("test isLinkWithProtocol", () => {
});
describe("test createLocalLink", () => {
- const basePath = "/repo/space/name/sources/master/";
- const pathname = basePath + "README.md/";
-
- it("should return same directory", () => {
- expect(createLocalLink(pathname, "./another.md")).toBe(basePath + "./another.md/");
- expect(createLocalLink(pathname, "./another.md#42")).toBe(basePath + "./another.md/#42");
+ it("should handle relative links", () => {
+ const localLink = createLocalLink("/src", "/src/README.md", "docs/Home.md");
+ expect(localLink).toBe("/src/docs/Home.md");
});
- it("should return main directory", () => {
- expect(createLocalLink(pathname, "/")).toBe("/");
- expect(createLocalLink(pathname, "/users/")).toBe("/users/");
- expect(createLocalLink(pathname, "/users/#42")).toBe("/users/#42");
+ it("should handle absolute links", () => {
+ const localLink = createLocalLink("/src", "/src/README.md", "/docs/Home.md");
+ expect(localLink).toBe("/src/docs/Home.md");
});
- it("should return ascend directory", () => {
- expect(createLocalLink(pathname, "../")).toBe(basePath + "../");
- expect(createLocalLink(pathname, "../../")).toBe(basePath + "../../");
+ it("should handle relative links from locations with trailing slash", () => {
+ const localLink = createLocalLink("/src", "/src/README.md/", "/docs/Home.md");
+ expect(localLink).toBe("/src/docs/Home.md");
});
- it("should return deeper links", () => {
- expect(createLocalLink(pathname, "docs/Home.md")).toBe(basePath + "docs/Home.md/");
- expect(createLocalLink(pathname, "docs/Home.md#42")).toBe(basePath + "docs/Home.md/#42");
+ it("should handle relative links from location outside of base", () => {
+ const localLink = createLocalLink("/src", "/info/readme", "docs/Home.md");
+ expect(localLink).toBe("/src/docs/Home.md");
+ });
+
+ it("should handle absolute links from location outside of base", () => {
+ const localLink = createLocalLink("/src", "/info/readme", "/docs/Home.md");
+ expect(localLink).toBe("/src/docs/Home.md");
+ });
+
+ it("should handle relative links from sub directories", () => {
+ const localLink = createLocalLink("/src", "/src/docs/index.md", "installation/linux.md");
+ expect(localLink).toBe("/src/docs/installation/linux.md");
+ });
+
+ it("should handle absolute links from sub directories", () => {
+ const localLink = createLocalLink("/src", "/src/docs/index.md", "/docs/Home.md");
+ expect(localLink).toBe("/src/docs/Home.md");
});
});
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
index bc3afdf158..30e187265e 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
@@ -21,14 +21,10 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-import React, { FC } from "react";
-import { Link, useLocation } from "react-router-dom";
-import { withContextPath } from "./urls";
+import React, {FC} from "react";
+import {Link, useLocation} from "react-router-dom";
import ExternalLink from "./navigation/ExternalLink";
-
-type Props = {
- href: string;
-};
+import {withContextPath} from "./urls";
const externalLinkRegex = new RegExp("^http(s)?://");
export const isExternalLink = (link: string) => {
@@ -44,51 +40,61 @@ export const isLinkWithProtocol = (link: string) => {
return linkWithProtcolRegex.test(link);
};
-export const createLocalLink = (pathname: string, link: string) => {
- // Reference to the main directory possible if link starts with slash
- let base = "";
- let path = link;
- if (!link.startsWith("/")) {
- base = pathname;
- // Remove last slash temporary
- if (base.endsWith("/")) {
- base = base.substring(0, base.length - 1);
- }
-
- // Remove current called file from path
- base = base.substr(0, base.lastIndexOf("/") + 1);
-
- // Remove first slash for absolute consistence
- if (path.startsWith("/")) {
- path = path.substring(1);
- }
+const join = (left: string, right: string) => {
+ if (left.endsWith("/") && right.startsWith("/")) {
+ return left + right.substring(1);
+ } else if (!left.endsWith("/") && !right.startsWith("/")) {
+ return left + "/" + right;
}
-
- // Link must end with fragment if it contains one
- const pathParts = path.split("#");
- if (pathParts.length > 1) {
- // Add ending slash in front of fragment
- if (!pathParts[0].endsWith("/")) {
- pathParts[0] += "/";
- }
- path = pathParts[0] + "#" + pathParts[1];
- } else if (!path.endsWith("/")) {
- path += "/";
- }
-
- return base + path;
+ return left + right;
};
-const MarkdownLinkRenderer: FC = ({ href, children }) => {
+export const createLocalLink = (basePath: string, currentPath: string, link: string) => {
+ if (link.startsWith("/")) {
+ return join(basePath, link);
+ }
+ if (!currentPath.startsWith(basePath)) {
+ return join(basePath, link);
+ }
+ let path = currentPath;
+ if (currentPath.endsWith("/")) {
+ path = currentPath.substring(0, currentPath.length - 2);
+ }
+ const lastSlash = path.lastIndexOf("/");
+ if (lastSlash < 0) {
+ path = "";
+ } else {
+ path = path.substring(0, lastSlash);
+ }
+ return join(path, link);
+};
+
+type LinkProps = {
+ href: string;
+};
+
+type Props = LinkProps & {
+ base: string;
+};
+
+const MarkdownLinkRenderer: FC = ({href, base, children}) => {
const location = useLocation();
if (isExternalLink(href)) {
return {children} ;
- } else if (isAnchorLink(href) || isLinkWithProtocol(href)) {
+ } else if (isLinkWithProtocol(href)) {
return {children} ;
+ } else if (isAnchorLink(href)) {
+ return {children} ;
} else {
- const compositeUrl = createLocalLink(withContextPath(location.pathname), href);
- return {children};
+ const localLink = createLocalLink(base, location.pathname, href);
+ return {children};
}
};
+// we use a factory method, because react-markdown does not pass
+// base as prop down to our link component.
+export const create = (base: string): FC => {
+ return props => ;
+};
+
export default MarkdownLinkRenderer;
diff --git a/scm-ui/ui-components/src/MarkdownView.tsx b/scm-ui/ui-components/src/MarkdownView.tsx
index 362e553d3b..546d1610a6 100644
--- a/scm-ui/ui-components/src/MarkdownView.tsx
+++ b/scm-ui/ui-components/src/MarkdownView.tsx
@@ -29,7 +29,7 @@ import { binder } from "@scm-manager/ui-extensions";
import ErrorBoundary from "./ErrorBoundary";
import SyntaxHighlighter from "./SyntaxHighlighter";
import MarkdownHeadingRenderer from "./MarkdownHeadingRenderer";
-import MarkdownLinkRenderer from "./MarkdownLinkRenderer";
+import { create } from "./MarkdownLinkRenderer";
import { useTranslation } from "react-i18next";
import Notification from "./Notification";
@@ -39,6 +39,8 @@ type Props = RouteComponentProps & {
renderers?: any;
skipHtml?: boolean;
enableAnchorHeadings?: boolean;
+ // basePath for markdown links
+ basePath?: string;
};
const xmlMarkupSample = `\`\`\`xml
@@ -98,7 +100,7 @@ class MarkdownView extends React.Component {
}
render() {
- const { content, renderers, renderContext, enableAnchorHeadings, skipHtml } = this.props;
+ const { content, renderers, renderContext, enableAnchorHeadings, skipHtml, basePath } = this.props;
const rendererFactory = binder.getExtension("markdown-renderer-factory");
let rendererList = renderers;
@@ -115,7 +117,9 @@ class MarkdownView extends React.Component {
rendererList.heading = MarkdownHeadingRenderer;
}
- rendererList.link = MarkdownLinkRenderer;
+ if (basePath && !rendererList.link) {
+ rendererList.link = create(basePath);
+ }
if (!rendererList.code) {
rendererList.code = SyntaxHighlighter;
From ffd04eb55b7d534487f2e0eb22375fa4b681bd5d Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Tue, 19 May 2020 15:52:11 +0200
Subject: [PATCH 28/54] added basePath to markdown components in order to allow
navigation between md files
---
.../components/content/MarkdownViewer.tsx | 5 +++--
.../content/SwitchableMarkdownViewer.tsx | 18 ++++++++++--------
.../repos/sources/containers/SourcesView.tsx | 11 +++++++++--
3 files changed, 22 insertions(+), 12 deletions(-)
diff --git a/scm-ui/ui-webapp/src/repos/sources/components/content/MarkdownViewer.tsx b/scm-ui/ui-webapp/src/repos/sources/components/content/MarkdownViewer.tsx
index ce0eba4198..0ee70d5684 100644
--- a/scm-ui/ui-webapp/src/repos/sources/components/content/MarkdownViewer.tsx
+++ b/scm-ui/ui-webapp/src/repos/sources/components/content/MarkdownViewer.tsx
@@ -29,13 +29,14 @@ import styled from "styled-components";
type Props = {
file: File;
+ basePath: string;
};
const MarkdownContent = styled.div`
padding: 0.5rem;
`;
-const MarkdownViewer: FC = ({ file }) => {
+const MarkdownViewer: FC = ({ file, basePath }) => {
const [loading, setLoading] = useState(true);
const [error, setError] = useState(undefined);
const [content, setContent] = useState("");
@@ -62,7 +63,7 @@ const MarkdownViewer: FC = ({ file }) => {
return (
-
+
);
};
diff --git a/scm-ui/ui-webapp/src/repos/sources/components/content/SwitchableMarkdownViewer.tsx b/scm-ui/ui-webapp/src/repos/sources/components/content/SwitchableMarkdownViewer.tsx
index 7a14bb75b4..e194667894 100644
--- a/scm-ui/ui-webapp/src/repos/sources/components/content/SwitchableMarkdownViewer.tsx
+++ b/scm-ui/ui-webapp/src/repos/sources/components/content/SwitchableMarkdownViewer.tsx
@@ -21,13 +21,13 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-import React, { FC, useState } from "react";
+import React, {FC, useState} from "react";
import styled from "styled-components";
import MarkdownViewer from "./MarkdownViewer";
import SourcecodeViewer from "./SourcecodeViewer";
-import { File } from "@scm-manager/ui-types";
-import { Button } from "@scm-manager/ui-components";
-import { useTranslation } from "react-i18next";
+import {File} from "@scm-manager/ui-types";
+import {Button} from "@scm-manager/ui-components";
+import {useTranslation} from "react-i18next";
const ToggleButton = styled(Button)`
max-width: 1rem;
@@ -43,10 +43,11 @@ const Container = styled.div`
type Props = {
file: File;
+ basePath: string;
};
-const SwitchableMarkdownViewer: FC = ({ file }) => {
- const { t } = useTranslation("repos");
+const SwitchableMarkdownViewer: FC = ({file, basePath}) => {
+ const {t} = useTranslation("repos");
const [renderMarkdown, setRenderMarkdown] = useState(true);
const toggleMarkdown = () => {
@@ -64,9 +65,10 @@ const SwitchableMarkdownViewer: FC = ({ file }) => {
: t("sources.content.toggleButton.showMarkdown")
}
>
-
+
- {renderMarkdown ? : }
+ {renderMarkdown ? :
+ }
);
};
diff --git a/scm-ui/ui-webapp/src/repos/sources/containers/SourcesView.tsx b/scm-ui/ui-webapp/src/repos/sources/containers/SourcesView.tsx
index 1b7b26479b..417525c5f6 100644
--- a/scm-ui/ui-webapp/src/repos/sources/containers/SourcesView.tsx
+++ b/scm-ui/ui-webapp/src/repos/sources/containers/SourcesView.tsx
@@ -76,13 +76,19 @@ class SourcesView extends React.Component {
});
}
+ createBasePath() {
+ const { repository, revision } = this.props;
+ return `/repo/${repository.namespace}/${repository.name}/code/sources/${revision}/`;
+ }
+
showSources() {
const { file, revision } = this.props;
const { contentType, language } = this.state;
+ const basePath = this.createBasePath();
if (contentType.startsWith("image/")) {
return ;
} else if (contentType.includes("markdown")) {
- return ;
+ return ;
} else if (language) {
return ;
} else if (contentType.startsWith("text/")) {
@@ -94,7 +100,8 @@ class SourcesView extends React.Component {
props={{
file,
contentType,
- revision
+ revision,
+ basePath
}}
>
From 2b1ba7e4f306d6e4771d1d935f3ff7c0a17112a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 19 May 2020 16:29:40 +0200
Subject: [PATCH 29/54] Update servlet version
---
pom.xml | 2 +-
.../sonia/scm/filter/GZipResponseStream.java | 17 +++++-
.../filter/BufferedHttpServletRequest.java | 22 ++++++-
.../filter/BufferedHttpServletResponse.java | 22 ++++++-
.../scm/web/GitPermissionFilterTest.java | 61 +++++++++++--------
.../sonia/scm/web/HgServletInputStream.java | 18 +++++-
.../scm/web/HgServletInputStreamTest.java | 17 +++++-
.../java/sonia/scm/web/WireProtocolTest.java | 16 ++++-
.../scm/ProxyPushStateDispatcherTest.java | 38 ++++++++++--
.../sonia/scm/WebResourceServletTest.java | 12 +++-
.../scm/lifecycle/RestartServletTest.java | 18 +++++-
11 files changed, 205 insertions(+), 38 deletions(-)
diff --git a/pom.xml b/pom.xml
index b1e63cdadc..a25f3bda2e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -907,7 +907,7 @@
1.7.30
1.2.3
- 3.0.1
+ 3.1.0
2.1.1
4.5.3.Final
diff --git a/scm-core/src/main/java/sonia/scm/filter/GZipResponseStream.java b/scm-core/src/main/java/sonia/scm/filter/GZipResponseStream.java
index e99ccf9b80..2693fdf3b0 100644
--- a/scm-core/src/main/java/sonia/scm/filter/GZipResponseStream.java
+++ b/scm-core/src/main/java/sonia/scm/filter/GZipResponseStream.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.filter;
//~--- non-JDK imports --------------------------------------------------------
@@ -39,6 +39,7 @@ import java.io.IOException;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
/**
@@ -245,6 +246,20 @@ public class GZipResponseStream extends ServletOutputStream
return closed;
}
+ @Override
+ public boolean isReady() {
+ return true;
+ }
+
+ @Override
+ public void setWriteListener(WriteListener writeListener) {
+ try {
+ writeListener.onWritePossible();
+ } catch (IOException e) {
+ logger.debug("could not call writeListener.onWritePossible()", e);
+ }
+ }
+
//~--- fields ---------------------------------------------------------------
/** Field description */
diff --git a/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletRequest.java b/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletRequest.java
index 04f725d4ed..e674d1d2e2 100644
--- a/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletRequest.java
+++ b/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletRequest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.web.filter;
//~--- non-JDK imports --------------------------------------------------------
@@ -36,6 +36,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
@@ -197,6 +198,25 @@ public class BufferedHttpServletRequest extends HttpServletRequestWrapper
return bais.read(buf, off, len);
}
+ @Override
+ public boolean isFinished() {
+ return bais.available() == 0;
+ }
+
+ @Override
+ public boolean isReady() {
+ return bais.available() > 0;
+ }
+
+ @Override
+ public void setReadListener(ReadListener readListener) {
+ try {
+ readListener.onDataAvailable();
+ } catch (IOException e) {
+ logger.debug("could not call readListener.onDataAvailable()", e);
+ }
+ }
+
//~--- fields -------------------------------------------------------------
/** Field description */
diff --git a/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletResponse.java b/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletResponse.java
index 5d647659e5..0d13ed752f 100644
--- a/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletResponse.java
+++ b/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletResponse.java
@@ -21,11 +21,14 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.web.filter;
//~--- JDK imports ------------------------------------------------------------
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
@@ -37,6 +40,7 @@ import java.util.Map;
import java.util.Set;
import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
@@ -48,6 +52,8 @@ import javax.servlet.http.HttpServletResponseWrapper;
public class BufferedHttpServletResponse extends HttpServletResponseWrapper
{
+ private static final Logger LOG = LoggerFactory.getLogger(BufferedHttpServletResponse.class);
+
/**
* Constructs ...
*
@@ -445,6 +451,20 @@ public class BufferedHttpServletResponse extends HttpServletResponseWrapper
baos.write(param);
}
+ @Override
+ public boolean isReady() {
+ return true;
+ }
+
+ @Override
+ public void setWriteListener(WriteListener writeListener) {
+ try {
+ writeListener.onWritePossible();
+ } catch (IOException e) {
+ LOG.debug("could not call writeListener.onWritePossible()", e);
+ }
+ }
+
//~--- fields -------------------------------------------------------------
/** Field description */
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java
index a3f3895770..486cffde8c 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.web;
import org.junit.Test;
@@ -33,6 +33,7 @@ import sonia.scm.repository.spi.ScmProviderHttpServlet;
import sonia.scm.util.HttpUtil;
import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
@@ -47,40 +48,40 @@ import static org.mockito.Mockito.when;
/**
* Unit tests for {@link GitPermissionFilter}.
- *
+ *
* Created by omilke on 19.05.2017.
*/
@RunWith(MockitoJUnitRunner.class)
public class GitPermissionFilterTest {
private final GitPermissionFilter permissionFilter = new GitPermissionFilter(new ScmConfiguration(), mock(ScmProviderHttpServlet.class));
-
+
@Mock
private HttpServletResponse response;
-
+
@Test
public void testIsWriteRequest() {
HttpServletRequest request = mockRequestWithMethodAndRequestURI("POST", "/scm/git/fanzy-project/git-receive-pack");
assertThat(permissionFilter.isWriteRequest(request), is(true));
-
+
request = mockRequestWithMethodAndRequestURI("GET", "/scm/git/fanzy-project/info/refs?service=git-receive-pack");
assertThat(permissionFilter.isWriteRequest(request), is(true));
-
+
request = mockRequestWithMethodAndRequestURI("GET", "/scm/git/fanzy-project/info/refs?service=some-other-service");
assertThat(permissionFilter.isWriteRequest(request), is(false));
-
+
request = mockRequestWithMethodAndRequestURI(
- "PUT",
+ "PUT",
"/scm/git/git-lfs-demo.git/info/lfs/objects/8fcebeb5698230685f92028e560f8f1683ebc15ec82a620ffad5c12a3c19bdec"
);
assertThat(permissionFilter.isWriteRequest(request), is(true));
-
+
request = mockRequestWithMethodAndRequestURI(
- "GET",
+ "GET",
"/scm/git/git-lfs-demo.git/info/lfs/objects/8fcebeb5698230685f92028e560f8f1683ebc15ec82a620ffad5c12a3c19bdec"
);
assertThat(permissionFilter.isWriteRequest(request), is(false));
-
+
request = mockRequestWithMethodAndRequestURI("POST", "/scm/git/git-lfs-demo.git/info/lfs/objects/batch");
assertThat(permissionFilter.isWriteRequest(request), is(false));
}
@@ -97,45 +98,45 @@ public class GitPermissionFilterTest {
@Test
public void testSendNotEnoughPrivilegesErrorAsBrowser() throws IOException {
HttpServletRequest request = mockGitReceivePackServiceRequest();
-
+
permissionFilter.sendNotEnoughPrivilegesError(request, response);
-
+
verify(response).sendError(HttpServletResponse.SC_FORBIDDEN);
}
-
+
@Test
public void testSendNotEnoughPrivilegesErrorAsGitClient() throws IOException {
verifySendNotEnoughPrivilegesErrorAsGitClient("git/2.9.3");
}
-
+
@Test
public void testSendNotEnoughPrivilegesErrorAsJGitClient() throws IOException {
verifySendNotEnoughPrivilegesErrorAsGitClient("JGit/4.2");
}
-
+
private void verifySendNotEnoughPrivilegesErrorAsGitClient(String userAgent) throws IOException {
HttpServletRequest request = mockGitReceivePackServiceRequest();
when(request.getHeader(HttpUtil.HEADER_USERAGENT)).thenReturn(userAgent);
-
+
CapturingServletOutputStream stream = new CapturingServletOutputStream();
when(response.getOutputStream()).thenReturn(stream);
-
+
permissionFilter.sendNotEnoughPrivilegesError(request, response);
-
+
verify(response).setStatus(HttpServletResponse.SC_OK);
- assertThat(stream.toString(), containsString("privileges"));
+ assertThat(stream.toString(), containsString("privileges"));
}
-
+
private HttpServletRequest mockGitReceivePackServiceRequest() {
HttpServletRequest request = mockRequestWithMethodAndRequestURI("GET", "/git/info/refs");
when(request.getParameter("service")).thenReturn("git-receive-pack");
return request;
}
-
+
private static class CapturingServletOutputStream extends ServletOutputStream {
private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
+
@Override
public void write(int b) throws IOException {
baos.write(b);
@@ -145,11 +146,21 @@ public class GitPermissionFilterTest {
public void close() throws IOException {
baos.close();
}
-
+
@Override
public String toString() {
return baos.toString();
}
+
+ @Override
+ public boolean isReady() {
+ return true;
+ }
+
+ @Override
+ public void setWriteListener(WriteListener writeListener) {
+
+ }
}
-
+
}
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletInputStream.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletInputStream.java
index 9262836d85..1f435703df 100644
--- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletInputStream.java
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletInputStream.java
@@ -21,11 +21,12 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.web;
import com.google.common.base.Preconditions;
+import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -76,4 +77,19 @@ public class HgServletInputStream extends ServletInputStream {
public void close() throws IOException {
original.close();
}
+
+ @Override
+ public boolean isFinished() {
+ return original.isFinished();
+ }
+
+ @Override
+ public boolean isReady() {
+ return original.isReady();
+ }
+
+ @Override
+ public void setReadListener(ReadListener readListener) {
+ original.setReadListener(readListener);
+ }
}
diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgServletInputStreamTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgServletInputStreamTest.java
index b1c2ed60cd..1f06ede4c1 100644
--- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgServletInputStreamTest.java
+++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgServletInputStreamTest.java
@@ -21,13 +21,14 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.web;
import com.google.common.base.Charsets;
import com.google.common.io.ByteStreams;
import org.junit.Test;
+import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -69,6 +70,20 @@ public class HgServletInputStreamTest {
public int read() {
return input.read();
}
+
+ @Override
+ public boolean isFinished() {
+ return false;
+ }
+
+ @Override
+ public boolean isReady() {
+ return false;
+ }
+
+ @Override
+ public void setReadListener(ReadListener readListener) {
+ }
}
}
diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java
index 80f4094d48..29bd1b41a2 100644
--- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java
+++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.web;
import com.google.common.base.Charsets;
@@ -31,6 +31,7 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
+import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
@@ -181,6 +182,19 @@ public class WireProtocolTest {
return input.read();
}
+ @Override
+ public boolean isFinished() {
+ return false;
+ }
+
+ @Override
+ public boolean isReady() {
+ return false;
+ }
+
+ @Override
+ public void setReadListener(ReadListener readListener) {
+ }
}
}
diff --git a/scm-webapp/src/test/java/sonia/scm/ProxyPushStateDispatcherTest.java b/scm-webapp/src/test/java/sonia/scm/ProxyPushStateDispatcherTest.java
index 3fbbfafdcd..422edb2ce5 100644
--- a/scm-webapp/src/test/java/sonia/scm/ProxyPushStateDispatcherTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/ProxyPushStateDispatcherTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm;
import com.google.common.base.Charsets;
@@ -33,16 +33,23 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
+import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.net.HttpURLConnection;
-import java.util.*;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Vector;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.verify;
@@ -173,7 +180,7 @@ public class ProxyPushStateDispatcherTest {
private class DevServletInputStream extends ServletInputStream {
- private InputStream inputStream;
+ private ByteArrayInputStream inputStream;
private DevServletInputStream(String content) {
inputStream = new ByteArrayInputStream(content.getBytes(Charsets.UTF_8));
@@ -183,6 +190,20 @@ public class ProxyPushStateDispatcherTest {
public int read() throws IOException {
return inputStream.read();
}
+
+ @Override
+ public boolean isReady() {
+ return inputStream.available() > 0;
+ }
+
+ @Override
+ public boolean isFinished() {
+ return inputStream.available() == 0;
+ }
+
+ @Override
+ public void setReadListener(ReadListener readListener) {
+ }
}
private class DevServletOutputStream extends ServletOutputStream {
@@ -193,6 +214,15 @@ public class ProxyPushStateDispatcherTest {
public void write(int b) {
stream.write(b);
}
+
+ @Override
+ public boolean isReady() {
+ return true;
+ }
+
+ @Override
+ public void setWriteListener(WriteListener writeListener) {
+ }
}
}
diff --git a/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java b/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java
index 8364a53000..21727e56b3 100644
--- a/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm;
import com.google.common.base.Charsets;
@@ -37,6 +37,7 @@ import sonia.scm.plugin.PluginLoader;
import sonia.scm.plugin.UberWebResourceLoader;
import javax.servlet.ServletOutputStream;
+import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
@@ -152,6 +153,15 @@ public class WebResourceServletTest {
public void write(int b) {
buffer.write(b);
}
+
+ @Override
+ public boolean isReady() {
+ return true;
+ }
+
+ @Override
+ public void setWriteListener(WriteListener writeListener) {
+ }
}
}
diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/RestartServletTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/RestartServletTest.java
index 324f43dcb7..eeae7c697a 100644
--- a/scm-webapp/src/test/java/sonia/scm/lifecycle/RestartServletTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/RestartServletTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.lifecycle;
import com.github.legman.Subscribe;
@@ -34,6 +34,7 @@ import sonia.scm.Stage;
import sonia.scm.event.ScmEventBus;
import sonia.scm.event.ScmTestEventBus;
+import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -128,6 +129,21 @@ public class RestartServletTest {
private ServletInputStream createServletInputStream(final InputStream inputStream) {
return new ServletInputStream() {
+ @Override
+ public boolean isFinished() {
+ return false;
+ }
+
+ @Override
+ public boolean isReady() {
+ return false;
+ }
+
+ @Override
+ public void setReadListener(ReadListener readListener) {
+
+ }
+
@Override
public int read() throws IOException {
return inputStream.read();
From 57160cc23285249eb5148aa9e32cbbbd3080a601 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 19 May 2020 21:29:13 +0200
Subject: [PATCH 30/54] Remove javax activation
---
pom.xml | 6 ------
scm-core/pom.xml | 5 -----
2 files changed, 11 deletions(-)
diff --git a/pom.xml b/pom.xml
index a25f3bda2e..d5794c2819 100644
--- a/pom.xml
+++ b/pom.xml
@@ -448,12 +448,6 @@
${jaxb.version}
-
- javax.activation
- activation
- 1.1.1
-
-
diff --git a/scm-core/pom.xml b/scm-core/pom.xml
index 5ba07696a4..f15b77cded 100644
--- a/scm-core/pom.xml
+++ b/scm-core/pom.xml
@@ -182,11 +182,6 @@
jaxb-runtime
-
- javax.activation
- activation
-
-
From 835433439845729f793a8179aaa6564548340453 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 19 May 2020 21:35:16 +0200
Subject: [PATCH 31/54] Update hamcrest version
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index d5794c2819..2ffec23a48 100644
--- a/pom.xml
+++ b/pom.xml
@@ -895,7 +895,7 @@
2.28.2
- 1.3
+ 2.1
5.6.2
From ef3617cec422141eca0d24baa340748bb82480ff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 19 May 2020 21:41:07 +0200
Subject: [PATCH 32/54] Remove commons-logging
---
scm-webapp/pom.xml | 7 -------
1 file changed, 7 deletions(-)
diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml
index bf5fa38c28..f1f097b8c3 100644
--- a/scm-webapp/pom.xml
+++ b/scm-webapp/pom.xml
@@ -438,13 +438,6 @@
-
- commons-logging
- commons-logging
- 1.1.3
- provided
-
-
org.projectlombok
lombok
From 2daba944733536b98228163900541a0df317304d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 19 May 2020 21:57:21 +0200
Subject: [PATCH 33/54] Consolidate jaxb version
---
pom.xml | 6 +++---
scm-core/pom.xml | 4 ++--
scm-webapp/pom.xml | 8 ++++----
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2ffec23a48..2231e1dab0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -437,8 +437,8 @@
- javax.xml.bind
- jaxb-api
+ jakarta.xml.bind
+ jakarta.xml.bind-api
${jaxb.version}
@@ -908,7 +908,7 @@
1.19.4
2.11.0
4.2.3
- 2.3.1
+ 2.3.2
6.1.4.Final
diff --git a/scm-core/pom.xml b/scm-core/pom.xml
index f15b77cded..7d78979d96 100644
--- a/scm-core/pom.xml
+++ b/scm-core/pom.xml
@@ -173,8 +173,8 @@
- javax.xml.bind
- jaxb-api
+ jakarta.xml.bind
+ jakarta.xml.bind-api
diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml
index f1f097b8c3..f024ec62ec 100644
--- a/scm-webapp/pom.xml
+++ b/scm-webapp/pom.xml
@@ -203,15 +203,15 @@
- javax.xml.bind
- jaxb-api
- 2.3.1
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ ${jaxb.version}
org.glassfish.jaxb
jaxb-runtime
- 2.3.0
+ ${jaxb.version}
From b12b1ca5fe0294b06d482dfd887a62473eee1006 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 19 May 2020 21:57:55 +0200
Subject: [PATCH 34/54] Update rest assured version
---
scm-it/pom.xml | 2 +-
scm-it/src/test/java/sonia/scm/it/RoleITCase.java | 6 +++---
scm-it/src/test/java/sonia/scm/it/utils/TestData.java | 8 ++++----
3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/scm-it/pom.xml b/scm-it/pom.xml
index 146a7b33b2..bf9b4e6d78 100644
--- a/scm-it/pom.xml
+++ b/scm-it/pom.xml
@@ -102,7 +102,7 @@
io.rest-assured
rest-assured
- 3.1.0
+ 4.3.0
test
diff --git a/scm-it/src/test/java/sonia/scm/it/RoleITCase.java b/scm-it/src/test/java/sonia/scm/it/RoleITCase.java
index e6b8ad5932..21f4c391ee 100644
--- a/scm-it/src/test/java/sonia/scm/it/RoleITCase.java
+++ b/scm-it/src/test/java/sonia/scm/it/RoleITCase.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.it;
import org.apache.http.HttpStatus;
@@ -66,7 +66,7 @@ public class RoleITCase {
given(VndMediaType.REPOSITORY_ROLE)
.when()
- .content("{" +
+ .body("{" +
"\"name\": \"" + ROLE_NAME + "\"," +
"\"verbs\": [\"read\",\"permissionRead\"]" +
"}")
@@ -84,7 +84,7 @@ public class RoleITCase {
given(VndMediaType.REPOSITORY_PERMISSION)
.when()
- .content("{\n" +
+ .body("{\n" +
"\t\"role\": \"" + ROLE_NAME + "\",\n" +
"\t\"name\": \"" + USER + "\",\n" +
"\t\"groupPermission\": false\n" +
diff --git a/scm-it/src/test/java/sonia/scm/it/utils/TestData.java b/scm-it/src/test/java/sonia/scm/it/utils/TestData.java
index 0df93cc2bd..14265c0052 100644
--- a/scm-it/src/test/java/sonia/scm/it/utils/TestData.java
+++ b/scm-it/src/test/java/sonia/scm/it/utils/TestData.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.it.utils;
import io.restassured.response.ValidatableResponse;
@@ -86,7 +86,7 @@ public class TestData {
String admin = isAdmin ? "true" : "false";
given(VndMediaType.USER)
.when()
- .content(new StringBuilder()
+ .body(new StringBuilder()
.append(" {\n")
.append(" \"active\": true,\n")
.append(" \"admin\": ").append(admin).append(",\n")
@@ -124,7 +124,7 @@ public class TestData {
LOG.info("create group with group name: {} and description {}", groupName, desc);
given(VndMediaType.GROUP)
.when()
- .content(getGroupJson(groupName,desc))
+ .body(getGroupJson(groupName,desc))
.post(getGroupsUrl())
.then()
.statusCode(HttpStatus.SC_CREATED)
@@ -136,7 +136,7 @@ public class TestData {
LOG.info("create permission with name {} and verbs {} using the endpoint: {}", username, verbs, defaultPermissionUrl);
given(VndMediaType.REPOSITORY_PERMISSION)
.when()
- .content("{\n" +
+ .body("{\n" +
"\t\"verbs\": " + verbs.stream().collect(Collectors.joining("\",\"", "[\"", "\"]")) + ",\n" +
"\t\"name\": \"" + username + "\",\n" +
"\t\"groupPermission\": false\n" +
From 054f320455e3b5cc0adf80bd12df08d6a3781a0b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Tue, 19 May 2020 23:08:19 +0200
Subject: [PATCH 35/54] Make change types explicit
Without explicit change types, we cannot tell copy and rename apart.
---
.../sonia/scm/repository/api/DiffFile.java | 8 ++-
.../scm/repository/spi/GitDiffCommand.java | 6 ++-
.../repository/spi/GitDiffResultCommand.java | 18 +++++++
.../DiffResultToDiffResultDtoMapper.java | 49 +++++++++----------
.../DiffResultToDiffResultDtoMapperTest.java | 28 ++++++++++-
5 files changed, 81 insertions(+), 28 deletions(-)
diff --git a/scm-core/src/main/java/sonia/scm/repository/api/DiffFile.java b/scm-core/src/main/java/sonia/scm/repository/api/DiffFile.java
index b5cbd08ec7..fb1d102846 100644
--- a/scm-core/src/main/java/sonia/scm/repository/api/DiffFile.java
+++ b/scm-core/src/main/java/sonia/scm/repository/api/DiffFile.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.api;
public interface DiffFile extends Iterable {
@@ -33,4 +33,10 @@ public interface DiffFile extends Iterable {
String getOldPath();
String getNewPath();
+
+ ChangeType getChangeType();
+
+ enum ChangeType {
+ ADD, MODIFY, DELETE, RENAME, COPY
+ }
}
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java
index 0e851456a7..adb7a7bd0e 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java
@@ -57,7 +57,7 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand {
formatter.setRepository(repository);
for (DiffEntry e : diff.getEntries()) {
- if (!e.getOldId().equals(e.getNewId()) || !e.getNewPath().equals(e.getOldPath())) {
+ if (idOrPathChanged(e)) {
formatter.format(e);
}
}
@@ -67,6 +67,10 @@ public class GitDiffCommand extends AbstractGitCommand implements DiffCommand {
};
}
+ private boolean idOrPathChanged(DiffEntry e) {
+ return !e.getOldId().equals(e.getNewId()) || !e.getNewPath().equals(e.getOldPath());
+ }
+
static class DequoteOutputStream extends OutputStream {
private static final String[] DEQUOTE_STARTS = {
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffResultCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffResultCommand.java
index e0cbffbc2a..fed865c576 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffResultCommand.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffResultCommand.java
@@ -108,6 +108,24 @@ public class GitDiffResultCommand extends AbstractGitCommand implements DiffResu
return diffEntry.getNewPath();
}
+ @Override
+ public ChangeType getChangeType() {
+ switch (diffEntry.getChangeType()) {
+ case ADD:
+ return ChangeType.ADD;
+ case MODIFY:
+ return ChangeType.MODIFY;
+ case RENAME:
+ return ChangeType.RENAME;
+ case DELETE:
+ return ChangeType.DELETE;
+ case COPY:
+ return ChangeType.COPY;
+ default:
+ throw new IllegalArgumentException("Unknown change type: " + diffEntry.getChangeType());
+ }
+ }
+
@Override
public Iterator iterator() {
String content = format(repository, diffEntry);
diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java
index 2c17abd30f..5057950149 100644
--- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java
+++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapper.java
@@ -26,7 +26,6 @@ package sonia.scm.api.v2.resources;
import com.github.sdorra.spotter.ContentTypes;
import com.github.sdorra.spotter.Language;
-import com.google.common.base.Strings;
import com.google.inject.Inject;
import sonia.scm.repository.Repository;
import sonia.scm.repository.api.DiffFile;
@@ -42,7 +41,7 @@ import java.util.OptionalInt;
import static de.otto.edison.hal.Links.linkingTo;
/**
- * TODO conflicts, copy and rename
+ * TODO conflicts
*/
class DiffResultToDiffResultDtoMapper {
@@ -83,21 +82,29 @@ class DiffResultToDiffResultDtoMapper {
String oldPath = file.getOldPath();
String path;
- if (isFilePath(newPath) && isFileNull(oldPath)) {
- path = newPath;
- dto.setType("add");
- } else if (isFileNull(newPath) && isFilePath(oldPath)) {
- path = oldPath;
- dto.setType("delete");
- } else if (!newPath.equals(oldPath)) {
- path = newPath;
- dto.setType("rename");
- } else if (isFilePath(newPath) && isFilePath(oldPath)) {
- path = newPath;
- dto.setType("modify");
- } else {
- // TODO copy?
- throw new IllegalStateException("no file without path");
+ switch (file.getChangeType()) {
+ case ADD:
+ path = newPath;
+ dto.setType("add");
+ break;
+ case DELETE:
+ path = oldPath;
+ dto.setType("delete");
+ break;
+ case RENAME:
+ path = newPath;
+ dto.setType("rename");
+ break;
+ case MODIFY:
+ path = newPath;
+ dto.setType("modify");
+ break;
+ case COPY:
+ path = newPath;
+ dto.setType("copy");
+ break;
+ default:
+ throw new IllegalArgumentException("unknown change type: " + file.getChangeType());
}
dto.setNewPath(newPath);
@@ -119,14 +126,6 @@ class DiffResultToDiffResultDtoMapper {
return dto;
}
- private boolean isFilePath(String path) {
- return !isFileNull(path);
- }
-
- private boolean isFileNull(String path) {
- return Strings.isNullOrEmpty(path) || "/dev/null".equals(path);
- }
-
private DiffResultDto.HunkDto mapHunk(Hunk hunk) {
DiffResultDto.HunkDto dto = new DiffResultDto.HunkDto();
dto.setContent(hunk.getRawHeader());
diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java
index 5b0ff6eff9..291b04e00c 100644
--- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResultToDiffResultDtoMapperTest.java
@@ -63,6 +63,7 @@ class DiffResultToDiffResultDtoMapperTest {
assertModifiedFile(files.get(1), "B.ts", "abc", "def", "typescript");
assertDeletedFile(files.get(2), "C.go", "ghi", "golang");
assertRenamedFile(files.get(3), "typo.ts", "okay.ts", "def", "fixed", "typescript");
+ assertCopiedFile(files.get(4), "good.ts", "better.ts", "def", "fixed", "typescript");
DiffResultDto.HunkDto hunk = files.get(1).getHunks().get(0);
assertHunk(hunk, "@@ -3,4 1,2 @@", 1, 2, 3, 4);
@@ -108,7 +109,8 @@ class DiffResultToDiffResultDtoMapperTest {
)
),
deletedFile("C.go", "ghi"),
- renamedFile("okay.ts", "typo.ts", "fixed", "def")
+ renamedFile("okay.ts", "typo.ts", "fixed", "def"),
+ copiedFile("better.ts", "good.ts", "fixed", "def")
);
}
@@ -174,6 +176,15 @@ class DiffResultToDiffResultDtoMapperTest {
assertThat(file.getLanguage()).isEqualTo(language);
}
+ private void assertCopiedFile(DiffResultDto.FileDto file, String oldPath, String newPath, String oldRevision, String newRevision, String language) {
+ assertThat(file.getOldPath()).isEqualTo(oldPath);
+ assertThat(file.getNewPath()).isEqualTo(newPath);
+ assertThat(file.getOldRevision()).isEqualTo(oldRevision);
+ assertThat(file.getNewRevision()).isEqualTo(newRevision);
+ assertThat(file.getType()).isEqualTo("copy");
+ assertThat(file.getLanguage()).isEqualTo(language);
+ }
+
private DiffResult result(DiffFile... files) {
DiffResult result = mock(DiffResult.class);
when(result.iterator()).thenReturn(Arrays.asList(files).iterator());
@@ -184,6 +195,7 @@ class DiffResultToDiffResultDtoMapperTest {
DiffFile file = mock(DiffFile.class);
when(file.getNewPath()).thenReturn(path);
when(file.getNewRevision()).thenReturn(revision);
+ when(file.getChangeType()).thenReturn(DiffFile.ChangeType.ADD);
when(file.iterator()).thenReturn(Arrays.asList(hunks).iterator());
return file;
}
@@ -192,6 +204,7 @@ class DiffResultToDiffResultDtoMapperTest {
DiffFile file = mock(DiffFile.class);
when(file.getOldPath()).thenReturn(path);
when(file.getOldRevision()).thenReturn(revision);
+ when(file.getChangeType()).thenReturn(DiffFile.ChangeType.DELETE);
when(file.iterator()).thenReturn(Arrays.asList(hunks).iterator());
return file;
}
@@ -202,6 +215,7 @@ class DiffResultToDiffResultDtoMapperTest {
when(file.getNewRevision()).thenReturn(newRevision);
when(file.getOldPath()).thenReturn(path);
when(file.getOldRevision()).thenReturn(oldRevision);
+ when(file.getChangeType()).thenReturn(DiffFile.ChangeType.MODIFY);
when(file.iterator()).thenReturn(Arrays.asList(hunks).iterator());
return file;
}
@@ -212,6 +226,18 @@ class DiffResultToDiffResultDtoMapperTest {
when(file.getNewRevision()).thenReturn(newRevision);
when(file.getOldPath()).thenReturn(oldPath);
when(file.getOldRevision()).thenReturn(oldRevision);
+ when(file.getChangeType()).thenReturn(DiffFile.ChangeType.RENAME);
+ when(file.iterator()).thenReturn(emptyIterator());
+ return file;
+ }
+
+ private DiffFile copiedFile(String newPath, String oldPath, String newRevision, String oldRevision) {
+ DiffFile file = mock(DiffFile.class);
+ when(file.getNewPath()).thenReturn(newPath);
+ when(file.getNewRevision()).thenReturn(newRevision);
+ when(file.getOldPath()).thenReturn(oldPath);
+ when(file.getOldRevision()).thenReturn(oldRevision);
+ when(file.getChangeType()).thenReturn(DiffFile.ChangeType.COPY);
when(file.iterator()).thenReturn(emptyIterator());
return file;
}
From 9f97442d4fc41690b8fb628703bfcd3e8392220b Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Wed, 20 May 2020 08:39:06 +0200
Subject: [PATCH 36/54] normalize paths with ".." and "." in markdown content
---
.../src/MarkdownLinkRenderer.test.tsx | 15 ++++++
.../src/MarkdownLinkRenderer.tsx | 15 +++++-
.../src/MarkdownView.stories.tsx | 4 +-
.../src/__resources__/markdown-links.md.ts | 46 +++++++++++++++++++
4 files changed, 78 insertions(+), 2 deletions(-)
create mode 100644 scm-ui/ui-components/src/__resources__/markdown-links.md.ts
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
index f6b01eb06b..3ee5e3f188 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
@@ -100,4 +100,19 @@ describe("test createLocalLink", () => {
const localLink = createLocalLink("/src", "/src/docs/index.md", "/docs/Home.md");
expect(localLink).toBe("/src/docs/Home.md");
});
+
+ it("should resolve .. with in path", () => {
+ const localLink = createLocalLink("/src", "/src/docs/installation/index.md", "../../README.md");
+ expect(localLink).toBe("/src/README.md");
+ });
+
+ it("should resolve . with in path", () => {
+ const localLink = createLocalLink("/src", "/src/README.md", "./LICENSE.md");
+ expect(localLink).toBe("/src/LICENSE.md");
+ });
+
+ it("should handle complex path", () => {
+ const localLink = createLocalLink("/src", "/src/docs/installation/index.md", "./.././../docs/index.md");
+ expect(localLink).toBe("/src/docs/index.md");
+ });
});
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
index 30e187265e..2de0846f28 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
@@ -49,6 +49,19 @@ const join = (left: string, right: string) => {
return left + right;
};
+const normalizePath = (path: string) => {
+ const stack = [];
+ const parts = path.split("/");
+ for (const part of parts) {
+ if (part === "..") {
+ stack.pop();
+ } else if (part !== ".") {
+ stack.push(part)
+ }
+ }
+ return stack.join("/")
+};
+
export const createLocalLink = (basePath: string, currentPath: string, link: string) => {
if (link.startsWith("/")) {
return join(basePath, link);
@@ -66,7 +79,7 @@ export const createLocalLink = (basePath: string, currentPath: string, link: str
} else {
path = path.substring(0, lastSlash);
}
- return join(path, link);
+ return normalizePath(join(path, link));
};
type LinkProps = {
diff --git a/scm-ui/ui-components/src/MarkdownView.stories.tsx b/scm-ui/ui-components/src/MarkdownView.stories.tsx
index e43f9afd75..2c2e1cc9f4 100644
--- a/scm-ui/ui-components/src/MarkdownView.stories.tsx
+++ b/scm-ui/ui-components/src/MarkdownView.stories.tsx
@@ -30,6 +30,7 @@ import TestPage from "./__resources__/test-page.md";
import MarkdownWithoutLang from "./__resources__/markdown-without-lang.md";
import MarkdownXmlCodeBlock from "./__resources__/markdown-xml-codeblock.md";
import MarkdownInlineXml from "./__resources__/markdown-inline-xml.md";
+import MarkdownLinks from "./__resources__/markdown-links.md";
import Title from "./layout/Title";
import { Subtitle } from "./layout";
import { MemoryRouter } from "react-router-dom";
@@ -50,4 +51,5 @@ storiesOf("MarkdownView", module)
>
- ));
+ ))
+ .add("Links", () => );
diff --git a/scm-ui/ui-components/src/__resources__/markdown-links.md.ts b/scm-ui/ui-components/src/__resources__/markdown-links.md.ts
new file mode 100644
index 0000000000..46be993a3a
--- /dev/null
+++ b/scm-ui/ui-components/src/__resources__/markdown-links.md.ts
@@ -0,0 +1,46 @@
+/*
+ * MIT License
+ *
+ * Copyright (c) 2020-present Cloudogu GmbH and Contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+export default `# Links
+
+Show case for different style of markdown links.
+Please note that some of the links may not work in storybook,
+the story is mostly for checking if the links are rendered correct.
+
+## External
+
+External Links should be opened in a new tab: [external link](https://scm-manager.org)
+
+## Anchor
+
+Anchor Links should be rendered a simple a tag with an href: [anchor link](#sample)
+
+## Protocol
+
+Links with a protocol other than http should be rendered a simple a tag with an href e.g.: [mail link](mailto:marvin@hitchhiker.com)
+
+## Internal
+
+Internal links should be rendered by react-router: [internal link](/buttons)
+`;
From d316cf51c8a6980e14d44cde0e6c935950bb0645 Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Wed, 20 May 2020 08:41:21 +0200
Subject: [PATCH 37/54] update storyshots to reflect changes
---
.../src/__snapshots__/storyshots.test.ts.snap | 140 +++++++++++++-----
1 file changed, 104 insertions(+), 36 deletions(-)
diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap
index 6bcb322fee..0a056f61cb 100644
--- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap
+++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap
@@ -33060,6 +33060,7 @@ exports[`Storyshots Layout|Footer Default 1`] = `
SCM-Manager 2.0.0
@@ -33085,6 +33086,7 @@ exports[`Storyshots Layout|Footer Default 1`] = `
footer.support.community
@@ -33093,6 +33095,7 @@ exports[`Storyshots Layout|Footer Default 1`] = `
footer.support.enterprise
@@ -33182,6 +33185,7 @@ exports[`Storyshots Layout|Footer Full 1`] = `
SCM-Manager 2.0.0
@@ -33190,6 +33194,7 @@ exports[`Storyshots Layout|Footer Full 1`] = `
REST API
@@ -33198,6 +33203,7 @@ exports[`Storyshots Layout|Footer Full 1`] = `
CLI
@@ -33223,6 +33229,7 @@ exports[`Storyshots Layout|Footer Full 1`] = `
footer.support.community
@@ -33231,6 +33238,7 @@ exports[`Storyshots Layout|Footer Full 1`] = `
footer.support.enterprise
@@ -33239,6 +33247,7 @@ exports[`Storyshots Layout|Footer Full 1`] = `
FAQ
@@ -33319,6 +33328,7 @@ exports[`Storyshots Layout|Footer With Avatar 1`] = `
SCM-Manager 2.0.0
@@ -33344,6 +33354,7 @@ exports[`Storyshots Layout|Footer With Avatar 1`] = `
footer.support.community
@@ -33352,6 +33363,7 @@ exports[`Storyshots Layout|Footer With Avatar 1`] = `
footer.support.enterprise
@@ -33436,6 +33448,7 @@ exports[`Storyshots Layout|Footer With Plugin Links 1`] = `
SCM-Manager 2.0.0
@@ -33444,6 +33457,7 @@ exports[`Storyshots Layout|Footer With Plugin Links 1`] = `
REST API
@@ -33452,6 +33466,7 @@ exports[`Storyshots Layout|Footer With Plugin Links 1`] = `
CLI
@@ -33477,6 +33492,7 @@ exports[`Storyshots Layout|Footer With Plugin Links 1`] = `
footer.support.community
@@ -33485,6 +33501,7 @@ exports[`Storyshots Layout|Footer With Plugin Links 1`] = `
footer.support.enterprise
@@ -33493,6 +33510,7 @@ exports[`Storyshots Layout|Footer With Plugin Links 1`] = `
FAQ
@@ -33581,64 +33599,56 @@ exports[`Storyshots MarkdownView Default 1`] = `
[Top]
@@ -33712,8 +33721,7 @@ exports[`Storyshots MarkdownView Default 1`] = `
[Top]
@@ -33753,8 +33761,7 @@ exports[`Storyshots MarkdownView Default 1`] = `
[Top]
@@ -33833,8 +33840,7 @@ Deserunt officia esse aliquip consectetur duis ut labore laborum commodo aliquip
[Top]
@@ -33854,8 +33860,7 @@ Deserunt officia esse aliquip consectetur duis ut labore laborum commodo aliquip
[Top]
@@ -34162,8 +34167,7 @@ Deserunt officia esse aliquip consectetur duis ut labore laborum commodo aliquip
[Top]
@@ -34228,8 +34232,7 @@ func main() {
[Top]
@@ -34251,8 +34254,7 @@ func main() {
reprehenderit duis
irure
@@ -34278,8 +34280,7 @@ func main() {
anim aute reprehenderit id eu ea. Aute
excepteur proident
@@ -34322,8 +34323,7 @@ func main() {
Reprehenderit non eu quis in ad elit esse qui aute id
incididunt
@@ -34390,6 +34390,74 @@ exports[`Storyshots MarkdownView Inline Xml 1`] = `
`;
+exports[`Storyshots MarkdownView Links 1`] = `
+
+
+
+
+ Links
+
+
+ Show case for different style of markdown links.
+Please note that some of the links may not work in storybook,
+the story is mostly for checking if the links are rendered correct.
+
+
+ External
+
+
+ External Links should be opened in a new tab:
+
+ external link
+
+
+
+ Anchor
+
+
+ Anchor Links should be rendered a simple a tag with an href:
+
+ anchor link
+
+
+
+ Protocol
+
+
+ Links with a protocol other than http should be rendered a simple a tag with an href e.g.:
+
+ mail link
+
+
+
+ Internal
+
+
+ Internal links should be rendered by react-router:
+
+ internal link
+
+
+
+
+
+`;
+
exports[`Storyshots MarkdownView Xml Code Block 1`] = `
Date: Wed, 20 May 2020 07:50:12 +0200
Subject: [PATCH 38/54] Log changes
---
CHANGELOG.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 711639ae90..3f3a45a602 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,9 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-##Unreleased
+## Unreleased
+### Added
+- Detect renamed files in git and hg diffs ([#1157](https://github.com/scm-manager/scm-manager/pull/1157))
## [2.0.0-rc8] - 2020-05-08
### Added
From 96c8548fb118a6f3ec88ab04ee9c4abd47c60959 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 20 May 2020 09:24:31 +0200
Subject: [PATCH 39/54] Exclude cloned apis from jboss
---
pom.xml | 46 ++++++++++++++++++++++++++++++++++++++++++++++
scm-webapp/pom.xml | 6 ++++++
2 files changed, 52 insertions(+)
diff --git a/pom.xml b/pom.xml
index 2231e1dab0..a21fd91509 100644
--- a/pom.xml
+++ b/pom.xml
@@ -241,6 +241,16 @@
org.jboss.resteasy
resteasy-core
${resteasy.version}
+
+
+ org.jboss.spec.javax.ws.rs
+ jboss-jaxrs-api_2.1_spec
+
+
+ org.jboss.spec.javax.xml.bind
+ jboss-jaxb-api_2.3_spec
+
+
@@ -253,6 +263,12 @@
org.jboss.resteasy
resteasy-jaxb-provider
${resteasy.version}
+
+
+ org.jboss.spec.javax.xml.bind
+ jboss-jaxb-api_2.3_spec
+
+
@@ -267,6 +283,30 @@
${resteasy.version}
+
+ org.jboss.resteasy
+ resteasy-client-api
+ ${resteasy.version}
+
+
+ org.jboss.spec.javax.ws.rs
+ jboss-jaxrs-api_2.1_spec
+
+
+
+
+
+ org.jboss.resteasy
+ resteasy-client
+ ${resteasy.version}
+
+
+ org.jboss.spec.javax.ws.rs
+ jboss-jaxrs-api_2.1_spec
+
+
+
+
org.jboss.resteasy
resteasy-guice
@@ -277,6 +317,12 @@
org.jboss.resteasy
resteasy-servlet-initializer
${resteasy.version}
+
+
+ org.jboss.spec.javax.ws.rs
+ jboss-jaxrs-api_2.1_spec
+
+
From baf868b758ae8ebce468df19c5867f2a901570e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 20 May 2020 09:25:22 +0200
Subject: [PATCH 40/54] Configure duplicate finder to exclude test dependencies
---
scm-webapp/pom.xml | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml
index 7a080bc85b..054dace8d1 100644
--- a/scm-webapp/pom.xml
+++ b/scm-webapp/pom.xml
@@ -653,6 +653,20 @@
+
+ org.basepom.maven
+ duplicate-finder-maven-plugin
+ 1.3.0
+
+ false
+ false
+ false
+ false
+ true
+ true
+ false
+
+
scm-webapp
From 1bff965ba52b1244802be9a982f3107e184e3168 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 20 May 2020 09:41:27 +0200
Subject: [PATCH 41/54] Remove unused lib
---
scm-plugins/scm-legacy-plugin/pom.xml | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/scm-plugins/scm-legacy-plugin/pom.xml b/scm-plugins/scm-legacy-plugin/pom.xml
index 46bc9d99f2..0010f81b11 100644
--- a/scm-plugins/scm-legacy-plugin/pom.xml
+++ b/scm-plugins/scm-legacy-plugin/pom.xml
@@ -36,9 +36,9 @@
Support migrated repository urls and v1 passwords
2.0.0-SNAPSHOT
smp
-
+
-
+
@@ -48,13 +48,6 @@
provided
-
- javax.ws.rs
- jsr311-api
- 1.1.1
- compile
-
-
From 799e34878aa70a962b323415bb6290438afbc226 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 20 May 2020 09:43:29 +0200
Subject: [PATCH 42/54] Exclude commons-logging
---
pom.xml | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/pom.xml b/pom.xml
index a21fd91509..9eed838b68 100644
--- a/pom.xml
+++ b/pom.xml
@@ -464,6 +464,12 @@
org.apache.httpcomponents
httpclient
4.5.5
+
+
+ commons-logging
+ commons-logging
+
+
From 96c057090efbc351dec9c653e9234aa5fe9457fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 20 May 2020 09:48:27 +0200
Subject: [PATCH 43/54] Remove glassfish copy of javax.el
---
scm-webapp/pom.xml | 6 ------
1 file changed, 6 deletions(-)
diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml
index 054dace8d1..ff4e93594d 100644
--- a/scm-webapp/pom.xml
+++ b/scm-webapp/pom.xml
@@ -202,12 +202,6 @@
3.0.0
-
- org.glassfish
- javax.el
- 3.0.1-b11
-
-
jakarta.xml.bind
jakarta.xml.bind-api
From c2b9fe002154f665f155ecab875a2920bd82beab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 20 May 2020 10:14:28 +0200
Subject: [PATCH 44/54] Log changes
---
CHANGELOG.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 711639ae90..4c6f606c37 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,9 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-##Unreleased
+## Unreleased
+### Fixed
+- Resolved conflicting dependencies for scm-webapp ([#1159](https://github.com/scm-manager/scm-manager/pull/1159))
## [2.0.0-rc8] - 2020-05-08
### Added
From 12355f27545de989e1ce7fa93c72c3889f0a407d Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Wed, 20 May 2020 11:18:58 +0200
Subject: [PATCH 45/54] fixed review findings
---
.../src/MarkdownLinkRenderer.test.tsx | 18 +++++++++++++++---
.../ui-components/src/MarkdownLinkRenderer.tsx | 18 +++++++++++++++---
2 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
index 3ee5e3f188..719baa254c 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
@@ -57,11 +57,13 @@ describe("test isLinkWithProtocol", () => {
expect(isLinkWithProtocol("urn:oasis:names:specification:docbook:dtd:xml:4.1.2")).toBe(true);
expect(isLinkWithProtocol("about:config")).toBe(true);
expect(isLinkWithProtocol("http://cloudogu.com")).toBe(true);
+ expect(isLinkWithProtocol("file:///srv/git/project.git")).toBe(true);
+ expect(isLinkWithProtocol("ssh://trillian@server/project.git")).toBe(true);
});
it("should return false", () => {
- expect(isExternalLink("some/path/link")).toBe(false);
- expect(isExternalLink("/some/path/link")).toBe(false);
- expect(isExternalLink("#some-anchor")).toBe(false);
+ expect(isLinkWithProtocol("some/path/link")).toBe(false);
+ expect(isLinkWithProtocol("/some/path/link")).toBe(false);
+ expect(isLinkWithProtocol("#some-anchor")).toBe(false);
});
});
@@ -106,11 +108,21 @@ describe("test createLocalLink", () => {
expect(localLink).toBe("/src/README.md");
});
+ it("should resolve .. to / if we reached the end", () => {
+ const localLink = createLocalLink("/", "/index.md", "../../README.md");
+ expect(localLink).toBe("/README.md");
+ });
+
it("should resolve . with in path", () => {
const localLink = createLocalLink("/src", "/src/README.md", "./LICENSE.md");
expect(localLink).toBe("/src/LICENSE.md");
});
+ it("should resolve . with the current directory", () => {
+ const localLink = createLocalLink("/", "/README.md", "././LICENSE.md");
+ expect(localLink).toBe("/LICENSE.md");
+ });
+
it("should handle complex path", () => {
const localLink = createLocalLink("/src", "/src/docs/installation/index.md", "./.././../docs/index.md");
expect(localLink).toBe("/src/docs/index.md");
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
index 2de0846f28..8ae1bc6135 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.tsx
@@ -59,14 +59,26 @@ const normalizePath = (path: string) => {
stack.push(part)
}
}
- return stack.join("/")
+ const normalizedPath = stack.join("/")
+ if (normalizedPath.startsWith("/")) {
+ return normalizedPath;
+ }
+ return "/" + normalizedPath;
+};
+
+const isAbsolute = (link: string) => {
+ return link.startsWith("/");
+};
+
+const isSubDirectoryOf = (basePath: string, currentPath: string) => {
+ return currentPath.startsWith(basePath);
};
export const createLocalLink = (basePath: string, currentPath: string, link: string) => {
- if (link.startsWith("/")) {
+ if (isAbsolute(link)) {
return join(basePath, link);
}
- if (!currentPath.startsWith(basePath)) {
+ if (!isSubDirectoryOf(basePath, currentPath)) {
return join(basePath, link);
}
let path = currentPath;
From 4948f26b8eeeadb379f28d5c1186ec0766ba106d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 20 May 2020 11:25:35 +0200
Subject: [PATCH 46/54] Use fixed version of gitdiff parser
---
package.json | 2 +-
yarn.lock | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/package.json b/package.json
index 4045306d30..f5194ee536 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
},
"resolutions": {
"babel-core": "7.0.0-bridge.0",
- "gitdiff-parser": "https://github.com/scm-manager/gitdiff-parser#1da10408e52ad1d58b1f817dd1d658d9f2eb4087",
+ "gitdiff-parser": "https://github.com/scm-manager/gitdiff-parser#617747460280bf4522bb84d217a9064ac8eb6d3d",
"lowlight": "1.13.1"
},
"babel": {
diff --git a/yarn.lock b/yarn.lock
index bf850ef2f3..6cd638ce5b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7444,9 +7444,9 @@ gitconfiglocal@^1.0.0:
dependencies:
ini "^1.3.2"
-gitdiff-parser@^0.1.2, "gitdiff-parser@https://github.com/scm-manager/gitdiff-parser#1da10408e52ad1d58b1f817dd1d658d9f2eb4087":
+gitdiff-parser@^0.1.2, "gitdiff-parser@https://github.com/scm-manager/gitdiff-parser#617747460280bf4522bb84d217a9064ac8eb6d3d":
version "0.1.2"
- resolved "https://github.com/scm-manager/gitdiff-parser#1da10408e52ad1d58b1f817dd1d658d9f2eb4087"
+ resolved "https://github.com/scm-manager/gitdiff-parser#617747460280bf4522bb84d217a9064ac8eb6d3d"
glob-base@^0.3.0:
version "0.3.0"
From b0abbbd5a698658f9f04bd96c685f993c836e376 Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Wed, 20 May 2020 12:05:45 +0200
Subject: [PATCH 47/54] avoid code duplication
---
.../src/MarkdownLinkRenderer.test.tsx | 41 ++++++++-----------
1 file changed, 17 insertions(+), 24 deletions(-)
diff --git a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
index 719baa254c..7a5b8e68dc 100644
--- a/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
+++ b/scm-ui/ui-components/src/MarkdownLinkRenderer.test.tsx
@@ -69,62 +69,55 @@ describe("test isLinkWithProtocol", () => {
describe("test createLocalLink", () => {
it("should handle relative links", () => {
- const localLink = createLocalLink("/src", "/src/README.md", "docs/Home.md");
- expect(localLink).toBe("/src/docs/Home.md");
+ expectLocalLink("/src", "/src/README.md", "docs/Home.md", "/src/docs/Home.md");
});
it("should handle absolute links", () => {
- const localLink = createLocalLink("/src", "/src/README.md", "/docs/Home.md");
- expect(localLink).toBe("/src/docs/Home.md");
+ expectLocalLink("/src", "/src/README.md", "/docs/CHANGELOG.md", "/src/docs/CHANGELOG.md");
});
it("should handle relative links from locations with trailing slash", () => {
- const localLink = createLocalLink("/src", "/src/README.md/", "/docs/Home.md");
- expect(localLink).toBe("/src/docs/Home.md");
+ expectLocalLink("/src", "/src/README.md/", "/docs/LICENSE.md", "/src/docs/LICENSE.md");
});
it("should handle relative links from location outside of base", () => {
- const localLink = createLocalLink("/src", "/info/readme", "docs/Home.md");
- expect(localLink).toBe("/src/docs/Home.md");
+ expectLocalLink("/src", "/info/readme", "docs/index.md", "/src/docs/index.md");
});
it("should handle absolute links from location outside of base", () => {
- const localLink = createLocalLink("/src", "/info/readme", "/docs/Home.md");
- expect(localLink).toBe("/src/docs/Home.md");
+ expectLocalLink("/src", "/info/readme", "/info/index.md", "/src/info/index.md");
});
it("should handle relative links from sub directories", () => {
- const localLink = createLocalLink("/src", "/src/docs/index.md", "installation/linux.md");
- expect(localLink).toBe("/src/docs/installation/linux.md");
+ expectLocalLink("/src", "/src/docs/index.md", "installation/linux.md", "/src/docs/installation/linux.md");
});
it("should handle absolute links from sub directories", () => {
- const localLink = createLocalLink("/src", "/src/docs/index.md", "/docs/Home.md");
- expect(localLink).toBe("/src/docs/Home.md");
+ expectLocalLink("/src", "/src/docs/index.md", "/docs/CONTRIBUTIONS.md", "/src/docs/CONTRIBUTIONS.md");
});
it("should resolve .. with in path", () => {
- const localLink = createLocalLink("/src", "/src/docs/installation/index.md", "../../README.md");
- expect(localLink).toBe("/src/README.md");
+ expectLocalLink("/src", "/src/docs/installation/index.md", "../../README.md", "/src/README.md");
});
it("should resolve .. to / if we reached the end", () => {
- const localLink = createLocalLink("/", "/index.md", "../../README.md");
- expect(localLink).toBe("/README.md");
+ expectLocalLink("/", "/index.md", "../../README.md", "/README.md");
});
it("should resolve . with in path", () => {
- const localLink = createLocalLink("/src", "/src/README.md", "./LICENSE.md");
- expect(localLink).toBe("/src/LICENSE.md");
+ expectLocalLink("/src", "/src/README.md", "./SHAPESHIPS.md", "/src/SHAPESHIPS.md");
});
it("should resolve . with the current directory", () => {
- const localLink = createLocalLink("/", "/README.md", "././LICENSE.md");
- expect(localLink).toBe("/LICENSE.md");
+ expectLocalLink("/", "/README.md", "././HITCHHIKER.md", "/HITCHHIKER.md");
});
it("should handle complex path", () => {
- const localLink = createLocalLink("/src", "/src/docs/installation/index.md", "./.././../docs/index.md");
- expect(localLink).toBe("/src/docs/index.md");
+ expectLocalLink("/src", "/src/docs/installation/index.md", "./.././../docs/index.md", "/src/docs/index.md");
});
+
+ const expectLocalLink = (basePath: string, currentPath: string, link: string, expected: string) => {
+ const localLink = createLocalLink(basePath, currentPath, link);
+ expect(localLink).toBe(expected);
+ };
});
From 7a274abf0f9d418ec16f3524cd1926e5e7bb5a8a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 20 May 2020 12:20:06 +0200
Subject: [PATCH 48/54] Replace el api with implementation from glassfish
Somehow, plugins failed to start without this.
---
scm-webapp/pom.xml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml
index ff4e93594d..54dbc131b7 100644
--- a/scm-webapp/pom.xml
+++ b/scm-webapp/pom.xml
@@ -196,18 +196,18 @@
6.1.4.Final
-
- javax.el
- javax.el-api
- 3.0.0
-
-
jakarta.xml.bind
jakarta.xml.bind-api
${jaxb.version}
+
+ org.glassfish
+ javax.el
+ 3.0.1-b11
+
+
org.glassfish.jaxb
jaxb-runtime
From d32258b8fefd0dcf1316da00bca6b9276a345b2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Wed, 20 May 2020 12:38:11 +0200
Subject: [PATCH 49/54] Fix changelog
---
CHANGELOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1628d676d5..ec2cc1af5d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Detect renamed files in git and hg diffs ([#1157](https://github.com/scm-manager/scm-manager/pull/1157))
### Fixed
+- Missing copy on write in the data store ([#1155](https://github.com/scm-manager/scm-manager/pull/1155))
- Resolved conflicting dependencies for scm-webapp ([#1159](https://github.com/scm-manager/scm-manager/pull/1159))
## [2.0.0-rc8] - 2020-05-08
@@ -31,7 +32,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Handle obscure line breaks in diff viewer ([#1129](https://github.com/scm-manager/scm-manager/pull/1129))
- Validate subversion client checksum ([#1113](https://github.com/scm-manager/scm-manager/issues/1113))
- Fix plugin manage permission ([#1135](https://github.com/scm-manager/scm-manager/pull/1135))
-- Missing copy on write in the data store ([#1155](https://github.com/scm-manager/scm-manager/pull/1155))
## [2.0.0-rc7] - 2020-04-09
### Added
From 2a375066fbae410fd69ae4abcb9aea494c8fb092 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Thu, 21 May 2020 00:15:36 +0200
Subject: [PATCH 50/54] fix: upgrade jakarta.xml.bind:jakarta.xml.bind-api from
2.3.2 to 2.3.3
Snyk has created this PR to upgrade jakarta.xml.bind:jakarta.xml.bind-api from 2.3.2 to 2.3.3.
See this package in NPM:
https://www.npmjs.com/package/jakarta.xml.bind:jakarta.xml.bind-api
See this project in Snyk:
https://app.snyk.io/org/scm-manager/project/0397d943-538d-483e-9c87-a3f7e7665d7b?utm_source=github&utm_medium=upgrade-pr
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 9eed838b68..6542f9c038 100644
--- a/pom.xml
+++ b/pom.xml
@@ -960,7 +960,7 @@
1.19.4
2.11.0
4.2.3
- 2.3.2
+ 2.3.3
6.1.4.Final
From 6cde2a90ccfe4b1178c5d288448643ec70e9f278 Mon Sep 17 00:00:00 2001
From: snyk-bot
Date: Thu, 21 May 2020 03:00:33 +0200
Subject: [PATCH 51/54] fix: upgrade org.junit-pioneer:junit-pioneer from 0.5.6
to 0.6.0
Snyk has created this PR to upgrade org.junit-pioneer:junit-pioneer from 0.5.6 to 0.6.0.
See this package in NPM:
https://www.npmjs.com/package/org.junit-pioneer:junit-pioneer
See this project in Snyk:
https://app.snyk.io/org/scm-manager/project/4ac22872-f5a6-4220-bfe8-e6e5bf4c5fcb?utm_source=github&utm_medium=upgrade-pr
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 9eed838b68..f670edb32e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -405,7 +405,7 @@
org.junit-pioneer
junit-pioneer
- 0.5.6
+ 0.6.0
test
From addf59c965ada2bb668dc5b8f7266a4f39daf0c8 Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Sun, 24 May 2020 15:20:28 +0200
Subject: [PATCH 52/54] increase sonarqube timeout to 10 minutes
---
Jenkinsfile | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index 7b0e8e9f08..ac469f4c22 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -109,10 +109,10 @@ node('docker') {
// deploy java artifacts
mvn.useDeploymentRepository([
- id: 'packages.scm-manager.org',
- url: 'https://packages.scm-manager.org',
- credentialsId: 'maven.scm-manager.org',
- snapshotRepository: '/repository/snapshots/',
+ id: 'packages.scm-manager.org',
+ url: 'https://packages.scm-manager.org',
+ credentialsId: 'maven.scm-manager.org',
+ snapshotRepository: '/repository/snapshots/',
releaseRepository: '/repository/releases/',
type: 'Configurable'
])
@@ -230,7 +230,7 @@ boolean isMainBranch() {
boolean waitForQualityGateWebhookToBeCalled() {
boolean isQualityGateSucceeded = true
- timeout(time: 5, unit: 'MINUTES') { // Needed when there is no webhook for example
+ timeout(time: 10, unit: 'MINUTES') { // Needed when there is no webhook for example
def qGate = waitForQualityGate()
echo "SonarQube Quality Gate status: ${qGate.status}"
if (qGate.status != 'OK') {
From 7636f1e845383a11ed0ce5630348bc29805443e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?=
Date: Sat, 23 May 2020 19:06:02 +0200
Subject: [PATCH 53/54] Remove temp dir extension and use native junit
annotation
---
pom.xml | 12 ----------
.../sonia/scm/BasicContextProviderTest.java | 8 +++----
.../api/ModifyCommandBuilderTest.java | 9 ++++----
.../spi/ModifyWorkerHelperTest.java | 8 +++----
.../security/DefaultCipherHandlerTest.java | 8 +++----
.../sonia/scm/xml/XmlInstantAdapterTest.java | 10 ++++----
...thBasedRepositoryLocationResolverTest.java | 7 +++---
.../repository/xml/XmlRepositoryDAOTest.java | 12 +++++-----
.../java/sonia/scm/store/CopyOnWriteTest.java | 20 ++++++++--------
.../scm/store/JAXBPropertyFileAccessTest.java | 15 ++++++------
.../sonia/scm/it/AnonymousAccessITCase.java | 16 ++++---------
.../scm/ScmLogFilePropertyDefinerTest.java | 8 +++----
.../sonia/scm/lifecycle/VersionsTest.java | 18 +++++++--------
.../scm/plugin/DefaultPluginManagerTest.java | 13 ++++-------
.../plugin/PendingPluginInstallationTest.java | 10 ++++----
.../sonia/scm/plugin/PluginInstallerTest.java | 14 +++++++----
.../plugin/SmpDescriptorExtractorTest.java | 12 ++++------
.../sonia/scm/plugin/UberClassLoaderTest.java | 10 ++++----
.../group/XmlGroupV1UpdateStepTest.java | 8 +++----
.../repository/CopyMigrationStrategyTest.java | 15 ++++++------
.../DefaultMigrationStrategyDAOTest.java | 7 +++---
.../InlineMigrationStrategyTest.java | 13 +++++------
.../MigrateVerbsToPermissionRolesTest.java | 9 ++++----
.../repository/MoveMigrationStrategyTest.java | 15 ++++++------
.../repository/PublicFlagUpdateStepTest.java | 7 ++----
.../XmlRepositoryFileNameUpdateStepTest.java | 10 ++++----
.../XmlRepositoryV1UpdateStepTest.java | 23 +++++++++----------
.../security/XmlSecurityV1UpdateStepTest.java | 11 ++++-----
.../update/user/XmlUserV1UpdateStepTest.java | 8 +++----
29 files changed, 143 insertions(+), 193 deletions(-)
diff --git a/pom.xml b/pom.xml
index f670edb32e..9c02195159 100644
--- a/pom.xml
+++ b/pom.xml
@@ -152,11 +152,6 @@
junit-vintage-engine
-
- org.junit-pioneer
- junit-pioneer
-
-
org.hamcrest
hamcrest-core
@@ -402,13 +397,6 @@
test
-
- org.junit-pioneer
- junit-pioneer
- 0.6.0
- test
-
-
junit
junit
diff --git a/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java b/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java
index 18ad14b5f6..babba7dd3d 100644
--- a/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java
+++ b/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java
@@ -27,15 +27,13 @@ package sonia.scm;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path;
import java.nio.file.Paths;
import static org.assertj.core.api.Assertions.assertThat;
-@ExtendWith(TempDirectory.class)
class BasicContextProviderTest {
@Nested
@@ -68,13 +66,13 @@ class BasicContextProviderTest {
private BasicContextProvider context;
@BeforeEach
- void setUpContext(@TempDirectory.TempDir Path baseDirectory) {
+ void setUpContext(@TempDir Path baseDirectory) {
this.baseDirectory = baseDirectory;
context = new BasicContextProvider(baseDirectory.toFile(), "x.y.z", Stage.PRODUCTION);
}
@Test
- void shouldReturnAbsolutePathAsIs(@TempDirectory.TempDir Path path) {
+ void shouldReturnAbsolutePathAsIs(@TempDir Path path) {
Path absolutePath = path.toAbsolutePath();
Path resolved = context.resolve(absolutePath);
diff --git a/scm-core/src/test/java/sonia/scm/repository/api/ModifyCommandBuilderTest.java b/scm-core/src/test/java/sonia/scm/repository/api/ModifyCommandBuilderTest.java
index abbfd0a638..a374a2272c 100644
--- a/scm-core/src/test/java/sonia/scm/repository/api/ModifyCommandBuilderTest.java
+++ b/scm-core/src/test/java/sonia/scm/repository/api/ModifyCommandBuilderTest.java
@@ -21,14 +21,14 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.api;
import com.google.common.io.ByteSource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
@@ -57,7 +57,6 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
class ModifyCommandBuilderTest {
@Mock
@@ -71,7 +70,7 @@ class ModifyCommandBuilderTest {
Path workdir;
@BeforeEach
- void initWorkdir(@TempDirectory.TempDir Path temp) throws IOException {
+ void initWorkdir(@TempDir Path temp) throws IOException {
workdir = Files.createDirectory(temp.resolve("workdir"));
lenient().when(workdirProvider.createNewWorkdir()).thenReturn(workdir.toFile());
commandBuilder = new ModifyCommandBuilder(command, workdirProvider);
@@ -207,7 +206,7 @@ class ModifyCommandBuilderTest {
}
@Test
- void shouldDeleteTemporaryFiles(@TempDirectory.TempDir Path temp) throws IOException {
+ void shouldDeleteTemporaryFiles(@TempDir Path temp) throws IOException {
ArgumentCaptor nameCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor fileCaptor = ArgumentCaptor.forClass(File.class);
doNothing().when(worker).modify(nameCaptor.capture(), fileCaptor.capture());
diff --git a/scm-core/src/test/java/sonia/scm/repository/spi/ModifyWorkerHelperTest.java b/scm-core/src/test/java/sonia/scm/repository/spi/ModifyWorkerHelperTest.java
index a4fbc1770b..1d675e0743 100644
--- a/scm-core/src/test/java/sonia/scm/repository/spi/ModifyWorkerHelperTest.java
+++ b/scm-core/src/test/java/sonia/scm/repository/spi/ModifyWorkerHelperTest.java
@@ -21,12 +21,11 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.spi;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import sonia.scm.repository.Repository;
import java.io.File;
@@ -36,11 +35,10 @@ import java.nio.file.Path;
import static org.assertj.core.api.Assertions.assertThat;
-@ExtendWith(TempDirectory.class)
class ModifyWorkerHelperTest {
@Test
- void shouldKeepExecutableFlag(@TempDirectory.TempDir Path temp) throws IOException {
+ void shouldKeepExecutableFlag(@TempDir Path temp) throws IOException {
File target = createFile(temp, "executable.sh");
File newFile = createFile(temp, "other");
diff --git a/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java b/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java
index 985e8eb1a8..6f88f71597 100644
--- a/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java
+++ b/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java
@@ -27,7 +27,7 @@ package sonia.scm.security;
import com.google.common.io.Files;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
@@ -45,7 +45,7 @@ import static org.mockito.Mockito.when;
*
* @author Sebastian Sdorra
*/
-@ExtendWith({MockitoExtension.class, TempDirectory.class})
+@ExtendWith({MockitoExtension.class})
public class DefaultCipherHandlerTest {
@Mock
@@ -58,7 +58,7 @@ public class DefaultCipherHandlerTest {
* Tests loading and storing default key.
*/
@Test
- void shouldLoadAndStoreDefaultKey(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldLoadAndStoreDefaultKey(@TempDir Path tempDir) throws IOException {
File baseDirectory = tempDir.toFile();
when(context.getBaseDirectory()).thenReturn(baseDirectory);
@@ -84,7 +84,7 @@ public class DefaultCipherHandlerTest {
@Test
@SuppressWarnings("UnstableApiUsage") // is ok for unit test
- void shouldReEncodeOldFormattedDefaultKey(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldReEncodeOldFormattedDefaultKey(@TempDir Path tempDir) throws IOException {
String oldKey = "17eXopruTtX3S4dJ9KTEmbZ-vfZztw==";
String encryptedValue = "A11kQF7wytpWCkjPflxJB-zUWJ1CVKU3qhwhRFq4Pvl6XqiS9V2w-gqNktqMX6YNDw==";
String plainValue = "Marvin The Paranoid Android - RAM";
diff --git a/scm-core/src/test/java/sonia/scm/xml/XmlInstantAdapterTest.java b/scm-core/src/test/java/sonia/scm/xml/XmlInstantAdapterTest.java
index 917022c42e..3abac6c132 100644
--- a/scm-core/src/test/java/sonia/scm/xml/XmlInstantAdapterTest.java
+++ b/scm-core/src/test/java/sonia/scm/xml/XmlInstantAdapterTest.java
@@ -21,12 +21,11 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.xml;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import javax.xml.bind.JAXB;
import javax.xml.bind.annotation.XmlAccessType;
@@ -36,13 +35,12 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.nio.file.Path;
import java.time.Instant;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
-@ExtendWith(TempDirectory.class)
class XmlInstantAdapterTest {
@Test
- void shouldMarshalAndUnmarshalInstant(@TempDirectory.TempDir Path tempDirectory) {
+ void shouldMarshalAndUnmarshalInstant(@TempDir Path tempDirectory) {
Path path = tempDirectory.resolve("instant.xml");
Instant instant = Instant.now();
diff --git a/scm-dao-xml/src/test/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolverTest.java b/scm-dao-xml/src/test/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolverTest.java
index 019c4de862..7c474ea95c 100644
--- a/scm-dao-xml/src/test/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolverTest.java
+++ b/scm-dao-xml/src/test/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolverTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.xml;
import com.google.common.base.Charsets;
@@ -29,7 +29,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
@@ -52,7 +52,6 @@ import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
@MockitoSettings(strictness = Strictness.LENIENT)
class PathBasedRepositoryLocationResolverTest {
@@ -74,7 +73,7 @@ class PathBasedRepositoryLocationResolverTest {
private PathBasedRepositoryLocationResolver resolver;
@BeforeEach
- void beforeEach(@TempDirectory.TempDir Path temp) {
+ void beforeEach(@TempDir Path temp) {
this.basePath = temp;
when(contextProvider.getBaseDirectory()).thenReturn(temp.toFile());
when(contextProvider.resolve(any(Path.class))).thenAnswer(invocation -> invocation.getArgument(0));
diff --git a/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java b/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java
index c90a61d874..4b7bce2093 100644
--- a/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java
+++ b/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.repository.xml;
@@ -31,7 +31,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -61,7 +61,7 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-@ExtendWith({MockitoExtension.class, TempDirectory.class})
+@ExtendWith({MockitoExtension.class})
@MockitoSettings(strictness = Strictness.LENIENT)
class XmlRepositoryDAOTest {
@@ -76,7 +76,7 @@ class XmlRepositoryDAOTest {
private XmlRepositoryDAO dao;
@BeforeEach
- void createDAO(@TempDirectory.TempDir Path basePath) {
+ void createDAO(@TempDir Path basePath) {
when(locationResolver.create(Path.class)).thenReturn(
new RepositoryLocationResolver.RepositoryLocationResolverInstance() {
@Override
@@ -103,7 +103,7 @@ class XmlRepositoryDAOTest {
when(locationResolver.remove(anyString())).thenAnswer(invocation -> basePath.resolve(invocation.getArgument(0).toString()));
}
- private Path createMockedRepoPath(@TempDirectory.TempDir Path basePath, InvocationOnMock invocation) {
+ private Path createMockedRepoPath(@TempDir Path basePath, InvocationOnMock invocation) {
Path resolvedPath = basePath.resolve(invocation.getArgument(0).toString());
try {
Files.createDirectories(resolvedPath);
@@ -337,7 +337,7 @@ class XmlRepositoryDAOTest {
private Path repositoryPath;
@BeforeEach
- void createMetadataFileForRepository(@TempDirectory.TempDir Path basePath) throws IOException {
+ void createMetadataFileForRepository(@TempDir Path basePath) throws IOException {
repositoryPath = basePath.resolve("existing");
Files.createDirectories(repositoryPath);
diff --git a/scm-dao-xml/src/test/java/sonia/scm/store/CopyOnWriteTest.java b/scm-dao-xml/src/test/java/sonia/scm/store/CopyOnWriteTest.java
index e66fcd5b60..b2d9143655 100644
--- a/scm-dao-xml/src/test/java/sonia/scm/store/CopyOnWriteTest.java
+++ b/scm-dao-xml/src/test/java/sonia/scm/store/CopyOnWriteTest.java
@@ -21,13 +21,12 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.store;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -38,11 +37,10 @@ import java.nio.file.Paths;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static sonia.scm.store.CopyOnWrite.withTemporaryFile;
-@ExtendWith(TempDirectory.class)
class CopyOnWriteTest {
@Test
- void shouldCreateNewFile(@TempDirectory.TempDir Path tempDir) {
+ void shouldCreateNewFile(@TempDir Path tempDir) {
Path expectedFile = tempDir.resolve("toBeCreated.txt");
withTemporaryFile(
@@ -53,7 +51,7 @@ class CopyOnWriteTest {
}
@Test
- void shouldOverwriteExistingFile(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldOverwriteExistingFile(@TempDir Path tempDir) throws IOException {
Path expectedFile = tempDir.resolve("toBeOverwritten.txt");
Files.createFile(expectedFile);
@@ -65,7 +63,7 @@ class CopyOnWriteTest {
}
@Test
- void shouldFailForDirectory(@TempDirectory.TempDir Path tempDir) {
+ void shouldFailForDirectory(@TempDir Path tempDir) {
assertThrows(IllegalArgumentException.class,
() -> withTemporaryFile(
file -> new FileOutputStream(file.toFile()).write("should not be written".getBytes()),
@@ -82,7 +80,7 @@ class CopyOnWriteTest {
}
@Test
- void shouldKeepBackupIfTemporaryFileCouldNotBeWritten(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldKeepBackupIfTemporaryFileCouldNotBeWritten(@TempDir Path tempDir) throws IOException {
Path unchangedOriginalFile = tempDir.resolve("notToBeDeleted.txt");
new FileOutputStream(unchangedOriginalFile.toFile()).write("this should be kept".getBytes());
@@ -98,7 +96,7 @@ class CopyOnWriteTest {
}
@Test
- void shouldNotWrapRuntimeExceptions(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldNotWrapRuntimeExceptions(@TempDir Path tempDir) throws IOException {
Path someFile = tempDir.resolve("something.txt");
assertThrows(
@@ -111,7 +109,7 @@ class CopyOnWriteTest {
}
@Test
- void shouldKeepBackupIfTemporaryFileIsMissing(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldKeepBackupIfTemporaryFileIsMissing(@TempDir Path tempDir) throws IOException {
Path backedUpFile = tempDir.resolve("notToBeDeleted.txt");
new FileOutputStream(backedUpFile.toFile()).write("this should be kept".getBytes());
@@ -125,7 +123,7 @@ class CopyOnWriteTest {
}
@Test
- void shouldDeleteExistingFile(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldDeleteExistingFile(@TempDir Path tempDir) throws IOException {
Path expectedFile = tempDir.resolve("toBeReplaced.txt");
new FileOutputStream(expectedFile.toFile()).write("this should be removed".getBytes());
diff --git a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBPropertyFileAccessTest.java b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBPropertyFileAccessTest.java
index bc498a9e04..0c6f4ac982 100644
--- a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBPropertyFileAccessTest.java
+++ b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBPropertyFileAccessTest.java
@@ -21,14 +21,14 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.store;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
@@ -48,7 +48,6 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.lenient;
-@ExtendWith(TempDirectory.class)
@ExtendWith(MockitoExtension.class)
class JAXBPropertyFileAccessTest {
@@ -63,7 +62,7 @@ class JAXBPropertyFileAccessTest {
JAXBPropertyFileAccess fileAccess;
@BeforeEach
- void initTempDir(@TempDirectory.TempDir Path tempDir) {
+ void initTempDir(@TempDir Path tempDir) {
lenient().when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
lenient().when(contextProvider.resolve(any())).thenAnswer(invocation -> tempDir.resolve(invocation.getArgument(0).toString()));
@@ -99,7 +98,7 @@ class JAXBPropertyFileAccessTest {
}
@Test
- void shouldMoveStoreFileToRepositoryBasedLocation(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldMoveStoreFileToRepositoryBasedLocation(@TempDir Path tempDir) throws IOException {
createV1StoreFile(tempDir, "myStore.xml");
fileAccess.forStoreName(STORE_NAME).moveAsRepositoryStore(Paths.get("myStore.xml"), REPOSITORY_ID);
@@ -108,7 +107,7 @@ class JAXBPropertyFileAccessTest {
}
@Test
- void shouldMoveAllStoreFilesToRepositoryBasedLocations(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldMoveAllStoreFilesToRepositoryBasedLocations(@TempDir Path tempDir) throws IOException {
locationResolver.forClass(Path.class).createLocation("repoId2");
createV1StoreFile(tempDir, REPOSITORY_ID + ".xml");
@@ -122,7 +121,7 @@ class JAXBPropertyFileAccessTest {
}
}
- private void createV1StoreFile(@TempDirectory.TempDir Path tempDir, String name) throws IOException {
+ private void createV1StoreFile(@TempDir Path tempDir, String name) throws IOException {
Path v1Dir = tempDir.resolve("var").resolve("data").resolve(STORE_NAME);
IOUtil.mkdirs(v1Dir.toFile());
Files.createFile(v1Dir.resolve(name));
@@ -132,7 +131,7 @@ class JAXBPropertyFileAccessTest {
class ForMissingRepository {
@Test
- void shouldIgnoreStoreFile(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldIgnoreStoreFile(@TempDir Path tempDir) throws IOException {
createV1StoreFile(tempDir, "myStore.xml");
fileAccess.forStoreName(STORE_NAME).moveAsRepositoryStore(Paths.get("myStore.xml"), REPOSITORY_ID);
diff --git a/scm-it/src/test/java/sonia/scm/it/AnonymousAccessITCase.java b/scm-it/src/test/java/sonia/scm/it/AnonymousAccessITCase.java
index afda4475fd..0994ca0dcb 100644
--- a/scm-it/src/test/java/sonia/scm/it/AnonymousAccessITCase.java
+++ b/scm-it/src/test/java/sonia/scm/it/AnonymousAccessITCase.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.it;
import io.restassured.RestAssured;
@@ -31,14 +31,9 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.io.TempDir;
import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;
-import org.junit.jupiter.params.provider.MethodSource;
-import org.junitpioneer.jupiter.TempDirectory;
import sonia.scm.it.utils.RepositoryUtil;
import sonia.scm.it.utils.RestUtil;
import sonia.scm.it.utils.ScmRequests;
@@ -50,12 +45,10 @@ import sonia.scm.repository.client.api.RepositoryClientException;
import javax.json.Json;
import javax.json.JsonArray;
import javax.servlet.http.HttpServletResponse;
-
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Objects;
-import java.util.stream.Stream;
import static java.util.Collections.emptyMap;
import static org.junit.Assert.assertEquals;
@@ -65,7 +58,6 @@ import static sonia.scm.it.utils.TestData.USER_ANONYMOUS;
import static sonia.scm.it.utils.TestData.WRITE;
import static sonia.scm.it.utils.TestData.getDefaultRepositoryUrl;
-@ExtendWith(TempDirectory.class)
class AnonymousAccessITCase {
@Test
@@ -118,7 +110,7 @@ class AnonymousAccessITCase {
@ParameterizedTest
@ArgumentsSource(ScmTypes.class)
- void shouldNotCloneRepository(String type, @TempDirectory.TempDir Path temporaryFolder) {
+ void shouldNotCloneRepository(String type, @TempDir Path temporaryFolder) {
assertThrows(RepositoryClientException.class, () -> RepositoryUtil.createAnonymousRepositoryClient(type, Files.createDirectories(temporaryFolder).toFile()));
}
}
@@ -142,7 +134,7 @@ class AnonymousAccessITCase {
@ParameterizedTest
@ArgumentsSource(ScmTypes.class)
- void shouldCloneRepository(String type, @TempDirectory.TempDir Path temporaryFolder) throws IOException {
+ void shouldCloneRepository(String type, @TempDir Path temporaryFolder) throws IOException {
RepositoryClient client = RepositoryUtil.createAnonymousRepositoryClient(type, Files.createDirectories(temporaryFolder).toFile());
assertEquals(1, Objects.requireNonNull(client.getWorkingCopy().list()).length);
}
diff --git a/scm-webapp/src/test/java/sonia/scm/ScmLogFilePropertyDefinerTest.java b/scm-webapp/src/test/java/sonia/scm/ScmLogFilePropertyDefinerTest.java
index 6372c75aa1..4ad33b9697 100644
--- a/scm-webapp/src/test/java/sonia/scm/ScmLogFilePropertyDefinerTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/ScmLogFilePropertyDefinerTest.java
@@ -26,7 +26,7 @@ package sonia.scm;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -36,14 +36,14 @@ import java.util.Properties;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
-@ExtendWith({MockitoExtension.class, TempDirectory.class})
+@ExtendWith({MockitoExtension.class})
class ScmLogFilePropertyDefinerTest {
@Mock
private SCMContextProvider context;
@Test
- void shouldReturnPath(@TempDirectory.TempDir Path tempDir) {
+ void shouldReturnPath(@TempDir Path tempDir) {
when(context.getBaseDirectory()).thenReturn(tempDir.toFile());
ScmLogFilePropertyDefiner definer = builder().create();
@@ -52,7 +52,7 @@ class ScmLogFilePropertyDefinerTest {
}
@Test
- void shouldReturnOsxPath(@TempDirectory.TempDir Path tempDir) {
+ void shouldReturnOsxPath(@TempDir Path tempDir) {
ScmLogFilePropertyDefiner definer = builder()
.withOs("Mac OS X")
.withUserHome(tempDir.toAbsolutePath().toString())
diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/VersionsTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/VersionsTest.java
index a59de4fa25..c865d5e5cb 100644
--- a/scm-webapp/src/test/java/sonia/scm/lifecycle/VersionsTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/VersionsTest.java
@@ -21,12 +21,12 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.lifecycle;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -41,7 +41,7 @@ import java.nio.file.Paths;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.doReturn;
-@ExtendWith({MockitoExtension.class, TempDirectory.class})
+@ExtendWith({MockitoExtension.class})
class VersionsTest {
@Mock
@@ -51,7 +51,7 @@ class VersionsTest {
private Versions versions;
@Test
- void shouldReturnTrueForVersionsPreviousTo160(@TempDirectory.TempDir Path directory) throws IOException {
+ void shouldReturnTrueForVersionsPreviousTo160(@TempDir Path directory) throws IOException {
setVersion(directory, "1.59");
assertThat(versions.isPreviousVersionTooOld()).isTrue();
@@ -60,19 +60,19 @@ class VersionsTest {
}
@Test
- void shouldReturnFalseForVersion160(@TempDirectory.TempDir Path directory) throws IOException {
+ void shouldReturnFalseForVersion160(@TempDir Path directory) throws IOException {
setVersion(directory, "1.60");
assertThat(versions.isPreviousVersionTooOld()).isFalse();
}
@Test
- void shouldNotFailIfVersionContainsLineBreak(@TempDirectory.TempDir Path directory) throws IOException {
+ void shouldNotFailIfVersionContainsLineBreak(@TempDir Path directory) throws IOException {
setVersion(directory, "1.59\n");
assertThat(versions.isPreviousVersionTooOld()).isTrue();
}
@Test
- void shouldReturnFalseForVersionsNewerAs160(@TempDirectory.TempDir Path directory) throws IOException {
+ void shouldReturnFalseForVersionsNewerAs160(@TempDir Path directory) throws IOException {
setVersion(directory, "1.61");
assertThat(versions.isPreviousVersionTooOld()).isFalse();
@@ -81,13 +81,13 @@ class VersionsTest {
}
@Test
- void shouldReturnFalseForNonExistingVersionFile(@TempDirectory.TempDir Path directory) {
+ void shouldReturnFalseForNonExistingVersionFile(@TempDir Path directory) {
setVersionFile(directory.resolve("version.txt"));
assertThat(versions.isPreviousVersionTooOld()).isFalse();
}
@Test
- void shouldWriteNewVersion(@TempDirectory.TempDir Path directory) {
+ void shouldWriteNewVersion(@TempDir Path directory) {
Path config = directory.resolve("config");
doReturn(config).when(contextProvider).resolve(Paths.get("config"));
doReturn("2.0.0").when(contextProvider).getVersion();
diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java
index da7fce6527..afb7c4eea1 100644
--- a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java
@@ -34,7 +34,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
@@ -48,7 +48,6 @@ import sonia.scm.lifecycle.Restarter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -56,7 +55,6 @@ import static java.util.Arrays.asList;
import static java.util.Collections.singleton;
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.in;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doNothing;
@@ -72,7 +70,6 @@ import static sonia.scm.plugin.PluginTestHelper.createAvailable;
import static sonia.scm.plugin.PluginTestHelper.createInstalled;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
class DefaultPluginManagerTest {
@Mock
@@ -372,7 +369,7 @@ class DefaultPluginManagerTest {
}
@Test
- void shouldCreateUninstallFile(@TempDirectory.TempDir Path temp) {
+ void shouldCreateUninstallFile(@TempDir Path temp) {
InstalledPlugin mailPlugin = createInstalled("scm-mail-plugin");
when(mailPlugin.getDirectory()).thenReturn(temp);
@@ -384,7 +381,7 @@ class DefaultPluginManagerTest {
}
@Test
- void shouldMarkPluginForUninstall(@TempDirectory.TempDir Path temp) {
+ void shouldMarkPluginForUninstall(@TempDir Path temp) {
InstalledPlugin mailPlugin = createInstalled("scm-mail-plugin");
when(mailPlugin.getDirectory()).thenReturn(temp);
@@ -414,7 +411,7 @@ class DefaultPluginManagerTest {
}
@Test
- void shouldThrowExceptionWhenUninstallingCorePlugin(@TempDirectory.TempDir Path temp) {
+ void shouldThrowExceptionWhenUninstallingCorePlugin(@TempDir Path temp) {
InstalledPlugin mailPlugin = createInstalled("scm-mail-plugin");
when(mailPlugin.getDirectory()).thenReturn(temp);
when(mailPlugin.isCore()).thenReturn(true);
@@ -484,7 +481,7 @@ class DefaultPluginManagerTest {
}
@Test
- void shouldUndoPendingInstallations(@TempDirectory.TempDir Path temp) throws IOException {
+ void shouldUndoPendingInstallations(@TempDir Path temp) throws IOException {
InstalledPlugin mailPlugin = createInstalled("scm-ssh-plugin");
Path mailPluginPath = temp.resolve("scm-mail-plugin");
Files.createDirectories(mailPluginPath);
diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PendingPluginInstallationTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PendingPluginInstallationTest.java
index ba275bc820..b668870488 100644
--- a/scm-webapp/src/test/java/sonia/scm/plugin/PendingPluginInstallationTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/plugin/PendingPluginInstallationTest.java
@@ -21,12 +21,12 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.plugin;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -39,14 +39,14 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.when;
-@ExtendWith({MockitoExtension.class, TempDirectory.class})
+@ExtendWith({MockitoExtension.class})
class PendingPluginInstallationTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private AvailablePlugin plugin;
@Test
- void shouldDeleteFileOnCancel(@TempDirectory.TempDir Path directory) throws IOException {
+ void shouldDeleteFileOnCancel(@TempDir Path directory) throws IOException {
Path file = directory.resolve("file");
Files.write(file, "42".getBytes());
@@ -59,7 +59,7 @@ class PendingPluginInstallationTest {
}
@Test
- void shouldThrowExceptionIfCancelFailed(@TempDirectory.TempDir Path directory) {
+ void shouldThrowExceptionIfCancelFailed(@TempDir Path directory) {
Path file = directory.resolve("file");
when(plugin.getDescriptor().getInformation().getName()).thenReturn("scm-awesome-plugin");
diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallerTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallerTest.java
index 14bb26f87c..bccbb67f3c 100644
--- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallerTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginInstallerTest.java
@@ -21,13 +21,13 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.plugin;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Answers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
@@ -45,9 +45,13 @@ import java.util.Collections;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.*;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.lenient;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
-@ExtendWith({MockitoExtension.class, TempDirectory.class})
+@ExtendWith({MockitoExtension.class})
class PluginInstallerTest {
@Mock
@@ -65,7 +69,7 @@ class PluginInstallerTest {
private Path directory;
@BeforeEach
- void setUpContext(@TempDirectory.TempDir Path directory) throws IOException {
+ void setUpContext(@TempDir Path directory) throws IOException {
this.directory = directory;
lenient().when(context.resolve(any())).then(ic -> {
Path arg = ic.getArgument(0);
diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/SmpDescriptorExtractorTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/SmpDescriptorExtractorTest.java
index eea0a2f681..dd8dad5eca 100644
--- a/scm-webapp/src/test/java/sonia/scm/plugin/SmpDescriptorExtractorTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/plugin/SmpDescriptorExtractorTest.java
@@ -21,13 +21,12 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.plugin;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import java.io.IOException;
import java.nio.file.Files;
@@ -38,7 +37,6 @@ import java.util.zip.ZipOutputStream;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.junit.jupiter.api.Assertions.assertThrows;
-@ExtendWith(TempDirectory.class)
class SmpDescriptorExtractorTest {
private static final String PLUGIN_XML = "\n" +
@@ -66,7 +64,7 @@ class SmpDescriptorExtractorTest {
"\n";
@Test
- void shouldExtractPluginXml(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldExtractPluginXml(@TempDir Path tempDir) throws IOException {
Path pluginFile = createZipFile(tempDir, "META-INF/scm/plugin.xml", PLUGIN_XML);
InstalledPluginDescriptor installedPluginDescriptor = new SmpDescriptorExtractor().extractPluginDescriptor(pluginFile);
@@ -75,14 +73,14 @@ class SmpDescriptorExtractorTest {
}
@Test
- void shouldFailWithoutPluginXml(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldFailWithoutPluginXml(@TempDir Path tempDir) throws IOException {
Path pluginFile = createZipFile(tempDir, "META-INF/wrong/plugin.xml", PLUGIN_XML);
assertThrows(IOException.class, () -> new SmpDescriptorExtractor().extractPluginDescriptor(pluginFile));
}
@Test
- void shouldFailWithIllegalPluginXml(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldFailWithIllegalPluginXml(@TempDir Path tempDir) throws IOException {
Path pluginFile = createZipFile(tempDir, "META-INF/scm/plugin.xml", "content ");
assertThrows(IOException.class, () -> new SmpDescriptorExtractor().extractPluginDescriptor(pluginFile));
diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/UberClassLoaderTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/UberClassLoaderTest.java
index 59b8432882..375304e74a 100644
--- a/scm-webapp/src/test/java/sonia/scm/plugin/UberClassLoaderTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/plugin/UberClassLoaderTest.java
@@ -21,14 +21,13 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.plugin;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.Resources;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import java.io.IOException;
import java.net.URL;
@@ -43,13 +42,12 @@ import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
-@ExtendWith(TempDirectory.class)
class UberClassLoaderTest {
private final URLClassLoader parentClassLoader = new URLClassLoader(new URL[0]);
@Test
- void shouldOnlyUseClassloaderOnce(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldOnlyUseClassloaderOnce(@TempDir Path tempDir) throws IOException {
ClassLoader mailClassLoader = createClassLoader(tempDir, "plugin.txt", "mail");
ClassLoader reviewClassLoader = createClassLoader(mailClassLoader, tempDir, "plugin.txt", "review");
@@ -61,7 +59,7 @@ class UberClassLoaderTest {
}
@Test
- void shouldReturnResourceFromEachPluginClassLoader(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldReturnResourceFromEachPluginClassLoader(@TempDir Path tempDir) throws IOException {
ClassLoader mailClassLoader = createClassLoader(tempDir, "scm.txt", "mail");
ClassLoader reviewClassLoader = createClassLoader(tempDir, "scm.txt", "review");
diff --git a/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java
index 95e0dc12bf..434dc075d5 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java
@@ -21,14 +21,14 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.group;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
@@ -39,7 +39,6 @@ import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
import sonia.scm.update.UpdateStepTestUtil;
import sonia.scm.update.V1Properties;
-import sonia.scm.update.V1Property;
import javax.xml.bind.JAXBException;
import java.io.IOException;
@@ -55,7 +54,6 @@ import static org.mockito.Mockito.verify;
import static sonia.scm.store.InMemoryConfigurationEntryStoreFactory.create;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
class XmlGroupV1UpdateStepTest {
@Mock
@@ -72,7 +70,7 @@ class XmlGroupV1UpdateStepTest {
@BeforeEach
- void mockScmHome(@TempDirectory.TempDir Path tempDir) {
+ void mockScmHome(@TempDir Path tempDir) {
testUtil = new UpdateStepTestUtil(tempDir);
updateStep = new XmlGroupV1UpdateStep(testUtil.getContextProvider(), groupDAO, storeFactory);
}
diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java
index 267b2876da..1766c288f9 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java
@@ -21,13 +21,13 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.repository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
@@ -44,7 +44,6 @@ import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-@ExtendWith(TempDirectory.class)
@ExtendWith(MockitoExtension.class)
class CopyMigrationStrategyTest {
@@ -54,30 +53,30 @@ class CopyMigrationStrategyTest {
RepositoryLocationResolver locationResolver;
@BeforeEach
- void mockContextProvider(@TempDirectory.TempDir Path tempDir) {
+ void mockContextProvider(@TempDir Path tempDir) {
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
}
@BeforeEach
- void createV1Home(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void createV1Home(@TempDir Path tempDir) throws IOException {
V1RepositoryFileSystem.createV1Home(tempDir);
}
@BeforeEach
- void mockLocationResolver(@TempDirectory.TempDir Path tempDir) {
+ void mockLocationResolver(@TempDir Path tempDir) {
RepositoryLocationResolver.RepositoryLocationResolverInstance instanceMock = mock(RepositoryLocationResolver.RepositoryLocationResolverInstance.class);
when(locationResolver.forClass(Path.class)).thenReturn(instanceMock);
when(instanceMock.createLocation(anyString())).thenAnswer(invocation -> tempDir.resolve((String) invocation.getArgument(0)));
}
@Test
- void shouldUseStandardDirectory(@TempDirectory.TempDir Path tempDir) {
+ void shouldUseStandardDirectory(@TempDir Path tempDir) {
Path target = new CopyMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get();
assertThat(target).isEqualTo(tempDir.resolve("b4f-a9f0-49f7-ad1f-37d3aae1c55f"));
}
@Test
- void shouldCopyDataDirectory(@TempDirectory.TempDir Path tempDir) {
+ void shouldCopyDataDirectory(@TempDir Path tempDir) {
Path target = new CopyMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get();
assertThat(target.resolve("data")).exists();
Path originalDataDir = tempDir
diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/DefaultMigrationStrategyDAOTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/DefaultMigrationStrategyDAOTest.java
index f9596d3a67..1bbba6317e 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/repository/DefaultMigrationStrategyDAOTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/repository/DefaultMigrationStrategyDAOTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.repository;
import org.assertj.core.api.Assertions;
@@ -29,7 +29,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
@@ -43,7 +43,6 @@ import static org.mockito.Mockito.when;
import static sonia.scm.update.repository.MigrationStrategy.INLINE;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
class DefaultMigrationStrategyDAOTest {
@Mock
@@ -52,7 +51,7 @@ class DefaultMigrationStrategyDAOTest {
private ConfigurationStoreFactory storeFactory;
@BeforeEach
- void initStore(@TempDirectory.TempDir Path tempDir) {
+ void initStore(@TempDir Path tempDir) {
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
storeFactory = new JAXBConfigurationStoreFactory(contextProvider, null);
}
diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java
index 2d4a1ba03f..d236859af9 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java
@@ -21,13 +21,13 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.repository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
@@ -41,7 +41,6 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-@ExtendWith(TempDirectory.class)
@ExtendWith(MockitoExtension.class)
class InlineMigrationStrategyTest {
@@ -53,25 +52,25 @@ class InlineMigrationStrategyTest {
RepositoryLocationResolver.RepositoryLocationResolverInstance locationResolverInstance;
@BeforeEach
- void mockContextProvider(@TempDirectory.TempDir Path tempDir) {
+ void mockContextProvider(@TempDir Path tempDir) {
when(locationResolver.forClass(Path.class)).thenReturn(locationResolverInstance);
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
}
@BeforeEach
- void createV1Home(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void createV1Home(@TempDir Path tempDir) throws IOException {
V1RepositoryFileSystem.createV1Home(tempDir);
}
@Test
- void shouldUseExistingDirectory(@TempDirectory.TempDir Path tempDir) {
+ void shouldUseExistingDirectory(@TempDir Path tempDir) {
Path target = new InlineMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get();
assertThat(target).isEqualTo(resolveOldDirectory(tempDir));
verify(locationResolverInstance).setLocation("b4f-a9f0-49f7-ad1f-37d3aae1c55f", target);
}
@Test
- void shouldMoveDataDirectory(@TempDirectory.TempDir Path tempDir) {
+ void shouldMoveDataDirectory(@TempDir Path tempDir) {
new InlineMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git");
assertThat(resolveOldDirectory(tempDir).resolve("data")).exists();
}
diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/MigrateVerbsToPermissionRolesTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/MigrateVerbsToPermissionRolesTest.java
index 81dd03b4ed..72cabf5d8b 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/repository/MigrateVerbsToPermissionRolesTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/repository/MigrateVerbsToPermissionRolesTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.repository;
import com.google.common.io.Resources;
@@ -29,7 +29,7 @@ import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -51,7 +51,6 @@ import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
class MigrateVerbsToPermissionRolesTest {
private static final String EXISTING_REPOSITORY_ID = "id";
@@ -65,7 +64,7 @@ class MigrateVerbsToPermissionRolesTest {
private MigrateVerbsToPermissionRoles migration;
@BeforeEach
- void init(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void init(@TempDir Path tempDir) throws IOException {
URL metadataUrl = Resources.getResource("sonia/scm/update/repository/metadataWithoutRoles.xml");
Files.copy(metadataUrl.openStream(), tempDir.resolve("metadata.xml"));
doAnswer(invocation -> {
@@ -76,7 +75,7 @@ class MigrateVerbsToPermissionRolesTest {
}
@Test
- void shouldUpdateToRolesIfPossible(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldUpdateToRolesIfPossible(@TempDir Path tempDir) throws IOException {
migration.doUpdate();
List newMetadata = Files.readAllLines(tempDir.resolve("metadata.xml"));
diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java
index 02beffed00..658360d234 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java
@@ -21,13 +21,13 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.repository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
@@ -41,7 +41,6 @@ import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-@ExtendWith(TempDirectory.class)
@ExtendWith(MockitoExtension.class)
class MoveMigrationStrategyTest {
@@ -51,30 +50,30 @@ class MoveMigrationStrategyTest {
RepositoryLocationResolver locationResolver;
@BeforeEach
- void mockContextProvider(@TempDirectory.TempDir Path tempDir) {
+ void mockContextProvider(@TempDir Path tempDir) {
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
}
@BeforeEach
- void createV1Home(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void createV1Home(@TempDir Path tempDir) throws IOException {
V1RepositoryFileSystem.createV1Home(tempDir);
}
@BeforeEach
- void mockLocationResolver(@TempDirectory.TempDir Path tempDir) {
+ void mockLocationResolver(@TempDir Path tempDir) {
RepositoryLocationResolver.RepositoryLocationResolverInstance instanceMock = mock(RepositoryLocationResolver.RepositoryLocationResolverInstance.class);
when(locationResolver.forClass(Path.class)).thenReturn(instanceMock);
when(instanceMock.createLocation(anyString())).thenAnswer(invocation -> tempDir.resolve((String) invocation.getArgument(0)));
}
@Test
- void shouldUseStandardDirectory(@TempDirectory.TempDir Path tempDir) {
+ void shouldUseStandardDirectory(@TempDir Path tempDir) {
Path target = new MoveMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get();
assertThat(target).isEqualTo(tempDir.resolve("b4f-a9f0-49f7-ad1f-37d3aae1c55f"));
}
@Test
- void shouldMoveDataDirectory(@TempDirectory.TempDir Path tempDir) {
+ void shouldMoveDataDirectory(@TempDir Path tempDir) {
Path target = new MoveMigrationStrategy(contextProvider, locationResolver).migrate("b4f-a9f0-49f7-ad1f-37d3aae1c55f", "some/more/directories/than/one", "git").get();
assertThat(target.resolve("data")).exists();
Path originalDataDir = tempDir
diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/PublicFlagUpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/PublicFlagUpdateStepTest.java
index 9d7c4333fe..54c5460c6e 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/repository/PublicFlagUpdateStepTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/repository/PublicFlagUpdateStepTest.java
@@ -21,13 +21,13 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.repository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
@@ -35,7 +35,6 @@ import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContext;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryPermission;
-import sonia.scm.repository.RepositoryRolePermissions;
import sonia.scm.repository.RepositoryTestData;
import sonia.scm.repository.xml.XmlRepositoryDAO;
import sonia.scm.update.UpdateStepTestUtil;
@@ -49,7 +48,6 @@ import java.nio.file.Path;
import java.util.Collections;
import static org.assertj.core.api.Assertions.assertThat;
-import static org.junitpioneer.jupiter.TempDirectory.TempDir;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
@@ -58,7 +56,6 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
class PublicFlagUpdateStepTest {
@Mock
diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java
index 7e6d912336..3475fffac0 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java
@@ -21,14 +21,13 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.repository;
import com.google.common.io.Resources;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import sonia.scm.SCMContextProvider;
import sonia.scm.repository.xml.PathBasedRepositoryLocationResolver;
import sonia.scm.repository.xml.XmlRepositoryDAO;
@@ -43,19 +42,18 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-@ExtendWith(TempDirectory.class)
class XmlRepositoryFileNameUpdateStepTest {
SCMContextProvider contextProvider = mock(SCMContextProvider.class);
XmlRepositoryDAO repositoryDAO = mock(XmlRepositoryDAO.class);
@BeforeEach
- void mockScmHome(@TempDirectory.TempDir Path tempDir) {
+ void mockScmHome(@TempDir Path tempDir) {
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
}
@Test
- void shouldCopyRepositoriesFileToRepositoryPathsFile(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldCopyRepositoriesFileToRepositoryPathsFile(@TempDir Path tempDir) throws IOException {
XmlRepositoryFileNameUpdateStep updateStep = new XmlRepositoryFileNameUpdateStep(contextProvider, repositoryDAO);
URL url = Resources.getResource("sonia/scm/update/repository/formerV2RepositoryFile.xml");
Path configDir = tempDir.resolve("config");
diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java
index d9ea7d5766..6b0d2176f7 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.repository;
import com.google.common.io.Resources;
@@ -30,7 +30,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
@@ -63,7 +63,6 @@ import static org.mockito.Mockito.when;
import static sonia.scm.update.repository.MigrationStrategy.MOVE;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
class XmlRepositoryV1UpdateStepTest {
Injector injectorMock = MigrationStrategyMock.init();
@@ -85,7 +84,7 @@ class XmlRepositoryV1UpdateStepTest {
XmlRepositoryV1UpdateStep updateStep;
@BeforeEach
- void createUpdateStepFromMocks(@TempDirectory.TempDir Path tempDir) {
+ void createUpdateStepFromMocks(@TempDir Path tempDir) {
testUtil = new UpdateStepTestUtil(tempDir);
updateStep = new XmlRepositoryV1UpdateStep(
testUtil.getContextProvider(),
@@ -100,7 +99,7 @@ class XmlRepositoryV1UpdateStepTest {
class WithExistingDatabase {
@BeforeEach
- void createV1Home(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void createV1Home(@TempDir Path tempDir) throws IOException {
V1RepositoryFileSystem.createV1Home(tempDir);
}
@@ -165,7 +164,7 @@ class XmlRepositoryV1UpdateStepTest {
}
@Test
- void shouldUseDirectoryFromStrategy(@TempDirectory.TempDir Path tempDir) throws JAXBException {
+ void shouldUseDirectoryFromStrategy(@TempDir Path tempDir) throws JAXBException {
Path targetDir = tempDir.resolve("someDir");
MigrationStrategy.Instance strategyMock = injectorMock.getInstance(MoveMigrationStrategy.class);
when(strategyMock.migrate("454972da-faf9-4437-b682-dc4a4e0aa8eb", "simple", "git")).thenReturn(of(targetDir));
@@ -195,7 +194,7 @@ class XmlRepositoryV1UpdateStepTest {
}
@Test
- void shouldBackupOldRepositoryDatabaseFile(@TempDirectory.TempDir Path tempDir) throws JAXBException {
+ void shouldBackupOldRepositoryDatabaseFile(@TempDir Path tempDir) throws JAXBException {
updateStep.doUpdate();
assertThat(tempDir.resolve("config").resolve("repositories.xml")).doesNotExist();
@@ -209,14 +208,14 @@ class XmlRepositoryV1UpdateStepTest {
}
@Test
- void shouldNotFailIfFormerV2DatabaseExists(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException {
+ void shouldNotFailIfFormerV2DatabaseExists(@TempDir Path tempDir) throws JAXBException, IOException {
createFormerV2RepositoriesFile(tempDir);
updateStep.doUpdate();
}
@Test
- void shouldNotBackupFormerV2DatabaseFile(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException {
+ void shouldNotBackupFormerV2DatabaseFile(@TempDir Path tempDir) throws JAXBException, IOException {
createFormerV2RepositoriesFile(tempDir);
updateStep.doUpdate();
@@ -226,14 +225,14 @@ class XmlRepositoryV1UpdateStepTest {
}
@Test
- void shouldGetNoMissingStrategiesWithFormerV2DatabaseFile(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldGetNoMissingStrategiesWithFormerV2DatabaseFile(@TempDir Path tempDir) throws IOException {
createFormerV2RepositoriesFile(tempDir);
assertThat(updateStep.getRepositoriesWithoutMigrationStrategies()).isEmpty();
}
@Test
- void shouldFindMissingStrategies(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void shouldFindMissingStrategies(@TempDir Path tempDir) throws IOException {
V1RepositoryFileSystem.createV1Home(tempDir);
assertThat(updateStep.getRepositoriesWithoutMigrationStrategies())
@@ -244,7 +243,7 @@ class XmlRepositoryV1UpdateStepTest {
"454972da-faf9-4437-b682-dc4a4e0aa8eb");
}
- private void createFormerV2RepositoriesFile(@TempDirectory.TempDir Path tempDir) throws IOException {
+ private void createFormerV2RepositoriesFile(@TempDir Path tempDir) throws IOException {
URL url = Resources.getResource("sonia/scm/update/repository/formerV2RepositoryFile.xml");
Path configDir = tempDir.resolve("config");
Files.createDirectories(configDir);
diff --git a/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java
index aa1a19df7d..559b181199 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.security;
import com.google.common.io.Resources;
@@ -29,7 +29,7 @@ import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
@@ -50,7 +50,6 @@ import static org.mockito.Mockito.when;
import static sonia.scm.store.InMemoryConfigurationEntryStoreFactory.create;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
class XmlSecurityV1UpdateStepTest {
@Mock
@@ -60,7 +59,7 @@ class XmlSecurityV1UpdateStepTest {
ConfigurationEntryStore assignedPermissionStore;
@BeforeEach
- void mockScmHome(@TempDirectory.TempDir Path tempDir) {
+ void mockScmHome(@TempDir Path tempDir) {
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile());
InMemoryConfigurationEntryStoreFactory inMemoryConfigurationEntryStoreFactory = create();
assignedPermissionStore = inMemoryConfigurationEntryStoreFactory.get("security");
@@ -71,7 +70,7 @@ class XmlSecurityV1UpdateStepTest {
class WithExistingDatabase {
@BeforeEach
- void createConfigV1XML(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void createConfigV1XML(@TempDir Path tempDir) throws IOException {
Path configDir = tempDir.resolve("config");
Files.createDirectories(configDir);
copyTestDatabaseFile(configDir, "config.xml");
@@ -109,7 +108,7 @@ class XmlSecurityV1UpdateStepTest {
class WithExistingSecurityXml {
@BeforeEach
- void createSecurityV1XML(@TempDirectory.TempDir Path tempDir) throws IOException {
+ void createSecurityV1XML(@TempDir Path tempDir) throws IOException {
Path configDir = tempDir.resolve("config");
Files.createDirectories(configDir);
copyTestDatabaseFile(configDir, "securityV1.xml");
diff --git a/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java
index 98ab3dfadd..da9e3ccb7d 100644
--- a/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java
+++ b/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java
@@ -21,14 +21,14 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-
+
package sonia.scm.update.user;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
-import org.junitpioneer.jupiter.TempDirectory;
+import org.junit.jupiter.api.io.TempDir;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
@@ -38,7 +38,6 @@ import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
import sonia.scm.update.UpdateStepTestUtil;
import sonia.scm.update.V1Properties;
-import sonia.scm.update.V1Property;
import sonia.scm.user.User;
import sonia.scm.user.xml.XmlUserDAO;
@@ -55,7 +54,6 @@ import static org.mockito.Mockito.verify;
import static sonia.scm.store.InMemoryConfigurationEntryStoreFactory.create;
@ExtendWith(MockitoExtension.class)
-@ExtendWith(TempDirectory.class)
class XmlUserV1UpdateStepTest {
@Mock
@@ -71,7 +69,7 @@ class XmlUserV1UpdateStepTest {
private UpdateStepTestUtil testUtil;
@BeforeEach
- void mockScmHome(@TempDirectory.TempDir Path tempDir) {
+ void mockScmHome(@TempDir Path tempDir) {
testUtil = new UpdateStepTestUtil(tempDir);
updateStep = new XmlUserV1UpdateStep(testUtil.getContextProvider(), userDAO, storeFactory);
}
From 906ba78b2237f4a93ec1f62cdfff991e3c3e4c89 Mon Sep 17 00:00:00 2001
From: Sebastian Sdorra
Date: Mon, 25 May 2020 06:57:04 +0200
Subject: [PATCH 54/54] fix wrong ci url
---
pom.xml | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 03c52b9fef..243a5df816 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,6 @@
https://github.com/scm-manager/scm-manager
-
MIT License
@@ -82,7 +81,7 @@
Jenkins
- https://scm-manager.ci.cloudbees.com/
+ https://oss.cloudogu.com/jenkins/