diff --git a/src/main/scala/gitbucket/core/view/Markdown.scala b/src/main/scala/gitbucket/core/view/Markdown.scala index 989a668..40f68e0 100644 --- a/src/main/scala/gitbucket/core/view/Markdown.scala +++ b/src/main/scala/gitbucket/core/view/Markdown.scala @@ -176,6 +176,10 @@ } else if (!enableWikiLink) { if (context.currentPath.contains("/blob/")) { urlWithRawParam + } else if (context.currentPath.contains("/tree/")) { + val paths = context.currentPath.split("/") + val path = if (paths.length > 3) paths.drop(4).mkString("/") else branch + repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + path + "/" + urlWithRawParam } else { repository.httpUrl.replaceFirst("/git/", "/").stripSuffix(".git") + "/blob/" + branch + "/" + urlWithRawParam } diff --git a/src/test/scala/gitbucket/core/view/MarkdownSpec.scala b/src/test/scala/gitbucket/core/view/MarkdownSpec.scala index 802cd18..25e4de6 100644 --- a/src/test/scala/gitbucket/core/view/MarkdownSpec.scala +++ b/src/test/scala/gitbucket/core/view/MarkdownSpec.scala @@ -1,8 +1,12 @@ package gitbucket.core.view +import gitbucket.core.controller.Context +import gitbucket.core.service.RepositoryService.RepositoryInfo import org.scalatest.FunSpec +import org.scalatest.mockito.MockitoSugar +import org.mockito.Mockito._ -class MarkdownSpec extends FunSpec { +class MarkdownSpec extends FunSpec with MockitoSugar { import Markdown._ @@ -89,4 +93,69 @@ assert(after == " -[ ] aaaa") } } + + describe("toHtml") { + it("should fix url at the repository root") { + val repository = mock[RepositoryInfo] + val context = mock[Context] + when(context.currentPath).thenReturn("/user/repo") + when(repository.httpUrl(context)).thenReturn("http://localhost:8080/git/user/repo.git") + + val html = Markdown.toHtml( + markdown = "[ChangeLog](CHANGELOG.md)", + repository = repository, + branch = "master", + enableWikiLink = false, + enableRefsLink = true, + enableAnchor = true, + enableLineBreaks = true + )(context) + + assert( + html == """
""" + ) + } + + it("should fix sub directory url at the file list") { + val repository = mock[RepositoryInfo] + val context = mock[Context] + when(context.currentPath).thenReturn("/user/repo/tree/master/sub/dir") + when(repository.httpUrl(context)).thenReturn("http://localhost:8080/git/user/repo.git") + + val html = Markdown.toHtml( + markdown = "[ChangeLog](CHANGELOG.md)", + repository = repository, + branch = "master", + enableWikiLink = false, + enableRefsLink = true, + enableAnchor = true, + enableLineBreaks = true + )(context) + + assert( + html == """""" + ) + } + + it("should fix sub directory url at the blob view") { + val repository = mock[RepositoryInfo] + val context = mock[Context] + when(context.currentPath).thenReturn("/user/repo/blob/master/sub/dir/README.md") + when(repository.httpUrl(context)).thenReturn("http://localhost:8080/git/user/repo.git") + + val html = Markdown.toHtml( + markdown = "[ChangeLog](CHANGELOG.md)", + repository = repository, + branch = "master", + enableWikiLink = false, + enableRefsLink = true, + enableAnchor = true, + enableLineBreaks = true + )(context) + + assert( + html == """""" + ) + } + } }