diff --git a/src/main/scala/app/SearchController.scala b/src/main/scala/app/SearchController.scala index ab091cf..dc71b0b 100644 --- a/src/main/scala/app/SearchController.scala +++ b/src/main/scala/app/SearchController.scala @@ -2,6 +2,7 @@ import util._ import ControlUtil._ +import Implicits._ import service._ import jp.sf.amateras.scalatra.forms._ diff --git a/src/main/scala/service/ActivityService.scala b/src/main/scala/service/ActivityService.scala index 1e50ff8..99b2d67 100644 --- a/src/main/scala/service/ActivityService.scala +++ b/src/main/scala/service/ActivityService.scala @@ -20,7 +20,7 @@ .take(30) .list - def getRecentActivities(implicit s: Session): List[Activity] = + def getRecentActivities()(implicit s: Session): List[Activity] = Activities .innerJoin(Repositories).on((t1, t2) => t1.byRepository(t2.userName, t2.repositoryName)) .filter { case (t1, t2) => t2.isPrivate is false.bind } diff --git a/src/main/scala/service/IssuesService.scala b/src/main/scala/service/IssuesService.scala index 7920427..0e6f7d5 100644 --- a/src/main/scala/service/IssuesService.scala +++ b/src/main/scala/service/IssuesService.scala @@ -96,7 +96,7 @@ t.userName -> t.repositoryName } .map { case (repo, t) => - repo -> t.length + (repo._1, repo._2, t.length) } .sortBy(_._3 desc) .list diff --git a/src/main/scala/service/RepositorySearchService.scala b/src/main/scala/service/RepositorySearchService.scala index 3868ad9..5c9830f 100644 --- a/src/main/scala/service/RepositorySearchService.scala +++ b/src/main/scala/service/RepositorySearchService.scala @@ -8,15 +8,15 @@ import org.eclipse.jgit.treewalk.TreeWalk import org.eclipse.jgit.lib.FileMode import org.eclipse.jgit.api.Git +import model.profile.simple.Session -trait -RepositorySearchService { self: IssuesService => +trait RepositorySearchService { self: IssuesService => import RepositorySearchService._ - def countIssues(owner: String, repository: String, query: String): Int = + def countIssues(owner: String, repository: String, query: String)(implicit session: Session): Int = searchIssuesByKeyword(owner, repository, query).length - def searchIssues(owner: String, repository: String, query: String): List[IssueSearchResult] = + def searchIssues(owner: String, repository: String, query: String)(implicit session: Session): List[IssueSearchResult] = searchIssuesByKeyword(owner, repository, query).map { case (issue, commentCount, content) => IssueSearchResult( issue.issueId, diff --git a/src/main/scala/service/RepositoryService.scala b/src/main/scala/service/RepositoryService.scala index 7e478f7..6d8206b 100644 --- a/src/main/scala/service/RepositoryService.scala +++ b/src/main/scala/service/RepositoryService.scala @@ -194,7 +194,7 @@ // for Guests case None => Repositories filter(_.isPrivate is false.bind) }).filter { t => - repositoryUserName.map { userName => t.userName is userName.bind } getOrElse ConstColumn.TRUE + repositoryUserName.map { userName => t.userName is userName.bind } getOrElse LiteralColumn(true) }.sortBy(_.lastActivityDate desc).list.map{ repository => new RepositoryInfo( JGitUtil.getRepositoryInfo(repository.userName, repository.repositoryName, baseUrl), diff --git a/src/main/scala/ssh/GitCommand.scala b/src/main/scala/ssh/GitCommand.scala index ffc9ccc..822393f 100644 --- a/src/main/scala/ssh/GitCommand.scala +++ b/src/main/scala/ssh/GitCommand.scala @@ -12,7 +12,7 @@ import service.{AccountService, RepositoryService, SystemSettingsService} import org.eclipse.jgit.errors.RepositoryNotFoundException import javax.servlet.ServletContext - +import model.profile.simple.Session object GitCommand { val CommandRegex = """\Agit-(upload|receive)-pack '/([a-zA-Z0-9\-_.]+)/([a-zA-Z0-9\-_.]+).git'\Z""".r @@ -27,11 +27,11 @@ protected var out: OutputStream = null protected var callback: ExitCallback = null - protected def runTask(user: String): Unit + protected def runTask(user: String)(implicit session: Session): Unit private def newTask(user: String): Runnable = new Runnable { override def run(): Unit = { - Database(context) withTransaction { + Database(context) withTransaction { implicit session => try { runTask(user) callback.onExit(0) @@ -71,7 +71,8 @@ this.in = in } - protected def isWritableUser(username: String, repositoryInfo: RepositoryService.RepositoryInfo): Boolean = + protected def isWritableUser(username: String, repositoryInfo: RepositoryService.RepositoryInfo) + (implicit session: Session): Boolean = getAccountByUserName(username) match { case Some(account) => hasWritePermission(repositoryInfo.owner, repositoryInfo.name, Some(account)) case None => false @@ -82,7 +83,7 @@ class GitUploadPack(context: ServletContext, owner: String, repoName: String, baseUrl: String) extends GitCommand(context, owner, repoName) with RepositoryService with AccountService { - override protected def runTask(user: String): Unit = { + override protected def runTask(user: String)(implicit session: Session): Unit = { getRepository(owner, repoName.replaceFirst("\\.wiki\\Z", ""), baseUrl).foreach { repositoryInfo => if(!repositoryInfo.repository.isPrivate || isWritableUser(user, repositoryInfo)){ using(Git.open(getRepositoryDir(owner, repoName))) { git => @@ -99,7 +100,7 @@ class GitReceivePack(context: ServletContext, owner: String, repoName: String, baseUrl: String) extends GitCommand(context, owner, repoName) with SystemSettingsService with RepositoryService with AccountService { - override protected def runTask(user: String): Unit = { + override protected def runTask(user: String)(implicit session: Session): Unit = { getRepository(owner, repoName.replaceFirst("\\.wiki\\Z", ""), baseUrl).foreach { repositoryInfo => if(isWritableUser(user, repositoryInfo)){ using(Git.open(getRepositoryDir(owner, repoName))) { git => diff --git a/src/main/scala/ssh/PublicKeyAuthenticator.scala b/src/main/scala/ssh/PublicKeyAuthenticator.scala index a9ea634..4ec81d8 100644 --- a/src/main/scala/ssh/PublicKeyAuthenticator.scala +++ b/src/main/scala/ssh/PublicKeyAuthenticator.scala @@ -10,7 +10,7 @@ class PublicKeyAuthenticator(context: ServletContext) extends PublickeyAuthenticator with SshKeyService { override def authenticate(username: String, key: PublicKey, session: ServerSession): Boolean = { - Database(context) withTransaction { + Database(context) withTransaction { implicit session => getPublicKeys(username).exists { sshKey => SshUtil.str2PublicKey(sshKey.publicKey) match { case Some(publicKey) => key.equals(publicKey) diff --git a/src/main/scala/util/Notifier.scala b/src/main/scala/util/Notifier.scala index 21dfce6..8758ef9 100644 --- a/src/main/scala/util/Notifier.scala +++ b/src/main/scala/util/Notifier.scala @@ -10,12 +10,13 @@ import servlet.Database import SystemSettingsService.Smtp import _root_.util.ControlUtil.defining +import model.profile.simple.Session trait Notifier extends RepositoryService with AccountService with IssuesService { def toNotify(r: RepositoryService.RepositoryInfo, issueId: Int, content: String) (msg: String => String)(implicit context: Context): Unit - protected def recipients(issue: model.Issue)(notify: String => Unit)(implicit context: Context) = + protected def recipients(issue: model.Issue)(notify: String => Unit)(implicit session: Session, context: Context) = ( // individual repository's owner issue.userName :: @@ -70,7 +71,7 @@ val f = future { // TODO Can we use the Database Session in other than Transaction Filter? - database withSession { + database withSession { implicit session => getIssue(r.owner, r.name, issueId.toString) foreach { issue => defining( s"[${r.name}] ${issue.title} (#${issueId})" ->