diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBrowseCommand.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBrowseCommand.java index c75925f7b4..83df591e9d 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBrowseCommand.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnBrowseCommand.java @@ -194,29 +194,29 @@ public class SvnBrowseCommand extends AbstractSvnCommand repository.getDir(entry.getRelativePath(), revision, properties, (Collection) null); String externals = properties.getStringValue(SVNProperty.EXTERNALS).replaceAll("[\\r\\n]+", ""); - String[] externalsArray = externals.split(" "); - String subRepoName = ""; - for (String external : externalsArray) { + String subRepoUrl = ""; + String subRepoPath = ""; + for (String external : externals.split(" ")) { if (shouldSetExternal(external)) { - externals = external; + subRepoUrl = external; } else if (!external.contains("-r") && !external.isEmpty()) { - subRepoName = external; + subRepoPath = external; } } if (Util.isNotEmpty(externals)) { - SubRepository subRepository = new SubRepository(externals); - fileObject.addChild(createSubRepoDirectory(subRepository, subRepoName)); + SubRepository subRepository = new SubRepository(subRepoUrl); + fileObject.addChild(createSubRepoDirectory(subRepository, subRepoPath)); } } catch (SVNException ex) { logger.error("could not fetch file properties", ex); } } - private FileObject createSubRepoDirectory(SubRepository subRepository, String subRepoName) { + private FileObject createSubRepoDirectory(SubRepository subRepository, String subRepoPath) { FileObject subRepositoryDirectory = new FileObject(); - subRepositoryDirectory.setPath(subRepoName); - subRepositoryDirectory.setName(subRepoName); + subRepositoryDirectory.setPath(subRepoPath); + subRepositoryDirectory.setName(subRepoPath); subRepositoryDirectory.setDirectory(true); subRepositoryDirectory.setSubRepository(subRepository); return subRepositoryDirectory; diff --git a/scm-ui/ui-webapp/src/repos/sources/components/content/FileLink.tsx b/scm-ui/ui-webapp/src/repos/sources/components/content/FileLink.tsx index 34ecf0a5c6..cf07fca8d1 100644 --- a/scm-ui/ui-webapp/src/repos/sources/components/content/FileLink.tsx +++ b/scm-ui/ui-webapp/src/repos/sources/components/content/FileLink.tsx @@ -69,8 +69,10 @@ export const createFolderLink = (base: string, file: File) => { const FileLink: FC = ({ baseUrl, file, children }) => { const [t] = useTranslation("repos"); if (file?.subRepository?.repositoryUrl) { + // file link represents a subRepository let link = file.subRepository.repositoryUrl; if (file.subRepository.browserUrl) { + // replace upstream url with public browser url link = file.subRepository.browserUrl; } if (link.startsWith("http://") || link.startsWith("https://")) { @@ -85,6 +87,7 @@ const FileLink: FC = ({ baseUrl, file, children }) => { } return {children}; } else { + // subRepository url cannot be linked return ( {children} @@ -92,6 +95,7 @@ const FileLink: FC = ({ baseUrl, file, children }) => { ); } } + // normal file or folder return {children}; };