Fix bugs in svn and source tree for folders with a % in the name (#1818)

* Update svnkit to 1.10.3-scm1 to fix handling of path with % in the name
* Fix source tree and breadcrumb navigation for folders with a % in the name
This commit is contained in:
Sebastian Sdorra
2021-10-04 11:19:25 +02:00
committed by GitHub
parent dbdf814d23
commit 1318f40e6d
5 changed files with 33 additions and 6 deletions

View File

@@ -0,0 +1,2 @@
- type: Fixed
description: Bugs in svn and source tree for folders with a % in the name ([#1817](https://github.com/scm-manager/scm-manager/issues/1817) and [#1818](https://github.com/scm-manager/scm-manager/pull/1818))

View File

@@ -27,7 +27,7 @@ plugins {
id 'org.scm-manager.smp' version '0.8.5'
}
def svnkitVersion = '1.10.1-scm2'
def svnkitVersion = '1.10.3-scm1'
dependencies {
implementation("sonia.svnkit:svnkit:${svnkitVersion}") {

View File

@@ -128,7 +128,7 @@ const Breadcrumb: FC<Props> = ({
if (path) {
const paths = path.split("/");
return paths.map((pathFragment, index) => {
let currPath = paths.slice(0, index + 1).join("/");
let currPath = paths.slice(0, index + 1).map(encodeURIComponent).join("/");
if (!currPath.endsWith("/")) {
currPath = currPath + "/";
}

View File

@@ -22,7 +22,8 @@
* SOFTWARE.
*/
import { createRelativeLink, createFolderLink } from "./FileLink";
import { createRelativeLink, createFolderLink, encodePart } from "./FileLink";
import { createLocation } from "history";
import { File } from "@scm-manager/ui-types";
describe("create relative link tests", () => {
@@ -47,8 +48,8 @@ describe("create folder link tests", () => {
revision: "1a",
_links: {},
_embedded: {
children: []
}
children: [],
},
};
}
@@ -61,4 +62,20 @@ describe("create folder link tests", () => {
it("should return base url if the directory path is empty", () => {
expect(createFolderLink("src", dir(""))).toBe("src/");
});
it("should double encode folder names with percent", () => {
expect(createFolderLink("src", dir("a%20b"))).toBe("src/a%252520b/");
});
});
describe("link should keep encoded percentages", () => {
it("history should create a location with encoded pathname", () => {
// For version 4.x of history we have to double encode uri components with a '%',
// because of the following issue https://github.com/remix-run/history/issues/505
// The issue is fixed with 5.x, but react-router-dom seams not to work with 5.x.
// So we have to stick with 4.x and the double encoding, until react-router-dom uses version 5.x.
// This test is mainly to remind us to remove the double encoding after update to 5.x.
const location = createLocation(encodePart("a%20b"));
expect(location.pathname).toBe("a%2520b");
});
});

View File

@@ -46,6 +46,14 @@ const isLocalRepository = (repositoryUrl: string) => {
return host === window.location.hostname;
};
export const encodePart = (part: string) => {
const encoded = encodeURIComponent(part);
if (part.includes("%")) {
return encodeURIComponent(encoded);
}
return encoded;
};
export const createRelativeLink = (repositoryUrl: string) => {
const paths = repositoryUrl.split("/");
return "/" + paths.slice(3).join("/");
@@ -54,7 +62,7 @@ export const createRelativeLink = (repositoryUrl: string) => {
export const createFolderLink = (base: string, file: File) => {
let link = base;
if (file.path) {
let path = file.path.split("/").map(encodeURIComponent).join("/");
let path = file.path.split("/").map(encodePart).join("/");
if (path.startsWith("/")) {
path = path.substring(1);
}