diff --git a/gradle/changelog/repo_permissions.yaml b/gradle/changelog/repo_permissions.yaml new file mode 100644 index 0000000000..f589356760 --- /dev/null +++ b/gradle/changelog/repo_permissions.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Significantly improved repository load times for large numbers of repositories diff --git a/scm-ui/ui-api/package.json b/scm-ui/ui-api/package.json index 104e941749..390b8908e8 100644 --- a/scm-ui/ui-api/package.json +++ b/scm-ui/ui-api/package.json @@ -33,7 +33,7 @@ "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.14.1", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT", + "@scm-manager/tsconfig": "^2.13.0", "@testing-library/react-hooks": "8.0.1", "@types/react": "^17.0.1", "react-test-renderer": "^17.0.1", diff --git a/scm-ui/ui-buttons/package.json b/scm-ui/ui-buttons/package.json index 0478e631f5..95de0337d2 100644 --- a/scm-ui/ui-buttons/package.json +++ b/scm-ui/ui-buttons/package.json @@ -18,7 +18,7 @@ "devDependencies": { "@scm-manager/prettier-config": "^2.12.0", "@scm-manager/eslint-config": "^2.17.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT" + "@scm-manager/tsconfig": "^2.13.0" }, "prettier": "@scm-manager/prettier-config", "eslintConfig": { diff --git a/scm-ui/ui-components/package.json b/scm-ui/ui-components/package.json index d2bb7cbf2b..bb7b86747a 100644 --- a/scm-ui/ui-components/package.json +++ b/scm-ui/ui-components/package.json @@ -66,7 +66,7 @@ "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.14.1", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT", + "@scm-manager/tsconfig": "^2.13.0", "@scm-manager/ui-syntaxhighlighting": "3.7.7-SNAPSHOT", "@scm-manager/ui-shortcuts": "3.7.7-SNAPSHOT", "@scm-manager/ui-text": "3.7.7-SNAPSHOT" diff --git a/scm-ui/ui-core/package.json b/scm-ui/ui-core/package.json index 393b63ce79..4a86df2e5f 100644 --- a/scm-ui/ui-core/package.json +++ b/scm-ui/ui-core/package.json @@ -35,7 +35,7 @@ "devDependencies": { "@scm-manager/prettier-config": "^2.12.0", "@scm-manager/eslint-config": "^2.17.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT", + "@scm-manager/tsconfig": "^2.13.0", "@scm-manager/babel-preset": "^2.13.1", "@scm-manager/ui-types": "3.7.7-SNAPSHOT", "@types/mousetrap": "1.6.5", @@ -80,4 +80,4 @@ "jest-extended/all" ] } -} \ No newline at end of file +} diff --git a/scm-ui/ui-extensions/package.json b/scm-ui/ui-extensions/package.json index 9029efcf32..4bfd99d462 100644 --- a/scm-ui/ui-extensions/package.json +++ b/scm-ui/ui-extensions/package.json @@ -27,7 +27,7 @@ "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.14.1", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT", + "@scm-manager/tsconfig": "^2.13.0", "@types/enzyme": "^3.10.18", "@types/react": "^17.0.1", "tsup": "^5.12.6", diff --git a/scm-ui/ui-forms/package.json b/scm-ui/ui-forms/package.json index 9ad0b20755..e81567ff7c 100644 --- a/scm-ui/ui-forms/package.json +++ b/scm-ui/ui-forms/package.json @@ -26,7 +26,7 @@ "devDependencies": { "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT" + "@scm-manager/tsconfig": "^2.13.0" }, "prettier": "@scm-manager/prettier-config", "eslintConfig": { diff --git a/scm-ui/ui-layout/package.json b/scm-ui/ui-layout/package.json index 091149815e..375b6af9c9 100644 --- a/scm-ui/ui-layout/package.json +++ b/scm-ui/ui-layout/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT" + "@scm-manager/tsconfig": "^2.13.0" }, "prettier": "@scm-manager/prettier-config", "eslintConfig": { diff --git a/scm-ui/ui-overlays/package.json b/scm-ui/ui-overlays/package.json index fe5e78e329..343c7f9ba7 100644 --- a/scm-ui/ui-overlays/package.json +++ b/scm-ui/ui-overlays/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT" + "@scm-manager/tsconfig": "^2.13.0" }, "prettier": "@scm-manager/prettier-config", "eslintConfig": { diff --git a/scm-ui/ui-plugins/package.json b/scm-ui/ui-plugins/package.json index 7f0d8b2825..878e09a93d 100644 --- a/scm-ui/ui-plugins/package.json +++ b/scm-ui/ui-plugins/package.json @@ -42,7 +42,7 @@ "@scm-manager/jest-preset": "^2.14.1", "@scm-manager/plugin-scripts": "^1.6.1", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT", + "@scm-manager/tsconfig": "^2.13.0", "@scm-manager/ui-tests": "3.7.7-SNAPSHOT", "@scm-manager/ui-types": "3.7.7-SNAPSHOT", "@types/classnames": "^2.3.1", diff --git a/scm-ui/ui-shortcuts/package.json b/scm-ui/ui-shortcuts/package.json index 8af2f37057..e314aeda8b 100644 --- a/scm-ui/ui-shortcuts/package.json +++ b/scm-ui/ui-shortcuts/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT" + "@scm-manager/tsconfig": "^2.13.0" }, "dependencies": { "@scm-manager/ui-core": "3.7.7-SNAPSHOT" diff --git a/scm-ui/ui-syntaxhighlighting/package.json b/scm-ui/ui-syntaxhighlighting/package.json index 985131b3ff..8be1e07643 100644 --- a/scm-ui/ui-syntaxhighlighting/package.json +++ b/scm-ui/ui-syntaxhighlighting/package.json @@ -28,7 +28,7 @@ "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.14.1", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT", + "@scm-manager/tsconfig": "^2.13.0", "@storybook/addon-essentials": "^6.5.10", "@storybook/builder-webpack5": "^6.5.10", "@storybook/manager-webpack5": "^6.5.10", diff --git a/scm-ui/ui-tests/package.json b/scm-ui/ui-tests/package.json index bb082e1758..edbba3f05c 100644 --- a/scm-ui/ui-tests/package.json +++ b/scm-ui/ui-tests/package.json @@ -17,7 +17,7 @@ "raf": "^3.4.1" }, "peerDependencies": { - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT", + "@scm-manager/tsconfig": "^2.13.0", "@scm-manager/prettier-config": "^2.12.0", "@types/enzyme": "^3.10.18" }, diff --git a/scm-ui/ui-text/package.json b/scm-ui/ui-text/package.json index 913b75f9ed..2b554d9d7b 100644 --- a/scm-ui/ui-text/package.json +++ b/scm-ui/ui-text/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/prettier-config": "^2.12.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT" + "@scm-manager/tsconfig": "^2.13.0" }, "prettier": "@scm-manager/prettier-config", "eslintConfig": { diff --git a/scm-ui/ui-types/package.json b/scm-ui/ui-types/package.json index 977eca8707..b0985edc78 100644 --- a/scm-ui/ui-types/package.json +++ b/scm-ui/ui-types/package.json @@ -17,7 +17,7 @@ }, "devDependencies": { "@scm-manager/eslint-config": "^2.17.0", - "@scm-manager/tsconfig": "3.7.7-SNAPSHOT", + "@scm-manager/tsconfig": "^2.13.0", "@scm-manager/prettier-config": "^2.12.0" }, "babel": { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java index 3267ede87c..b511ff2e3a 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java @@ -55,6 +55,7 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Collector; +import java.util.stream.Stream; import static java.util.Collections.emptySet; import static sonia.scm.AlreadyExistsException.alreadyExists; @@ -373,6 +374,16 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { return repositories; } + private Stream streamAll(Predicate filter) { + return repositoryDAO + .getAll() + .stream() + .filter(repository -> handlerMap.containsKey(repository.getType())) + .filter(filter) + .filter(repository -> RepositoryPermissions.read().isPermitted(repository)) + .map(this::postProcess); + } + @Override public Collection getAll() { return getAll(repository -> true, null); @@ -402,9 +413,10 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager { @Deprecated @Override public Collection getAllNamespaces() { - return getAll().stream() - .map(Repository::getNamespace) - .collect(LINKED_HASH_SET_COLLECTOR); + Set foundNamespaces = new HashSet<>(); + streamAll(repository -> !foundNamespaces.contains(repository.getNamespace())) + .forEach(repository -> foundNamespaces.add(repository.getNamespace())); + return foundNamespaces; } @Override diff --git a/yarn.lock b/yarn.lock index 39145fd5e6..4436b1729c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3131,7 +3131,7 @@ unist-util-generated "^1.1.6" unist-util-visit "^2.0.3" -"@scm-manager/tsconfig@^2.12.0", "@scm-manager/tsconfig@^2.13.0": +"@scm-manager/tsconfig@^2.13.0": version "2.13.0" resolved "https://registry.npmjs.org/@scm-manager/tsconfig/-/tsconfig-2.13.0.tgz" integrity sha512-Tc9LZAxHUKd+yVBHcCMyRVYTBjhJez+zj+ABxiTOdZOQp/WtJ2Zt084HWxWEOyrXHI6dgo3qv+1H6P1m+UcpoQ==