diff --git a/src/main/scala/app/CreateRepositoryController.scala b/src/main/scala/app/CreateRepositoryController.scala index 3054b7c..850253c 100644 --- a/src/main/scala/app/CreateRepositoryController.scala +++ b/src/main/scala/app/CreateRepositoryController.scala @@ -78,7 +78,7 @@ def validate(name: String, value: String): Option[String] = { if(!value.matches("^[a-zA-Z0-9\\-_]+$")){ Some("Repository name contains invalid character.") - } else if(getRepositories(context.loginUser).contains(value)){ + } else if(getRepositories(context.loginUser, servletContext).contains(value)){ Some("Repository already exists.") } else { None diff --git a/src/main/scala/app/RepositoryViewerController.scala b/src/main/scala/app/RepositoryViewerController.scala index 7b5b5ac..3beb824 100644 --- a/src/main/scala/app/RepositoryViewerController.scala +++ b/src/main/scala/app/RepositoryViewerController.scala @@ -27,7 +27,7 @@ get("/:owner") { val owner = params("owner") - html.user(owner, getProjects(owner, servletContext)) + html.user(owner, getRepositories(owner, servletContext)) } /** @@ -72,7 +72,7 @@ JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => val (logs, hasNext) = JGitUtil.getCommitLog(git, branchName, page, 30) - repo.html.commits(Nil, branchName, JGitUtil.getRepositoryInfo(owner, repository, servletContext), + repo.html.commits(Nil, branchName, getRepository(owner, repository, servletContext).get, logs.splitWith{ (commit1, commit2) => view.helpers.date(commit1.time) == view.helpers.date(commit2.time) }, page, hasNext) @@ -92,7 +92,7 @@ JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => val (logs, hasNext) = JGitUtil.getCommitLog(git, branchName, page, 30, path) - repo.html.commits(path.split("/").toList, branchName, JGitUtil.getRepositoryInfo(owner, repository, servletContext), + repo.html.commits(path.split("/").toList, branchName, getRepository(owner, repository, servletContext).get, logs.splitWith{ (commit1, commit2) => view.helpers.date(commit1.time) == view.helpers.date(commit2.time) }, page, hasNext) @@ -109,7 +109,7 @@ val id = params("id") // branch name or commit id val raw = params.get("raw").getOrElse("false").toBoolean val path = multiParams("splat").head //.replaceFirst("^tree/.+?/", "") - val repositoryInfo = JGitUtil.getRepositoryInfo(owner, repository, servletContext) + val repositoryInfo = getRepository(owner, repository, servletContext).get JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) @@ -153,7 +153,7 @@ JGitUtil.withGit(getRepositoryDir(owner, repository)){ git => val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id)) repo.html.commit(id, new JGitUtil.CommitInfo(revCommit), - JGitUtil.getRepositoryInfo(owner, repository, servletContext), JGitUtil.getDiffs(git, id)) + getRepository(owner, repository, servletContext).get, JGitUtil.getDiffs(git, id)) } } @@ -164,7 +164,7 @@ val owner = params("owner") val repository = params("repository") - repo.html.tags(JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + repo.html.tags(getRepository(owner, repository, servletContext).get) } /** @@ -239,7 +239,7 @@ // current branch revision, // repository - JGitUtil.getRepositoryInfo(owner, repository, servletContext), + getRepository(owner, repository, servletContext).get, // current path if(path == ".") Nil else path.split("/").toList, // latest commit diff --git a/src/main/scala/app/SettingsController.scala b/src/main/scala/app/SettingsController.scala index 3856a0f..a6a9b62 100644 --- a/src/main/scala/app/SettingsController.scala +++ b/src/main/scala/app/SettingsController.scala @@ -1,8 +1,11 @@ package app -import util.JGitUtil +import service._ -class SettingsController extends ControllerBase { +class SettingsController extends SettingsControllerBase with ProjectService with AccountService + + +trait SettingsControllerBase extends ControllerBase { self: ProjectService => get("/:owner/:repository/settings") { val owner = params("owner") @@ -14,14 +17,14 @@ val owner = params("owner") val repository = params("repository") - settings.html.options(JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + settings.html.options(getRepository(owner, repository, servletContext).get) } get("/:owner/:repository/settings/collaborators") { val owner = params("owner") val repository = params("repository") - settings.html.collaborators(JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + settings.html.collaborators(getRepository(owner, repository, servletContext).get) } } \ No newline at end of file diff --git a/src/main/scala/app/WikiController.scala b/src/main/scala/app/WikiController.scala index 0432179..c307ecb 100644 --- a/src/main/scala/app/WikiController.scala +++ b/src/main/scala/app/WikiController.scala @@ -4,11 +4,10 @@ import util.JGitUtil import util.Directory._ import jp.sf.amateras.scalatra.forms._ -import org.eclipse.jgit.api.Git -class WikiController extends WikiControllerBase with WikiService +class WikiController extends WikiControllerBase with WikiService with ProjectService with AccountService -trait WikiControllerBase extends ControllerBase { self: WikiService => +trait WikiControllerBase extends ControllerBase { self: WikiService with ProjectService => case class WikiPageEditForm(pageName: String, content: String, message: Option[String], currentPageName: String) @@ -31,10 +30,8 @@ val repository = params("repository") getWikiPage(owner, repository, "Home") match { - case Some(page) => wiki.html.wiki("Home", page, - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) - case None => wiki.html.wikiedit("Home", None, - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + case Some(page) => wiki.html.wiki("Home", page, getRepository(owner, repository, servletContext).get) + case None => wiki.html.wikiedit("Home", None, getRepository(owner, repository, servletContext).get) } } @@ -44,10 +41,8 @@ val pageName = params("page") getWikiPage(owner, repository, pageName) match { - case Some(page) => wiki.html.wiki(pageName, page, - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) - case None => wiki.html.wikiedit(pageName, None, - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + case Some(page) => wiki.html.wiki(pageName, page, getRepository(owner, repository, servletContext).get) + case None => wiki.html.wikiedit(pageName, None, getRepository(owner, repository, servletContext).get) } } @@ -58,8 +53,7 @@ JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => wiki.html.wikihistory(Some(page), - JGitUtil.getCommitLog(git, "master", path = page + ".md")._1, - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + JGitUtil.getCommitLog(git, "master", path = page + ".md")._1, getRepository(owner, repository, servletContext).get) } } @@ -71,8 +65,7 @@ JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => wiki.html.wikicompare(Some(page), - getWikiDiffs(git, commitId(0), commitId(1)), - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + getWikiDiffs(git, commitId(0), commitId(1)), getRepository(owner, repository, servletContext).get) } } @@ -83,8 +76,7 @@ JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => wiki.html.wikicompare(None, - getWikiDiffs(git, commitId(0), commitId(1)), - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + getWikiDiffs(git, commitId(0), commitId(1)), getRepository(owner, repository, servletContext).get) } } @@ -94,8 +86,7 @@ val page = params("page") wiki.html.wikiedit(page, - getWikiPage(owner, repository, page), - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + getWikiPage(owner, repository, page), getRepository(owner, repository, servletContext).get) } post("/:owner/:repository/wiki/_edit", editForm){ form => @@ -112,8 +103,7 @@ val owner = params("owner") val repository = params("repository") - wiki.html.wikiedit("", None, - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + wiki.html.wikiedit("", None, getRepository(owner, repository, servletContext).get) } post("/:owner/:repository/wiki/_new", newForm){ form => @@ -140,8 +130,7 @@ val owner = params("owner") val repository = params("repository") - wiki.html.wikipages(getWikiPageList(owner, repository), - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + wiki.html.wikipages(getWikiPageList(owner, repository), getRepository(owner, repository, servletContext).get) } get("/:owner/:repository/wiki/_history"){ @@ -150,8 +139,7 @@ JGitUtil.withGit(getWikiRepositoryDir(owner, repository)){ git => wiki.html.wikihistory(None, - JGitUtil.getCommitLog(git, "master")._1, - JGitUtil.getRepositoryInfo(owner, repository, servletContext)) + JGitUtil.getCommitLog(git, "master")._1, getRepository(owner, repository, servletContext).get) } } @@ -160,7 +148,7 @@ val repository = params("repository") val content = params("content") contentType = "text/html" - view.helpers.markdown(content, JGitUtil.getRepositoryInfo(owner, repository, servletContext), true) + view.helpers.markdown(content, getRepository(owner, repository, servletContext).get, true) } /** diff --git a/src/main/scala/service/ProjectService.scala b/src/main/scala/service/ProjectService.scala index 05679a8..491aa12 100644 --- a/src/main/scala/service/ProjectService.scala +++ b/src/main/scala/service/ProjectService.scala @@ -44,10 +44,19 @@ * @param userName the user name * @return the project list which is sorted in descending order of lastActivityDate. */ - def getProjects(userName: String, servletContext: ServletContext): List[RepositoryInfo] = { - (Query(Projects) filter(_.userId is getUserId(userName).bind) sortBy(_.lastActivityDate desc) list).map { project => + def getRepositories(userName: String, servletContext: ServletContext): List[RepositoryInfo] = { + (Query(Projects) filter(_.userId is getUserId(userName).bind) sortBy(_.lastActivityDate desc) list) map { project => val repositoryInfo = JGitUtil.getRepositoryInfo(userName, project.projectName, servletContext) - RepositoryInfo(userName, project.projectName, project, repositoryInfo.branchList, repositoryInfo.tags) + RepositoryInfo(userName, project.projectName, repositoryInfo.url, project, repositoryInfo.branchList, repositoryInfo.tags) + } + } + + def getRepository(userName: String, projectName: String, servletContext: ServletContext): Option[RepositoryInfo] = { + (Query(Projects) filter { project => + (project.userId is getUserId(userName).bind) && (project.projectName is projectName.bind) + } firstOption) map { project => + val repositoryInfo = JGitUtil.getRepositoryInfo(userName, project.projectName, servletContext) + RepositoryInfo(userName, project.projectName, repositoryInfo.url, project, repositoryInfo.branchList, repositoryInfo.tags) } } @@ -56,5 +65,5 @@ } object ProjectService { - case class RepositoryInfo(owner: String, name: String, project: Project, branchList: List[String], tagInfo: List[util.JGitUtil.TagInfo]) + case class RepositoryInfo(owner: String, name: String, url: String, project: Project, branchList: List[String], tags: List[util.JGitUtil.TagInfo]) } \ No newline at end of file diff --git a/src/main/scala/view/helpers.scala b/src/main/scala/view/helpers.scala index d351847..e62d260 100644 --- a/src/main/scala/view/helpers.scala +++ b/src/main/scala/view/helpers.scala @@ -25,7 +25,7 @@ /** * Converts the issue number and the commit id to the link. */ - private def markdownFilter(value: String, repository: util.JGitUtil.RepositoryInfo)(implicit context: app.Context): String = { + private def markdownFilter(value: String, repository: service.ProjectService.RepositoryInfo)(implicit context: app.Context): String = { value .replaceAll("#([0-9]+)", "[$0](%s/%s/%s/issue/$1)".format(context.path, repository.owner, repository.name)) .replaceAll("[0-9a-z]{10,40}", "[$0](%s/%s/%s/commit/$0)".format(context.path, repository.owner, repository.name)) @@ -34,7 +34,7 @@ /** * Converts Markdown of Wiki pages to HTML. */ - def markdown(value: String, repository: util.JGitUtil.RepositoryInfo, wikiLink: Boolean)(implicit context: app.Context): twirl.api.Html = { + def markdown(value: String, repository: service.ProjectService.RepositoryInfo, wikiLink: Boolean)(implicit context: app.Context): twirl.api.Html = { import org.pegdown._ val html = new PegDownProcessor(Extensions.AUTOLINKS|Extensions.WIKILINKS|Extensions.FENCED_CODE_BLOCKS) .markdownToHtml(markdownFilter(value, repository), new LinkRenderer(){ diff --git a/src/main/twirl/diff.scala.html b/src/main/twirl/diff.scala.html index c1f7be6..70b5062 100644 --- a/src/main/twirl/diff.scala.html +++ b/src/main/twirl/diff.scala.html @@ -1,4 +1,4 @@ -@(diffs: Seq[util.JGitUtil.DiffInfo], repository: util.JGitUtil.RepositoryInfo, commitId: Option[String])(implicit context: app.Context) +@(diffs: Seq[util.JGitUtil.DiffInfo], repository: service.ProjectService.RepositoryInfo, commitId: Option[String])(implicit context: app.Context) @import context._ @import org.eclipse.jgit.diff.DiffEntry.ChangeType @diffs.zipWithIndex.map { case (diff, i) => diff --git a/src/main/twirl/header.scala.html b/src/main/twirl/header.scala.html index 3613e7b..0a75eb2 100644 --- a/src/main/twirl/header.scala.html +++ b/src/main/twirl/header.scala.html @@ -1,4 +1,4 @@ -@(active: String, repository: util.JGitUtil.RepositoryInfo)(implicit context: app.Context) +@(active: String, repository: service.ProjectService.RepositoryInfo)(implicit context: app.Context) @import context._