diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/app/RepositoryViewerController.scala index a7a85db..bae72a1 100644 --- a/src/main/scala/app/RepositoryViewerController.scala +++ b/src/main/scala/app/RepositoryViewerController.scala @@ -18,194 +18,159 @@ * The repository viewer. */ trait RepositoryViewerControllerBase extends ControllerBase { - self: RepositoryService with AccountService with ReferrerAuthenticator => + self: RepositoryService with AccountService with ReferrerAuthenticator => /** * Returns converted HTML from Markdown for preview. */ - post("/:owner/:repository/_preview")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - val content = params("content") - val enableWikiLink = params("enableWikiLink").toBoolean - val enableCommitLink = params("enableCommitLink").toBoolean - val enableIssueLink = params("enableIssueLink").toBoolean - + post("/:owner/:repository/_preview")(referrersOnly { repository => contentType = "text/html" - view.helpers.markdown(content, getRepository(owner, repository, baseUrl).get, - enableWikiLink, enableCommitLink, enableIssueLink) + view.helpers.markdown(params("content"), repository, + params("enableWikiLink").toBoolean, + params("enableCommitLink").toBoolean, + params("enableIssueLink").toBoolean) }) /** * Displays the file list of the repository root and the default branch. */ get("/:owner/:repository")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - - fileList(owner, repository) + fileList(_) }) /** * Displays the file list of the repository root and the specified branch. */ get("/:owner/:repository/tree/:id")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - - fileList(owner, repository, params("id")) + fileList(_, params("id")) }) /** * Displays the file list of the specified path and branch. */ get("/:owner/:repository/tree/:id/*")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - - fileList(owner, repository, params("id"), multiParams("splat").head) + fileList(_, params("id"), multiParams("splat").head) }) /** * Displays the commit list of the specified branch. */ - get("/:owner/:repository/commits/:branch")(referrersOnly { - val owner = params("owner") - val repository = params("repository") + get("/:owner/:repository/commits/:branch")(referrersOnly { repository => val branchName = params("branch") val page = params.getOrElse("page", "1").toInt - getRepository(owner, repository, baseUrl).map { repositoryInfo => - JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => - val (logs, hasNext) = JGitUtil.getCommitLog(git, branchName, page, 30) + JGitUtil.withGit(getRepositoryDir(repository.owner, repository.name)){ git => + val (logs, hasNext) = JGitUtil.getCommitLog(git, branchName, page, 30) - repo.html.commits(Nil, branchName, repositoryInfo, logs.splitWith{ (commit1, commit2) => - view.helpers.date(commit1.time) == view.helpers.date(commit2.time) - }, page, hasNext) - } - } getOrElse NotFound + repo.html.commits(Nil, branchName, repository, logs.splitWith{ (commit1, commit2) => + view.helpers.date(commit1.time) == view.helpers.date(commit2.time) + }, page, hasNext) + } }) /** * Displays the commit list of the specified resource. */ - get("/:owner/:repository/commits/:branch/*")(referrersOnly { - val owner = params("owner") - val repository = params("repository") + get("/:owner/:repository/commits/:branch/*")(referrersOnly { repository => val branchName = params("branch") val path = multiParams("splat").head //.replaceFirst("^tree/.+?/", "") val page = params.getOrElse("page", "1").toInt - getRepository(owner, repository, baseUrl).map { repositoryInfo => - JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => - val (logs, hasNext) = JGitUtil.getCommitLog(git, branchName, page, 30, path) + JGitUtil.withGit(getRepositoryDir(repository.owner, repository.name)){ git => + val (logs, hasNext) = JGitUtil.getCommitLog(git, branchName, page, 30, path) - repo.html.commits(path.split("/").toList, branchName, repositoryInfo, - logs.splitWith{ (commit1, commit2) => - view.helpers.date(commit1.time) == view.helpers.date(commit2.time) - }, page, hasNext) - } - } getOrElse NotFound + repo.html.commits(path.split("/").toList, branchName, repository, + logs.splitWith{ (commit1, commit2) => + view.helpers.date(commit1.time) == view.helpers.date(commit2.time) + }, page, hasNext) + } }) /** * Displays the file content of the specified branch or commit. */ - get("/:owner/:repository/blob/:id/*")(referrersOnly { - val owner = params("owner") - val repository = params("repository") + get("/:owner/:repository/blob/:id/*")(referrersOnly { repository => val id = params("id") // branch name or commit id val raw = params.get("raw").getOrElse("false").toBoolean val path = multiParams("splat").head //.replaceFirst("^tree/.+?/", "") - getRepository(owner, repository, baseUrl).map { repositoryInfo => - JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => - val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) + JGitUtil.withGit(getRepositoryDir(repository.owner, repository.name)){ git => + val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) - @scala.annotation.tailrec - def getPathObjectId(path: String, walk: TreeWalk): ObjectId = walk.next match { - case true if(walk.getPathString == path) => walk.getObjectId(0) - case true => getPathObjectId(path, walk) - } - - val treeWalk = new TreeWalk(git.getRepository) - val objectId = try { - treeWalk.addTree(revCommit.getTree) - treeWalk.setRecursive(true) - getPathObjectId(path, treeWalk) - } finally { - treeWalk.release - } - - if(raw){ - // Download - contentType = "application/octet-stream" - JGitUtil.getContent(git, objectId, false).get - } else { - // Viewer - val large = FileUtil.isLarge(git.getRepository.getObjectDatabase.open(objectId).getSize) - val viewer = if(FileUtil.isImage(path)) "image" else if(large) "large" else "other" - val bytes = if(viewer == "other") JGitUtil.getContent(git, objectId, false) else None - - val content = if(viewer == "other"){ - if(bytes.isDefined && FileUtil.isText(bytes.get)){ - // text - JGitUtil.ContentInfo("text", bytes.map(new String(_, "UTF-8"))) - } else { - // binary - JGitUtil.ContentInfo("binary", None) - } - } else { - // image or large - JGitUtil.ContentInfo(viewer, None) - } - - repo.html.blob(id, repositoryInfo, path.split("/").toList, content, new JGitUtil.CommitInfo(revCommit)) - } + @scala.annotation.tailrec + def getPathObjectId(path: String, walk: TreeWalk): ObjectId = walk.next match { + case true if(walk.getPathString == path) => walk.getObjectId(0) + case true => getPathObjectId(path, walk) } - } getOrElse NotFound + + val treeWalk = new TreeWalk(git.getRepository) + val objectId = try { + treeWalk.addTree(revCommit.getTree) + treeWalk.setRecursive(true) + getPathObjectId(path, treeWalk) + } finally { + treeWalk.release + } + + if(raw){ + // Download + contentType = "application/octet-stream" + JGitUtil.getContent(git, objectId, false).get + } else { + // Viewer + val large = FileUtil.isLarge(git.getRepository.getObjectDatabase.open(objectId).getSize) + val viewer = if(FileUtil.isImage(path)) "image" else if(large) "large" else "other" + val bytes = if(viewer == "other") JGitUtil.getContent(git, objectId, false) else None + + val content = if(viewer == "other"){ + if(bytes.isDefined && FileUtil.isText(bytes.get)){ + // text + JGitUtil.ContentInfo("text", bytes.map(new String(_, "UTF-8"))) + } else { + // binary + JGitUtil.ContentInfo("binary", None) + } + } else { + // image or large + JGitUtil.ContentInfo(viewer, None) + } + + repo.html.blob(id, repository, path.split("/").toList, content, new JGitUtil.CommitInfo(revCommit)) + } + } }) /** * Displays details of the specified commit. */ - get("/:owner/:repository/commit/:id")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - val id = params("id") + get("/:owner/:repository/commit/:id")(referrersOnly { repository => + val id = params("id") - getRepository(owner, repository, baseUrl).map { repositoryInfo => - JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => - val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) + JGitUtil.withGit(getRepositoryDir(repository.owner, repository.name)){ git => + val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) - repo.html.commit(id, new JGitUtil.CommitInfo(revCommit), - JGitUtil.getBranchesOfCommit(git, revCommit.getName), JGitUtil.getTagsOfCommit(git, revCommit.getName), - repositoryInfo, JGitUtil.getDiffs(git, id)) - } - } getOrElse NotFound + repo.html.commit(id, new JGitUtil.CommitInfo(revCommit), + JGitUtil.getBranchesOfCommit(git, revCommit.getName), JGitUtil.getTagsOfCommit(git, revCommit.getName), + repository, JGitUtil.getDiffs(git, id)) + } }) /** * Displays tags. */ get("/:owner/:repository/tags")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - - getRepository(owner, repository, baseUrl).map(repo.html.tags(_)) getOrElse NotFound + repo.html.tags(_) }) /** * Download repository contents as an archive. */ - get("/:owner/:repository/archive/:name")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - val name = params("name") + get("/:owner/:repository/archive/:name")(referrersOnly { repository => + val name = params("name") if(name.endsWith(".zip")){ val revision = name.replaceFirst("\\.zip$", "") - val workDir = getDownloadWorkDir(owner, repository, session.getId) + val workDir = getDownloadWorkDir(repository.owner, repository.name, session.getId) if(workDir.exists){ FileUtils.deleteDirectory(workDir) } @@ -214,7 +179,7 @@ // clone the repository val cloneDir = new File(workDir, revision) JGitUtil.withGit(Git.cloneRepository - .setURI(getRepositoryDir(owner, repository).toURI.toString) + .setURI(getRepositoryDir(repository.owner, repository.name).toURI.toString) .setDirectory(cloneDir) .call){ git => @@ -239,21 +204,20 @@ /** * Provides HTML of the file list. * - * @param owner the repository owner - * @param repository the repository name + * @param repository the repository information * @param revstr the branch name or commit id(optional) * @param path the directory path (optional) * @return HTML of the file list */ - private def fileList(owner: String, repository: String, revstr: String = "", path: String = ".") = { - getRepository(owner, repository, baseUrl).map { repositoryInfo => + private def fileList(repository: RepositoryService.RepositoryInfo, revstr: String = "", path: String = ".") = { + getRepository(repository.owner, repository.name, baseUrl).map { repositoryInfo => val revision = if(revstr.isEmpty){ repositoryInfo.repository.defaultBranch } else { revstr } - JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => + JGitUtil.withGit(getRepositoryDir(repositoryInfo.owner, repositoryInfo.name)){ git => // get latest commit val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(revision)) @@ -261,7 +225,7 @@ // process README.md val readme = files.find(_.name == "README.md").map { file => - new String(JGitUtil.getContent(Git.open(getRepositoryDir(owner, repository)), file.id, true).get, "UTF-8") + new String(JGitUtil.getContent(Git.open(getRepositoryDir(repositoryInfo.owner, repositoryInfo.name)), file.id, true).get, "UTF-8") } repo.html.files( diff --git a/src/main/scala/app/SettingsController.scala b/src/main/scala/app/SettingsController.scala index 9fcbdd5..f8f8d4f 100644 --- a/src/main/scala/app/SettingsController.scala +++ b/src/main/scala/app/SettingsController.scala @@ -29,45 +29,30 @@ /** * Redirect to the Options page. */ - get("/:owner/:repository/settings")(ownerOnly { - val owner = params("owner") - val repository = params("repository") - - redirect("/%s/%s/settings/options".format(owner, repository)) + get("/:owner/:repository/settings")(ownerOnly { repository => + redirect("/%s/%s/settings/options".format(repository.owner, repository.name)) }) /** * Display the Options page. */ get("/:owner/:repository/settings/options")(ownerOnly { - val owner = params("owner") - val repository = params("repository") - - getRepository(owner, repository, baseUrl).map(settings.html.options(_)) getOrElse NotFound + settings.html.options(_) }) /** * Save the repository options. */ - post("/:owner/:repository/settings/options", optionsForm)(ownerOnly { form => - val owner = params("owner") - val repository = params("repository") - - // save repository options - saveRepositoryOptions(owner, repository, form.description, form.defaultBranch, form.isPrivate) - - redirect("%s/%s/settings/options".format(owner, repository)) + post("/:owner/:repository/settings/options", optionsForm)(ownerOnly { (form, repository) => + saveRepositoryOptions(repository.owner, repository.name, form.description, form.defaultBranch, form.isPrivate) + redirect("%s/%s/settings/options".format(repository.owner, repository.name)) }) /** * Display the Collaborators page. */ - get("/:owner/:repository/settings/collaborators")(ownerOnly { - val owner = params("owner") - val repository = params("repository") - - getRepository(owner, repository, baseUrl).map( - settings.html.collaborators(getCollaborators(owner, repository), _)) getOrElse NotFound + get("/:owner/:repository/settings/collaborators")(ownerOnly { repository => + settings.html.collaborators(getCollaborators(repository.owner, repository.name), repository) }) /** @@ -81,50 +66,37 @@ /** * Add the collaborator. */ - post("/:owner/:repository/settings/collaborators/add", collaboratorForm)(ownerOnly { form => - val owner = params("owner") - val repository = params("repository") - - addCollaborator(owner, repository, form.userName) - redirect("/%s/%s/settings/collaborators".format(owner, repository)) + post("/:owner/:repository/settings/collaborators/add", collaboratorForm)(ownerOnly { (form, repository) => + addCollaborator(repository.owner, repository.name, form.userName) + redirect("/%s/%s/settings/collaborators".format(repository.owner, repository.name)) }) /** * Add the collaborator. */ - get("/:owner/:repository/settings/collaborators/remove")(ownerOnly { - val owner = params("owner") - val repository = params("repository") - val userName = params("name") - - removeCollaborator(owner, repository, userName) - redirect("/%s/%s/settings/collaborators".format(owner, repository)) + get("/:owner/:repository/settings/collaborators/remove")(ownerOnly { repository => + removeCollaborator(repository.owner, repository.name, params("name")) + redirect("/%s/%s/settings/collaborators".format(repository.owner, repository.name)) }) /** * Display the delete repository page. */ get("/:owner/:repository/settings/delete")(ownerOnly { - val owner = params("owner") - val repository = params("repository") - - getRepository(owner, repository, baseUrl).map(settings.html.delete(_)) getOrElse NotFound + settings.html.delete(_) }) /** * Delete the repository. */ - post("/:owner/:repository/settings/delete")(ownerOnly { - val owner = params("owner") - val repository = params("repository") + post("/:owner/:repository/settings/delete")(ownerOnly { repository => + deleteRepository(repository.owner, repository.name) - deleteRepository(owner, repository) + FileUtils.deleteDirectory(getRepositoryDir(repository.owner, repository.name)) + FileUtils.deleteDirectory(getWikiRepositoryDir(repository.owner, repository.name)) + FileUtils.deleteDirectory(getTemporaryDir(repository.owner, repository.name)) - FileUtils.deleteDirectory(getRepositoryDir(owner, repository)) - FileUtils.deleteDirectory(getWikiRepositoryDir(owner, repository)) - FileUtils.deleteDirectory(getTemporaryDir(owner, repository)) - - redirect("/%s".format(owner)) + redirect("/%s".format(repository.owner)) }) /** diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/app/WikiController.scala index 40bf12e..e24bfac 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/app/WikiController.scala @@ -27,140 +27,92 @@ "currentPageName" -> trim(label("Current page name" , text(required))) )(WikiPageEditForm.apply) - get("/:owner/:repository/wiki")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - - getRepository(owner, repository, baseUrl).map { repositoryInfo => - getWikiPage(owner, repository, "Home").map { page => - wiki.html.page("Home", page, repositoryInfo, hasWritePermission(owner, repository, context.loginAccount)) - } getOrElse redirect("/%s/%s/wiki/Home/_edit".format(owner, repository)) - } getOrElse NotFound + get("/:owner/:repository/wiki")(referrersOnly { repository => + getWikiPage(repository.owner, repository.name, "Home").map { page => + wiki.html.page("Home", page, repository, hasWritePermission(repository.owner, repository.name, context.loginAccount)) + } getOrElse redirect("/%s/%s/wiki/Home/_edit".format(repository.owner, repository.name)) }) - get("/:owner/:repository/wiki/:page")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - val pageName = params("page") + get("/:owner/:repository/wiki/:page")(referrersOnly { repository => + val pageName = params("page") - getRepository(owner, repository, baseUrl).map { repositoryInfo => - getWikiPage(owner, repository, pageName).map { page => - wiki.html.page(pageName, page, repositoryInfo, hasWritePermission(owner, repository, context.loginAccount)) - } getOrElse redirect("/%s/%s/wiki/%s/_edit".format(owner, repository, pageName)) // TODO URLEncode - } getOrElse NotFound + getWikiPage(repository.owner, repository.name, pageName).map { page => + wiki.html.page(pageName, page, repository, hasWritePermission(repository.owner, repository.name, context.loginAccount)) + } getOrElse redirect("/%s/%s/wiki/%s/_edit".format(repository.owner, repository.name, pageName)) // TODO URLEncode }) - get("/:owner/:repository/wiki/:page/_history")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - val page = params("page") + get("/:owner/:repository/wiki/:page/_history")(referrersOnly { repository => + val pageName = params("page") - getRepository(owner, repository, baseUrl).map { repositoryInfo => - JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => - wiki.html.history(Some(page), JGitUtil.getCommitLog(git, "master", path = page + ".md")._1, repositoryInfo) - } - } getOrElse NotFound + JGitUtil.withGit(getWikiRepositoryDir(repository.owner, repository.name)){ git => + wiki.html.history(Some(pageName), JGitUtil.getCommitLog(git, "master", path = pageName + ".md")._1, repository) + } }) - get("/:owner/:repository/wiki/:page/_compare/:commitId")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - val page = params("page") + get("/:owner/:repository/wiki/:page/_compare/:commitId")(referrersOnly { repository => + val pageName = params("page") + val commitId = params("commitId").split("\\.\\.\\.") + + JGitUtil.withGit(getWikiRepositoryDir(repository.owner, repository.name)){ git => + wiki.html.compare(Some(pageName), getWikiDiffs(git, commitId(0), commitId(1)), repository) + } + }) + + get("/:owner/:repository/wiki/_compare/:commitId")(referrersOnly { repository => val commitId = params("commitId").split("\\.\\.\\.") - getRepository(owner, repository, baseUrl).map { repositoryInfo => - JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => - wiki.html.compare(Some(page), getWikiDiffs(git, commitId(0), commitId(1)), repositoryInfo) - } - } getOrElse NotFound + JGitUtil.withGit(getWikiRepositoryDir(repository.owner, repository.name)){ git => + wiki.html.compare(None, getWikiDiffs(git, commitId(0), commitId(1)), repository) + } }) - get("/:owner/:repository/wiki/_compare/:commitId")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - val commitId = params("commitId").split("\\.\\.\\.") - - getRepository(owner, repository, baseUrl).map { repositoryInfo => - JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => - wiki.html.compare(None, getWikiDiffs(git, commitId(0), commitId(1)), repositoryInfo) - } - } getOrElse NotFound + get("/:owner/:repository/wiki/:page/_edit")(collaboratorsOnly { repository => + val pageName = params("page") + wiki.html.edit(pageName, getWikiPage(repository.owner, repository.name, pageName), repository) }) - get("/:owner/:repository/wiki/:page/_edit")(collaboratorsOnly { - val owner = params("owner") - val repository = params("repository") - val page = params("page") - - getRepository(owner, repository, baseUrl).map( - wiki.html.edit(page, getWikiPage(owner, repository, page), _)) getOrElse NotFound - }) - - post("/:owner/:repository/wiki/_edit", editForm)(collaboratorsOnly { form => - val owner = params("owner") - val repository = params("repository") - - saveWikiPage(owner, repository, form.currentPageName, form.pageName, + post("/:owner/:repository/wiki/_edit", editForm)(collaboratorsOnly { (form, repository) => + saveWikiPage(repository.owner, repository.name, form.currentPageName, form.pageName, form.content, context.loginAccount.get, form.message.getOrElse("")) - updateLastActivityDate(owner, repository) + updateLastActivityDate(repository.owner, repository.name) - redirect("%s/%s/wiki/%s".format(owner, repository, form.pageName)) + redirect("%s/%s/wiki/%s".format(repository.owner, repository.name, form.pageName)) }) get("/:owner/:repository/wiki/_new")(collaboratorsOnly { - val owner = params("owner") - val repository = params("repository") - - getRepository(owner, repository, baseUrl).map(wiki.html.edit("", None, _)) getOrElse NotFound + wiki.html.edit("", None, _) }) - post("/:owner/:repository/wiki/_new", newForm)(collaboratorsOnly { form => - val owner = params("owner") - val repository = params("repository") - - saveWikiPage(owner, repository, form.currentPageName, form.pageName, + post("/:owner/:repository/wiki/_new", newForm)(collaboratorsOnly { (form, repository) => + saveWikiPage(repository.owner, repository.name, form.currentPageName, form.pageName, form.content, context.loginAccount.get, form.message.getOrElse("")) + updateLastActivityDate(repository.owner, repository.name) - redirect("%s/%s/wiki/%s".format(owner, repository, form.pageName)) + redirect("%s/%s/wiki/%s".format(repository.owner, repository.name, form.pageName)) }) - get("/:owner/:repository/wiki/:page/_delete")(collaboratorsOnly { - val owner = params("owner") - val repository = params("repository") - val page = params("page") + get("/:owner/:repository/wiki/:page/_delete")(collaboratorsOnly { repository => + val pageName = params("page") - deleteWikiPage(owner, repository, page, context.loginAccount.get.userName, "Delete %s".format(page)) - updateLastActivityDate(owner, repository) + deleteWikiPage(repository.owner, repository.name, pageName, context.loginAccount.get.userName, "Delete %s".format(pageName)) + updateLastActivityDate(repository.owner, repository.name) - redirect("%s/%s/wiki".format(owner, repository)) + redirect("%s/%s/wiki".format(repository.owner, repository.name)) }) - get("/:owner/:repository/wiki/_pages")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - - getRepository(owner, repository, baseUrl).map { - wiki.html.pages(getWikiPageList(owner, repository), _, hasWritePermission(owner, repository, context.loginAccount)) - } getOrElse NotFound + get("/:owner/:repository/wiki/_pages")(referrersOnly { repository => + wiki.html.pages(getWikiPageList(repository.owner, repository.name), repository, + hasWritePermission(repository.owner, repository.name, context.loginAccount)) }) - get("/:owner/:repository/wiki/_history")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - - getRepository(owner, repository, baseUrl).map { repositoryInfo => - JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => - wiki.html.history(None, JGitUtil.getCommitLog(git, "master")._1, repositoryInfo) - } - } getOrElse NotFound + get("/:owner/:repository/wiki/_history")(referrersOnly { repository => + JGitUtil.withGit(getWikiRepositoryDir(repository.owner, repository.name)){ git => + wiki.html.history(None, JGitUtil.getCommitLog(git, "master")._1, repository) + } }) - get("/:owner/:repository/wiki/_blob/*")(referrersOnly { - val owner = params("owner") - val repository = params("repository") - val path = multiParams("splat").head - - getFileContent(owner, repository, path).map { content => + get("/:owner/:repository/wiki/_blob/*")(referrersOnly { repository => + getFileContent(repository.owner, repository.name, multiParams("splat").head).map { content => contentType = "application/octet-stream" content } getOrElse NotFound