Merge pull request #2355 from gitbucket/scalatra-2.7

Bump to Scala 2.13 and Scalatra 2.7
This commit is contained in:
Naoki Takezoe
2019-08-05 02:14:52 +09:00
committed by GitHub
53 changed files with 334 additions and 298 deletions

View File

@@ -4,7 +4,7 @@ import com.typesafe.sbt.pgp.PgpKeys._
val Organization = "io.github.gitbucket"
val Name = "gitbucket"
val GitBucketVersion = "4.31.2"
val ScalatraVersion = "2.6.3"
val ScalatraVersion = "2.7.0-RC1"
val JettyVersion = "9.4.14.v20181114"
val JgitVersion = "5.2.0.201812061821-r"
@@ -17,7 +17,7 @@ sourcesInBase := false
organization := Organization
name := Name
version := GitBucketVersion
scalaVersion := "2.12.8"
scalaVersion := "2.13.0"
scalafmtOnCompile := true
@@ -38,7 +38,7 @@ libraryDependencies ++= Seq(
"org.scalatra" %% "scalatra" % ScalatraVersion,
"org.scalatra" %% "scalatra-json" % ScalatraVersion,
"org.scalatra" %% "scalatra-forms" % ScalatraVersion,
"org.json4s" %% "json4s-jackson" % "3.5.2",
"org.json4s" %% "json4s-jackson" % "3.6.7",
"commons-io" % "commons-io" % "2.6",
"io.github.gitbucket" % "solidbase" % "1.0.3",
"io.github.gitbucket" % "markedj" % "1.0.16",
@@ -47,7 +47,7 @@ libraryDependencies ++= Seq(
"org.apache.httpcomponents" % "httpclient" % "4.5.6",
"org.apache.sshd" % "apache-sshd" % "2.1.0" exclude ("org.slf4j", "slf4j-jdk14") exclude ("org.apache.sshd", "sshd-mina") exclude ("org.apache.sshd", "sshd-netty"),
"org.apache.tika" % "tika-core" % "1.19.1",
"com.github.takezoe" %% "blocking-slick-32" % "0.0.11",
"com.github.takezoe" %% "blocking-slick-32" % "0.0.12",
"com.novell.ldap" % "jldap" % "2009-10-07",
"com.h2database" % "h2" % "1.4.197",
"org.mariadb.jdbc" % "mariadb-java-client" % "2.4.2",
@@ -59,7 +59,7 @@ libraryDependencies ++= Seq(
"fr.brouillard.oss.security.xhub" % "xhub4j-core" % "1.1.0",
"com.github.bkromhout" % "java-diff-utils" % "2.1.1",
"org.cache2k" % "cache2k-all" % "1.2.0.Final",
"com.enragedginger" %% "akka-quartz-scheduler" % "1.7.0-akka-2.5.x" exclude ("c3p0", "c3p0") exclude ("com.zaxxer", "HikariCP-java6"),
"com.enragedginger" %% "akka-quartz-scheduler" % "1.8.1-akka-2.5.x" exclude ("com.mchange", "c3p0") exclude ("com.zaxxer", "HikariCP-java6"),
"net.coobird" % "thumbnailator" % "0.4.8",
"com.github.zafarkhaja" % "java-semver" % "0.9.0",
"com.nimbusds" % "oauth2-oidc-sdk" % "5.64.4",
@@ -77,7 +77,7 @@ libraryDependencies ++= Seq(
)
// Compiler settings
scalacOptions := Seq("-deprecation", "-language:postfixOps", "-opt:l:method", "-Xfuture")
scalacOptions := Seq("-deprecation", "-language:postfixOps", "-opt:l:method")
javacOptions in compile ++= Seq("-target", "8", "-source", "8")
javaOptions in Jetty += "-Dlogback.configurationFile=/logback-dev.xml"

View File

@@ -29,7 +29,7 @@ To build war file, run the following command:
$ sbt package
```
`gitbucket_2.12-x.x.x.war` is generated into `target/scala-2.12`.
`gitbucket_2.13-x.x.x.war` is generated into `target/scala-2.13`.
To build an executable war file, run
@@ -58,4 +58,4 @@ If you don't have docker, you can skip docker tests which require docker as foll
```shell
$ sbt "testOnly * -- -l ExternalDBTest"
```
```

View File

@@ -5,7 +5,6 @@ import java.io.File
import gitbucket.core.account.html
import gitbucket.core.helper
import gitbucket.core.model._
import gitbucket.core.plugin.PluginRegistry
import gitbucket.core.service._
import gitbucket.core.service.WebHookService._
import gitbucket.core.ssh.SshUtil
@@ -347,7 +346,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
updateImage(userName, form.fileId, form.clearImage)
updateAccountExtraMailAddresses(userName, form.extraMailAddresses.filter(_ != ""))
flash += "info" -> "Account information has been updated."
flash.update("info", "Account information has been updated.")
redirect(s"/${userName}/_edit")
} getOrElse NotFound()
@@ -359,7 +358,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
getAccountByUserName(userName, true).map {
account =>
if (isLastAdministrator(account)) {
flash += "error" -> "Account can't be removed because this is last one administrator."
flash.update("error", "Account can't be removed because this is last one administrator.")
redirect(s"/${userName}/_edit")
} else {
// // Remove repositories
@@ -439,7 +438,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
val userName = params("userName")
getAccountByUserName(userName).map { x =>
val (tokenId, token) = generateAccessToken(userName, form.note)
flash += "generatedToken" -> (tokenId, token)
flash.update("generatedToken", (tokenId, token))
}
redirect(s"/${userName}/_application")
})
@@ -475,7 +474,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
post("/:userName/_hooks/new", accountWebHookForm(false))(managersOnly { form =>
val userName = params("userName")
addAccountWebHook(userName, form.url, form.events, form.ctype, form.token)
flash += "info" -> s"Webhook ${form.url} created"
flash.update("info", s"Webhook ${form.url} created")
redirect(s"/${userName}/_hooks")
})
@@ -485,7 +484,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
get("/:userName/_hooks/delete")(managersOnly {
val userName = params("userName")
deleteAccountWebHook(userName, params("url"))
flash += "info" -> s"Webhook ${params("url")} deleted"
flash.update("info", s"Webhook ${params("url")} deleted")
redirect(s"/${userName}/_hooks")
})
@@ -508,7 +507,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
post("/:userName/_hooks/edit", accountWebHookForm(true))(managersOnly { form =>
val userName = params("userName")
updateAccountWebHook(userName, form.url, form.events, form.ctype, form.token)
flash += "info" -> s"webhook ${form.url} updated"
flash.update("info", s"webhook ${form.url} updated")
redirect(s"/${userName}/_hooks")
})
@@ -543,7 +542,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
case e: java.net.UnknownHostException => Map("error" -> ("Unknown host " + e.getMessage))
case e: java.lang.IllegalArgumentException => Map("error" -> ("invalid url"))
case e: org.apache.http.client.ClientProtocolException => Map("error" -> ("invalid url"))
case NonFatal(e) => Map("error" -> (e.getClass + " " + e.getMessage))
case NonFatal(e) => Map("error" -> (s"${e.getClass} ${e.getMessage}"))
}
contentType = formats("json")
@@ -683,7 +682,7 @@ trait AccountControllerBase extends AccountManagementControllerBase {
updateImage(form.groupName, form.fileId, form.clearImage)
flash += "info" -> "Account information has been updated."
flash.update("info", "Account information has been updated.")
redirect(s"/${groupName}/_editgroup")
} getOrElse NotFound()

View File

@@ -20,6 +20,7 @@ import javax.servlet.{FilterChain, ServletRequest, ServletResponse}
import is.tagomor.woothee.Classifier
import scala.util.Try
import scala.util.Using
import net.coobird.thumbnailator.Thumbnails
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.ObjectId
@@ -240,7 +241,7 @@ abstract class ControllerBase
case false => None
}
using(new TreeWalk(git.getRepository)) { treeWalk =>
Using.resource(new TreeWalk(git.getRepository)) { treeWalk =>
treeWalk.addTree(revCommit.getTree)
treeWalk.setRecursive(true)
_getPathObjectId(path, treeWalk)
@@ -268,7 +269,7 @@ abstract class ControllerBase
response.setContentLength(attrs("size").toInt)
val oid = attrs("oid").split(":")(1)
using(new FileInputStream(FileUtil.getLfsFilePath(repository.owner, repository.name, oid))) { in =>
Using.resource(new FileInputStream(FileUtil.getLfsFilePath(repository.owner, repository.name, oid))) { in =>
IOUtils.copy(in, response.getOutputStream)
}
} else {
@@ -365,7 +366,7 @@ trait AccountManagementControllerBase extends ControllerBase {
params: Map[String, Seq[String]],
messages: Messages
): Option[String] = {
val extraMailAddresses = params.filterKeys(k => k.startsWith("extraMailAddresses"))
val extraMailAddresses = params.view.filterKeys(k => k.startsWith("extraMailAddresses"))
if (extraMailAddresses.exists {
case (k, v) =>
v.contains(value)
@@ -388,7 +389,7 @@ trait AccountManagementControllerBase extends ControllerBase {
params: Map[String, Seq[String]],
messages: Messages
): Option[String] = {
val extraMailAddresses = params.filterKeys(k => k.startsWith("extraMailAddresses"))
val extraMailAddresses = params.view.filterKeys(k => k.startsWith("extraMailAddresses"))
if (Some(value) == params.optionValue("mailAddress") || extraMailAddresses.count {
case (k, v) =>
v.contains(value)

View File

@@ -16,6 +16,8 @@ import org.scalatra._
import org.scalatra.servlet.{FileItem, FileUploadSupport, MultipartConfig}
import org.apache.commons.io.{FileUtils, IOUtils}
import scala.util.Using
/**
* Provides Ajax based file upload functionality.
*
@@ -80,7 +82,7 @@ class FileUploadController
{ (file, fileId) =>
val fileName = file.getName
LockUtil.lock(s"${owner}/${repository}/wiki") {
using(Git.open(Directory.getWikiRepositoryDir(owner, repository))) {
Using.resource(Git.open(Directory.getWikiRepositoryDir(owner, repository))) {
git =>
val builder = DirCache.newInCore.builder()
val inserter = git.getRepository.newObjectInserter()

View File

@@ -83,7 +83,7 @@ trait IndexControllerBase extends ControllerBase {
get("/signin") {
val redirect = params.get("redirect")
if (redirect.isDefined && redirect.get.startsWith("/")) {
flash += Keys.Flash.Redirect -> redirect.get
flash.update(Keys.Flash.Redirect, redirect.get)
}
gitbucket.core.html.signin(flash.get("userName"), flash.get("password"), flash.get("error"))
}
@@ -96,9 +96,9 @@ trait IndexControllerBase extends ControllerBase {
case _ => signin(account)
}
case None =>
flash += "userName" -> form.userName
flash += "password" -> form.password
flash += "error" -> "Sorry, your Username and/or Password is incorrect. Please try again."
flash.update("userName", form.userName)
flash.update("password", form.password)
flash.update("error", "Sorry, your Username and/or Password is incorrect. Please try again.")
redirect("/signin")
}
}
@@ -132,15 +132,15 @@ trait IndexControllerBase extends ControllerBase {
val redirectURI = new URI(s"$baseUrl/signin/oidc")
session.get(Keys.Session.OidcContext) match {
case Some(context: OidcContext) =>
authenticate(params, redirectURI, context.state, context.nonce, oidc) map { account =>
authenticate(params.toMap, redirectURI, context.state, context.nonce, oidc).map { account =>
signin(account, context.redirectBackURI)
} orElse {
flash += "error" -> "Sorry, authentication failed. Please try again."
flash.update("error", "Sorry, authentication failed. Please try again.")
session.invalidate()
redirect("/signin")
}
case _ =>
flash += "error" -> "Sorry, something wrong. Please try again."
flash.update("error", "Sorry, something wrong. Please try again.")
session.invalidate()
redirect("/signin")
}
@@ -227,7 +227,7 @@ trait IndexControllerBase extends ControllerBase {
} getOrElse ""
})
// TODO Move to RepositoryViwerController?
// TODO Move to RepositoryViewrController?
get("/:owner/:repository/search")(referrersOnly { repository =>
defining(params.getOrElse("q", "").trim, params.getOrElse("type", "code")) {
case (query, target) =>

View File

@@ -145,7 +145,7 @@ trait IssuesControllerBase extends ControllerBase {
form.assignedUserName,
form.milestoneId,
form.priorityId,
form.labelNames.toArray.flatMap(_.split(",")),
form.labelNames.toSeq.flatMap(_.split(",")),
context.loginAccount.get
)

View File

@@ -1,7 +1,5 @@
package gitbucket.core.controller
import gitbucket.core.model.{CommitComment, CommitComments, IssueComment, WebHook}
import gitbucket.core.plugin.PluginRegistry
import gitbucket.core.pulls.html
import gitbucket.core.service.CommitStatusService
import gitbucket.core.service.MergeService
@@ -15,11 +13,9 @@ import gitbucket.core.util.Implicits._
import gitbucket.core.util._
import org.scalatra.forms._
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.{ObjectId, PersonIdent}
import org.eclipse.jgit.revwalk.RevWalk
import org.scalatra.BadRequest
import scala.collection.JavaConverters._
import scala.util.Using
class PullRequestsController
extends PullRequestsControllerBase
@@ -136,7 +132,7 @@ trait PullRequestsControllerBase extends ControllerBase {
hasDeveloperRole(pullreq.requestUserName, pullreq.requestRepositoryName, context.loginAccount),
repository,
getRepository(pullreq.requestUserName, pullreq.requestRepositoryName),
flash.toMap.map(f => f._1 -> f._2.toString)
flash.iterator.map(f => f._1 -> f._2.toString).toMap
)
// html.pullreq(
@@ -269,11 +265,11 @@ trait PullRequestsControllerBase extends ControllerBase {
val repository = getRepository(owner, name).get
val branchProtection = getProtectedBranchInfo(owner, name, pullreq.requestBranch)
if (branchProtection.enabled) {
flash += "error" -> s"branch ${pullreq.requestBranch} is protected."
flash.update("error", s"branch ${pullreq.requestBranch} is protected.")
} else {
if (repository.repository.defaultBranch != pullreq.requestBranch) {
val userName = context.loginAccount.get.userName
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
git.branchDelete().setForce(true).setBranchNames(pullreq.requestBranch).call()
recordDeleteBranchActivity(repository.owner, repository.name, userName, pullreq.requestBranch)
}
@@ -286,7 +282,7 @@ trait PullRequestsControllerBase extends ControllerBase {
"delete_branch"
)
} else {
flash += "error" -> s"""Can't delete the default branch "${pullreq.requestBranch}"."""
flash.update("error", s"""Can't delete the default branch "${pullreq.requestBranch}".""")
}
}
@@ -307,7 +303,7 @@ trait PullRequestsControllerBase extends ControllerBase {
} yield {
val branchProtection = getProtectedBranchInfo(owner, name, pullreq.requestBranch)
if (branchProtection.needStatusCheck(loginAccount.userName)) {
flash += "error" -> s"branch ${pullreq.requestBranch} is protected need status check."
flash.update("error", s"branch ${pullreq.requestBranch} is protected need status check.")
} else {
LockUtil.lock(s"${owner}/${name}") {
val alias =
@@ -316,9 +312,11 @@ trait PullRequestsControllerBase extends ControllerBase {
} else {
s"${pullreq.userName}:${pullreq.branch}"
}
val existIds = using(Git.open(Directory.getRepositoryDir(owner, name))) { git =>
JGitUtil.getAllCommitIds(git)
}.toSet
val existIds = Using
.resource(Git.open(Directory.getRepositoryDir(owner, name))) { git =>
JGitUtil.getAllCommitIds(git)
}
.toSet
pullRemote(
repository,
pullreq.requestBranch,
@@ -329,11 +327,11 @@ trait PullRequestsControllerBase extends ControllerBase {
Some(pullreq)
) match {
case None => // conflict
flash += "error" -> s"Can't automatic merging branch '${alias}' into ${pullreq.requestBranch}."
flash.update("error", s"Can't automatic merging branch '${alias}' into ${pullreq.requestBranch}.")
case Some(oldId) =>
// update pull request
updatePullRequests(owner, name, pullreq.requestBranch, loginAccount, "synchronize")
flash += "info" -> s"Merge branch '${alias}' into ${pullreq.requestBranch}"
flash.update("info", s"Merge branch '${alias}' into ${pullreq.requestBranch}")
}
}
}
@@ -372,7 +370,7 @@ trait PullRequestsControllerBase extends ControllerBase {
case (Some(originUserName), Some(originRepositoryName)) => {
getRepository(originUserName, originRepositoryName).map {
originRepository =>
using(
Using.resources(
Git.open(getRepositoryDir(originUserName, originRepositoryName)),
Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name))
) { (oldGit, newGit) =>
@@ -388,7 +386,7 @@ trait PullRequestsControllerBase extends ControllerBase {
} getOrElse NotFound()
}
case _ => {
using(Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name))) { git =>
JGitUtil.getDefaultBranch(git, forkedRepository).map {
case (_, defaultBranch) =>
redirect(
@@ -510,7 +508,7 @@ trait PullRequestsControllerBase extends ControllerBase {
}
};
originRepository <- getRepository(originOwner, originRepositoryName)) yield {
using(
Using.resources(
Git.open(getRepositoryDir(originRepository.owner, originRepository.name)),
Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name))
) {
@@ -585,7 +583,7 @@ trait PullRequestsControllerBase extends ControllerBase {
context.loginAccount.map(x => Seq(x.mailAddress) ++ getAccountExtraMailAddresses(x.userName)).getOrElse(Nil)
val branches =
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
JGitUtil
.getBranches(

View File

@@ -106,7 +106,7 @@ trait ReleaseControllerBase extends ControllerBase {
createRelease(repository.owner, repository.name, form.name, form.content, tagName, loginAccount)
// Insert into RELEASE_ASSET
val files = params.collect {
val files = params.toMap.collect {
case (name, value) if name.startsWith("file:") =>
val Array(_, fileId) = name.split(":")
(fileId, value)
@@ -174,7 +174,7 @@ trait ReleaseControllerBase extends ControllerBase {
val assets = getReleaseAssets(repository.owner, repository.name, tagName)
deleteReleaseAssets(repository.owner, repository.name, tagName)
val files = params.collect {
val files = params.toMap.collect {
case (name, value) if name.startsWith("file:") =>
val Array(_, fileId) = name.split(":")
(fileId, value)

View File

@@ -12,12 +12,14 @@ import gitbucket.core.util.JGitUtil._
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.Implicits._
import gitbucket.core.util.Directory._
import gitbucket.core.model.WebHookContentType
import org.scalatra.forms._
import org.scalatra.i18n.Messages
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.Constants
import org.eclipse.jgit.lib.ObjectId
import gitbucket.core.model.WebHookContentType
import scala.util.Using
class RepositorySettingsController
extends RepositorySettingsControllerBase
@@ -147,7 +149,7 @@ trait RepositorySettingsControllerBase extends ControllerBase {
// Update database
renameRepository(repository.owner, repository.name, repository.owner, form.repositoryName)
}
flash += "info" -> "Repository settings has been updated."
flash.update("info", "Repository settings has been updated.")
redirect(s"/${repository.owner}/${form.repositoryName}/settings/options")
})
@@ -164,10 +166,10 @@ trait RepositorySettingsControllerBase extends ControllerBase {
} else {
saveRepositoryDefaultBranch(repository.owner, repository.name, form.defaultBranch)
// Change repository HEAD
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
git.getRepository.updateRef(Constants.HEAD, true).link(Constants.R_HEADS + form.defaultBranch)
}
flash += "info" -> "Repository default branch has been updated."
flash.update("info", "Repository default branch has been updated.")
redirect(s"/${repository.owner}/${repository.name}/settings/branches")
}
})
@@ -231,7 +233,7 @@ trait RepositorySettingsControllerBase extends ControllerBase {
*/
post("/:owner/:repository/settings/hooks/new", webHookForm(false))(ownerOnly { (form, repository) =>
addWebHook(repository.owner, repository.name, form.url, form.events, form.ctype, form.token)
flash += "info" -> s"Webhook ${form.url} created"
flash.update("info", s"Webhook ${form.url} created")
redirect(s"/${repository.owner}/${repository.name}/settings/hooks")
})
@@ -240,7 +242,7 @@ trait RepositorySettingsControllerBase extends ControllerBase {
*/
get("/:owner/:repository/settings/hooks/delete")(ownerOnly { repository =>
deleteWebHook(repository.owner, repository.name, params("url"))
flash += "info" -> s"Webhook ${params("url")} deleted"
flash.update("info", s"Webhook ${params("url")} deleted")
redirect(s"/${repository.owner}/${repository.name}/settings/hooks")
})
@@ -252,11 +254,11 @@ trait RepositorySettingsControllerBase extends ControllerBase {
Array(h.getName, h.getValue)
}
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
import scala.collection.JavaConverters._
import scala.concurrent.duration._
import scala.concurrent._
import scala.jdk.CollectionConverters._
import scala.util.control.NonFatal
import org.apache.http.util.EntityUtils
import scala.concurrent.ExecutionContext.Implicits.global
@@ -298,7 +300,7 @@ trait RepositorySettingsControllerBase extends ControllerBase {
case e: java.net.UnknownHostException => Map("error" -> ("Unknown host " + e.getMessage))
case e: java.lang.IllegalArgumentException => Map("error" -> ("invalid url"))
case e: org.apache.http.client.ClientProtocolException => Map("error" -> ("invalid url"))
case NonFatal(e) => Map("error" -> (e.getClass + " " + e.getMessage))
case NonFatal(e) => Map("error" -> (s"${e.getClass} ${e.getMessage}"))
}
contentType = formats("json")
@@ -350,7 +352,7 @@ trait RepositorySettingsControllerBase extends ControllerBase {
*/
post("/:owner/:repository/settings/hooks/edit", webHookForm(true))(ownerOnly { (form, repository) =>
updateWebHook(repository.owner, repository.name, form.url, form.events, form.ctype, form.token)
flash += "info" -> s"webhook ${form.url} updated"
flash.update("info", s"webhook ${form.url} updated")
redirect(s"/${repository.owner}/${repository.name}/settings/hooks")
})
@@ -386,11 +388,11 @@ trait RepositorySettingsControllerBase extends ControllerBase {
*/
post("/:owner/:repository/settings/gc")(ownerOnly { repository =>
LockUtil.lock(s"${repository.owner}/${repository.name}") {
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
git.gc().call()
}
}
flash += "info" -> "Garbage collection has been executed."
flash.update("info", "Garbage collection has been executed.")
redirect(s"/${repository.owner}/${repository.name}/settings/danger")
})

View File

@@ -2,6 +2,7 @@ package gitbucket.core.controller
import java.io.File
import scala.util.Using
import javax.servlet.http.{HttpServletRequest, HttpServletResponse}
import gitbucket.core.plugin.PluginRegistry
import gitbucket.core.repo.html
@@ -258,11 +259,11 @@ trait RepositoryViewerControllerBase extends ControllerBase {
def getSummary(statuses: List[CommitStatus]): (CommitState, String) = {
val stateMap = statuses.groupBy(_.state)
val state = CommitState.combine(stateMap.keySet)
val summary = stateMap.map { case (keyState, states) => states.size + " " + keyState.name }.mkString(", ")
val summary = stateMap.map { case (keyState, states) => s"${states.size} ${keyState.name}" }.mkString(", ")
state -> summary
}
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
def getTags(sha: String): List[String] = {
JGitUtil.getTagsOnCommit(git, sha)
@@ -315,7 +316,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
val protectedBranch = getProtectedBranchInfo(repository.owner, repository.name, branch)
.needStatusCheck(context.loginAccount.get.userName)
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(branch))
html.editor(
@@ -351,7 +352,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
repository = repository,
branch = form.branch,
path = form.path,
files = files,
files = files.toIndexedSeq,
message = form.message.getOrElse("Add files via upload"),
loginAccount = context.loginAccount.get
) {
@@ -384,7 +385,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
val protectedBranch = getProtectedBranchInfo(repository.owner, repository.name, branch)
.needStatusCheck(context.loginAccount.get.userName)
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(branch))
@@ -411,7 +412,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
get("/:owner/:repository/remove/*")(writableUsersOnly { repository =>
val (branch, path) = repository.splitPath(multiParams("splat").head)
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(branch))
@@ -487,8 +488,6 @@ trait RepositoryViewerControllerBase extends ControllerBase {
loginAccount = context.loginAccount.get
)
println(form.path)
redirect(
s"/${repository.owner}/${repository.name}/tree/${form.branch}${if (form.path.length == 0) "" else "/" + form.path}"
)
@@ -496,7 +495,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
get("/:owner/:repository/raw/*")(referrersOnly { repository =>
val (id, path) = repository.splitPath(multiParams("splat").head)
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id))
getPathObjectId(git, path, revCommit).map { objectId =>
@@ -511,7 +510,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
val blobRoute = get("/:owner/:repository/blob/*")(referrersOnly { repository =>
val (id, path) = repository.splitPath(multiParams("splat").head)
val raw = params.get("raw").getOrElse("false").toBoolean
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id))
getPathObjectId(git, path, revCommit).map {
@@ -551,7 +550,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
ajaxGet("/:owner/:repository/get-blame/*")(referrersOnly { repository =>
val (id, path) = repository.splitPath(multiParams("splat").head)
contentType = formats("json")
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
val last = git.log.add(git.getRepository.resolve(id)).addPath(path).setMaxCount(1).call.iterator.next.name
Serialization.write(
@@ -586,7 +585,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
val id = params("id")
try {
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
defining(JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id))) {
revCommit =>
@@ -615,7 +614,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
get("/:owner/:repository/patch/:id")(referrersOnly { repository =>
try {
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
val diff = JGitUtil.getPatch(git, None, params("id"))
contentType = formats("txt")
diff
@@ -628,7 +627,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
get("/:owner/:repository/patch/*...*")(referrersOnly { repository =>
try {
val Seq(fromId, toId) = multiParams("splat")
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
val diff = JGitUtil.getPatch(git, Some(fromId), toId)
contentType = formats("txt")
diff
@@ -748,7 +747,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
*/
get("/:owner/:repository/branches")(referrersOnly { repository =>
val protectedBranches = getProtectedBranchList(repository.owner, repository.name).toSet
val branches = using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
val branches = Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
JGitUtil
.getBranches(
@@ -788,14 +787,14 @@ trait RepositoryViewerControllerBase extends ControllerBase {
* Creates a tag.
*/
post("/:owner/:repository/tag", tagForm)(writableUsersOnly { (form, repository) =>
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
JGitUtil.createTag(git, form.tagName, form.message, form.commitId)
} match {
case Right(message) =>
flash += "info" -> message
flash.update("info", message)
redirect(s"/${repository.owner}/${repository.name}/commit/${form.commitId}")
case Left(message) =>
flash += "error" -> message
flash.update("error", message)
redirect(s"/${repository.owner}/${repository.name}/commit/${form.commitId}")
}
})
@@ -806,16 +805,16 @@ trait RepositoryViewerControllerBase extends ControllerBase {
post("/:owner/:repository/branches")(writableUsersOnly { repository =>
val newBranchName = params.getOrElse("new", halt(400))
val fromBranchName = params.getOrElse("from", halt(400))
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
JGitUtil.createBranch(git, fromBranchName, newBranchName)
} match {
case Right(message) =>
flash += "info" -> message
flash.update("info", message)
redirect(
s"/${repository.owner}/${repository.name}/tree/${StringUtil.urlEncode(newBranchName).replace("%2F", "/")}"
)
case Left(message) =>
flash += "error" -> message
flash.update("error", message)
redirect(s"/${repository.owner}/${repository.name}/tree/${fromBranchName}")
}
})
@@ -827,7 +826,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
val branchName = multiParams("splat").head
val userName = context.loginAccount.get.userName
if (repository.repository.defaultBranch != branchName) {
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
git.branchDelete().setForce(true).setBranchNames(branchName).call()
recordDeleteBranchActivity(repository.owner, repository.name, userName, branchName)
}
@@ -879,7 +878,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
* Displays the file find of branch.
*/
get("/:owner/:repository/find/*")(referrersOnly { repository =>
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
val ref = multiParams("splat").head
JGitUtil.getTreeId(git, ref).map { treeId =>
html.find(ref, treeId, repository)
@@ -891,7 +890,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
* Get all file list of branch.
*/
ajaxGet("/:owner/:repository/tree-list/:tree")(referrersOnly { repository =>
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
val treeId = params("tree")
contentType = formats("json")
Map("paths" -> JGitUtil.getAllFileListByTreeId(git, treeId))
@@ -915,7 +914,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
* @return HTML of the file list
*/
private def fileList(repository: RepositoryService.RepositoryInfo, revstr: String = "", path: String = ".") = {
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
if (JGitUtil.isEmpty(git)) {
html.guide(repository, hasDeveloperRole(repository.owner, repository.name, context.loginAccount))
} else {
@@ -974,16 +973,16 @@ trait RepositoryViewerControllerBase extends ControllerBase {
def archive(revision: String, archiveFormat: String, archive: ArchiveOutputStream)(
entryCreator: (String, Long, java.util.Date, Int) => ArchiveEntry
): Unit = {
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
val oid = git.getRepository.resolve(revision)
val commit = JGitUtil.getRevCommitFromId(git, oid)
val date = commit.getCommitterIdent.getWhen
val sha1 = oid.getName()
val repositorySuffix = (if (sha1.startsWith(revision)) sha1 else revision).replace('/', '-')
val pathSuffix = if (path.isEmpty) "" else '-' + path.replace('/', '-')
val pathSuffix = if (path.isEmpty) "" else s"-${path.replace('/', '-')}"
val baseName = repository.name + "-" + repositorySuffix + pathSuffix
using(new TreeWalk(git.getRepository)) { treeWalk =>
Using.resource(new TreeWalk(git.getRepository)) { treeWalk =>
treeWalk.addTree(commit.getTree)
treeWalk.setRecursive(true)
if (!path.isEmpty) {
@@ -1032,7 +1031,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
)
contentType = "application/octet-stream"
response.setBufferSize(1024 * 1024)
using(new ZipArchiveOutputStream(response.getOutputStream)) { zip =>
Using.resource(new ZipArchiveOutputStream(response.getOutputStream)) { zip =>
archive(revision, ".zip", zip) { (path, size, date, mode) =>
val entry = new ZipArchiveEntry(path)
entry.setUnixMode(mode)
@@ -1048,12 +1047,12 @@ trait RepositoryViewerControllerBase extends ControllerBase {
)
contentType = "application/octet-stream"
response.setBufferSize(1024 * 1024)
using(compressor match {
Using.resource(compressor match {
case "gz" => new GzipCompressorOutputStream(response.getOutputStream)
case "bz2" => new BZip2CompressorOutputStream(response.getOutputStream)
case "xz" => new XZCompressorOutputStream(response.getOutputStream)
}) { compressorOutputStream =>
using(new TarArchiveOutputStream(compressorOutputStream)) { tar =>
Using.resource(new TarArchiveOutputStream(compressorOutputStream)) { tar =>
tar.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR)
tar.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU)
tar.setAddPaxHeadersForNonAsciiNames(true)
@@ -1081,7 +1080,7 @@ trait RepositoryViewerControllerBase extends ControllerBase {
val branch = params("branch")
LockUtil.lock(s"${owner}/${repository}") {
using(Git.open(getRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(getRepositoryDir(owner, repository))) { git =>
val headName = s"refs/heads/${branch}"
val headTip = git.getRepository.resolve(headName)
if (headTip.getName != value) {

View File

@@ -19,6 +19,7 @@ import org.scalatra.forms._
import org.scalatra.i18n.Messages
import scala.collection.mutable.ListBuffer
import scala.util.Using
class SystemSettingsController
extends SystemSettingsControllerBase
@@ -225,30 +226,30 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
val conn = request2Session(request).conn
val meta = conn.getMetaData
val tables = ListBuffer[Table]()
using(meta.getTables(null, "%", "%", Array("TABLE", "VIEW"))) {
Using.resource(meta.getTables(null, "%", "%", Array("TABLE", "VIEW"))) {
rs =>
while (rs.next()) {
val tableName = rs.getString("TABLE_NAME")
val pkColumns = ListBuffer[String]()
using(meta.getPrimaryKeys(null, null, tableName)) { rs =>
Using.resource(meta.getPrimaryKeys(null, null, tableName)) { rs =>
while (rs.next()) {
pkColumns += rs.getString("COLUMN_NAME").toUpperCase
}
}
val columns = ListBuffer[Column]()
using(meta.getColumns(null, "%", tableName, "%")) { rs =>
Using.resource(meta.getColumns(null, "%", tableName, "%")) { rs =>
while (rs.next()) {
val columnName = rs.getString("COLUMN_NAME").toUpperCase
columns += Column(columnName, pkColumns.contains(columnName))
}
}
tables += Table(tableName.toUpperCase, columns)
tables += Table(tableName.toUpperCase, columns.toSeq)
}
}
html.dbviewer(tables)
html.dbviewer(tables.toSeq)
})
post("/admin/dbviewer/_query")(adminOnly {
@@ -259,10 +260,10 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
if (trimmedQuery.nonEmpty) {
try {
val conn = request2Session(request).conn
using(conn.prepareStatement(query)) {
Using.resource(conn.prepareStatement(query)) {
stmt =>
if (trimmedQuery.toUpperCase.startsWith("SELECT")) {
using(stmt.executeQuery()) {
Using.resource(stmt.executeQuery()) {
rs =>
val meta = rs.getMetaData
val columns = for (i <- 1 to meta.getColumnCount) yield {
@@ -305,7 +306,7 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
} SshServer.start(sshAddress, baseUrl)
}
flash += "info" -> "System settings has been updated."
flash.update("info", "System settings has been updated.")
redirect("/admin/system")
})
@@ -333,7 +334,7 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
post("/admin/plugins/_reload")(adminOnly {
PluginRegistry.reload(request.getServletContext(), loadSystemSettings(), request2Session(request).conn)
flash += "info" -> "All plugins were reloaded."
flash.update("info", "All plugins were reloaded.")
redirect("/admin/plugins")
})
@@ -343,7 +344,7 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
if (PluginRegistry().getPlugins().exists(_.pluginId == pluginId)) {
PluginRegistry
.uninstall(pluginId, request.getServletContext, loadSystemSettings(), request2Session(request).conn)
flash += "info" -> s"${pluginId} was uninstalled."
flash.update("info", s"${pluginId} was uninstalled.")
}
redirect("/admin/plugins")
@@ -391,7 +392,7 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
getAccountByUserName(userName, true).map {
account =>
if (account.isAdmin && (form.isRemoved || !form.isAdmin) && isLastAdministrator(account)) {
flash += "error" -> "Account can't be turned off because this is last one administrator."
flash.update("error", "Account can't be turned off because this is last one administrator.")
redirect(s"/admin/users/${userName}/_edituser")
} else {
if (form.isRemoved) {
@@ -516,7 +517,7 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
response.setHeader("Content-Disposition", "attachment; filename=" + file.getName)
response.setContentLength(file.length.toInt)
using(new FileInputStream(file)) { in =>
Using.resource(new FileInputStream(file)) { in =>
IOUtils.copy(in, response.outputStream)
}

View File

@@ -13,6 +13,7 @@ import gitbucket.core.util.Directory._
import org.scalatra.forms._
import org.eclipse.jgit.api.Git
import org.scalatra.i18n.Messages
import scala.util.Using
class WikiController
extends WikiControllerBase
@@ -90,7 +91,7 @@ trait WikiControllerBase extends ControllerBase {
get("/:owner/:repository/wiki/:page/_history")(referrersOnly { repository =>
val pageName = StringUtil.urlDecode(params("page"))
using(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
JGitUtil.getCommitLog(git, "master", path = pageName + ".md") match {
case Right((logs, hasNext)) => html.history(Some(pageName), logs, repository, isEditable(repository))
case Left(_) => NotFound()
@@ -102,7 +103,7 @@ trait WikiControllerBase extends ControllerBase {
val pageName = StringUtil.urlDecode(params("page"))
val Array(from, to) = params("commitId").split("\\.\\.\\.")
using(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
html.compare(
Some(pageName),
from,
@@ -118,7 +119,7 @@ trait WikiControllerBase extends ControllerBase {
get("/:owner/:repository/wiki/_compare/:commitId")(referrersOnly { repository =>
val Array(from, to) = params("commitId").split("\\.\\.\\.")
using(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
html.compare(
None,
from,
@@ -139,7 +140,7 @@ trait WikiControllerBase extends ControllerBase {
if (revertWikiPage(repository.owner, repository.name, from, to, context.loginAccount.get, Some(pageName))) {
redirect(s"/${repository.owner}/${repository.name}/wiki/${StringUtil.urlEncode(pageName)}")
} else {
flash += "info" -> "This patch was not able to be reversed."
flash.update("info", "This patch was not able to be reversed.")
redirect(
s"/${repository.owner}/${repository.name}/wiki/${StringUtil.urlEncode(pageName)}/_compare/${from}...${to}"
)
@@ -154,7 +155,7 @@ trait WikiControllerBase extends ControllerBase {
if (revertWikiPage(repository.owner, repository.name, from, to, context.loginAccount.get, None)) {
redirect(s"/${repository.owner}/${repository.name}/wiki")
} else {
flash += "info" -> "This patch was not able to be reversed."
flash.update("info", "This patch was not able to be reversed.")
redirect(s"/${repository.owner}/${repository.name}/wiki/_compare/${from}...${to}")
}
} else Unauthorized()
@@ -269,7 +270,7 @@ trait WikiControllerBase extends ControllerBase {
})
get("/:owner/:repository/wiki/_history")(referrersOnly { repository =>
using(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
JGitUtil.getCommitLog(git, "master") match {
case Right((logs, hasNext)) => html.history(None, logs, repository, isEditable(repository))
case Left(_) => NotFound()
@@ -279,7 +280,7 @@ trait WikiControllerBase extends ControllerBase {
get("/:owner/:repository/wiki/_blob/*")(referrersOnly { repository =>
val path = multiParams("splat").head
using(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getWikiRepositoryDir(repository.owner, repository.name))) { git =>
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve("master"))
getPathObjectId(git, path, revCommit).map { objectId =>

View File

@@ -3,10 +3,11 @@ import gitbucket.core.api.{ApiObject, ApiRef, JsonFormat}
import gitbucket.core.controller.ControllerBase
import gitbucket.core.util.Directory.getRepositoryDir
import gitbucket.core.util.ReferrerAuthenticator
import gitbucket.core.util.SyntaxSugars.using
import gitbucket.core.util.Implicits._
import org.eclipse.jgit.api.Git
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
import scala.util.Using
trait ApiGitReferenceControllerBase extends ControllerBase {
self: ReferrerAuthenticator =>
@@ -17,7 +18,7 @@ trait ApiGitReferenceControllerBase extends ControllerBase {
*/
get("/api/v3/repos/:owner/:repository/git/refs/*")(referrersOnly { repository =>
val revstr = multiParams("splat").head
using(Git.open(getRepositoryDir(params("owner"), params("repository")))) { git =>
Using.resource(Git.open(getRepositoryDir(params("owner"), params("repository")))) { git =>
val ref = git.getRepository().findRef(revstr)
if (ref != null) {

View File

@@ -13,7 +13,7 @@ import gitbucket.core.util._
import org.eclipse.jgit.api.Git
import org.scalatra.NoContent
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
trait ApiPullRequestControllerBase extends ControllerBase {
self: AccountService

View File

@@ -3,11 +3,11 @@ import gitbucket.core.api._
import gitbucket.core.controller.ControllerBase
import gitbucket.core.service.{AccountService, ProtectedBranchService, RepositoryService}
import gitbucket.core.util._
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.Directory._
import gitbucket.core.util.Implicits._
import gitbucket.core.util.JGitUtil.getBranches
import org.eclipse.jgit.api.Git
import scala.util.Using
trait ApiRepositoryBranchControllerBase extends ControllerBase {
self: RepositoryService
@@ -25,7 +25,7 @@ trait ApiRepositoryBranchControllerBase extends ControllerBase {
* https://developer.github.com/v3/repos/branches/#list-branches
*/
get("/api/v3/repos/:owner/:repository/branches")(referrersOnly { repository =>
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
JsonFormat(
JGitUtil
.getBranches(
@@ -45,7 +45,7 @@ trait ApiRepositoryBranchControllerBase extends ControllerBase {
* https://developer.github.com/v3/repos/branches/#get-branch
*/
get("/api/v3/repos/:owner/:repository/branches/*")(referrersOnly { repository =>
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
(for {
branch <- params.get("splat") if repository.branchList.contains(branch)
@@ -214,7 +214,7 @@ trait ApiRepositoryBranchControllerBase extends ControllerBase {
*/
patch("/api/v3/repos/:owner/:repository/branches/*")(ownerOnly { repository =>
import gitbucket.core.api._
using(Git.open(getRepositoryDir(repository.owner, repository.name))) {
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git =>
(for {
branch <- params.get("splat") if repository.branchList.contains(branch)

View File

@@ -7,9 +7,9 @@ import gitbucket.core.util.Directory.getRepositoryDir
import gitbucket.core.util.Implicits._
import gitbucket.core.util.JGitUtil.CommitInfo
import gitbucket.core.util.{JGitUtil, ReferrerAuthenticator, RepositoryName}
import gitbucket.core.util.SyntaxSugars.using
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.revwalk.RevWalk
import scala.util.Using
trait ApiRepositoryCommitControllerBase extends ControllerBase {
self: AccountService with CommitsService with ReferrerAuthenticator =>
@@ -27,11 +27,11 @@ trait ApiRepositoryCommitControllerBase extends ControllerBase {
val name = repository.name
val sha = params("sha")
using(Git.open(getRepositoryDir(owner, name))) {
Using.resource(Git.open(getRepositoryDir(owner, name))) {
git =>
val repo = git.getRepository
val objectId = repo.resolve(sha)
val commitInfo = using(new RevWalk(repo)) { revWalk =>
val commitInfo = Using.resource(new RevWalk(repo)) { revWalk =>
new CommitInfo(revWalk.parseCommit(objectId))
}

View File

@@ -6,12 +6,12 @@ import gitbucket.core.servlet.Database
import gitbucket.core.util.Directory.getRepositoryDir
import gitbucket.core.util._
import gitbucket.core.util.Implicits._
import gitbucket.core.util.SyntaxSugars.using
import gitbucket.core.model.Profile.profile.blockingApi._
import org.eclipse.jgit.api.Git
import scala.concurrent.Await
import scala.concurrent.duration.Duration
import scala.util.Using
trait ApiRepositoryControllerBase extends ControllerBase {
self: RepositoryService
@@ -193,7 +193,7 @@ trait ApiRepositoryControllerBase extends ControllerBase {
*/
get("/api/v3/repos/:owner/:repository/raw/*")(referrersOnly { repository =>
val (id, path) = repository.splitPath(multiParams("splat").head)
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id))
getPathObjectId(git, path, revCommit).map { objectId =>

View File

@@ -6,10 +6,10 @@ import gitbucket.core.controller.{Context, ControllerBase}
import gitbucket.core.model.{Account, Issue}
import gitbucket.core.service.RepositoryService.RepositoryInfo
import gitbucket.core.service.SystemSettingsService.SystemSettings
import gitbucket.core.util.SyntaxSugars._
import io.github.gitbucket.solidbase.model.Version
import org.apache.sshd.server.command.Command
import play.twirl.api.Html
import scala.util.Using
/**
* Trait for define plugin interface.
@@ -434,7 +434,7 @@ abstract class Plugin {
* Helper method to get a resource from classpath.
*/
protected def fromClassPath(path: String): Array[Byte] =
using(getClass.getClassLoader.getResourceAsStream(path)) { in =>
Using.resource(getClass.getClassLoader.getResourceAsStream(path)) { in =>
val bytes = new Array[Byte](in.available)
in.read(bytes)
bytes

View File

@@ -17,17 +17,15 @@ import gitbucket.core.service.SystemSettingsService
import gitbucket.core.service.SystemSettingsService.SystemSettings
import gitbucket.core.util.DatabaseConfig
import gitbucket.core.util.Directory._
import gitbucket.core.util.HttpClientUtil._
import io.github.gitbucket.solidbase.Solidbase
import io.github.gitbucket.solidbase.manager.JDBCVersionManager
import io.github.gitbucket.solidbase.model.Module
import org.apache.commons.io.FileUtils
import org.apache.http.client.methods.HttpGet
import org.apache.sshd.server.command.Command
import org.slf4j.LoggerFactory
import play.twirl.api.Html
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
class PluginRegistry {
@@ -415,7 +413,6 @@ case class PluginInfo(
class PluginWatchThread(context: ServletContext, dir: String) extends Thread with SystemSettingsService {
import gitbucket.core.model.Profile.profile.blockingApi._
import scala.collection.JavaConverters._
private val logger = LoggerFactory.getLogger(classOf[PluginWatchThread])
@@ -445,7 +442,7 @@ class PluginWatchThread(context: ServletContext, dir: String) extends Thread wit
}
if (events.nonEmpty) {
events.foreach { event =>
logger.info(event.kind + ": " + event.context)
logger.info(s"${event.kind}: ${event.context}")
}
new Thread {
override def run(): Unit = {

View File

@@ -3,14 +3,14 @@ package gitbucket.core.service
import java.io.ByteArrayInputStream
import gitbucket.core.model.GpgKey
import collection.JavaConverters._
import gitbucket.core.model.Profile._
import gitbucket.core.model.Profile.profile.blockingApi._
import org.bouncycastle.bcpg.ArmoredInputStream
import org.bouncycastle.openpgp.PGPPublicKeyRing
import org.bouncycastle.openpgp.bc.BcPGPObjectFactory
import scala.jdk.CollectionConverters._
trait GpgKeyService {
def getGpgPublicKeys(userName: String)(implicit s: Session): List[GpgKey] =
GpgKeys.filter(_.userName === userName.bind).sortBy(_.gpgKeyId).list

View File

@@ -752,7 +752,7 @@ trait IssuesService {
implicit s: Session
): Unit = {
extractIssueId(message).foreach { issueId =>
val content = fromIssue.issueId + ":" + fromIssue.title
val content = s"${fromIssue.issueId}:${fromIssue.title}"
if (getIssue(owner, repository, issueId).isDefined) {
// Not add if refer comment already exist.
if (!getComments(owner, repository, issueId.toInt).exists { x =>

View File

@@ -7,9 +7,6 @@ import gitbucket.core.plugin.PluginRegistry
import gitbucket.core.service.RepositoryService.RepositoryInfo
import gitbucket.core.util.Directory._
import gitbucket.core.util.{JGitUtil, LockUtil}
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.model.Profile._
import gitbucket.core.model.Profile.profile._
import gitbucket.core.model.Profile.profile.blockingApi._
import org.eclipse.jgit.merge.{MergeStrategy, Merger, RecursiveMerger}
import org.eclipse.jgit.api.Git
@@ -18,7 +15,8 @@ import org.eclipse.jgit.errors.NoMergeBaseException
import org.eclipse.jgit.lib.{CommitBuilder, ObjectId, PersonIdent, Repository}
import org.eclipse.jgit.revwalk.{RevCommit, RevWalk}
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
import scala.util.Using
trait MergeService {
self: AccountService
@@ -35,7 +33,7 @@ trait MergeService {
* Returns true if conflict will be caused.
*/
def checkConflict(userName: String, repositoryName: String, branch: String, issueId: Int): Option[String] = {
using(Git.open(getRepositoryDir(userName, repositoryName))) { git =>
Using.resource(Git.open(getRepositoryDir(userName, repositoryName))) { git =>
new MergeCacheInfo(git, branch, issueId).checkConflict()
}
}
@@ -52,7 +50,7 @@ trait MergeService {
branch: String,
issueId: Int
): Option[Option[String]] = {
using(Git.open(getRepositoryDir(userName, repositoryName))) { git =>
Using.resource(Git.open(getRepositoryDir(userName, repositoryName))) { git =>
new MergeCacheInfo(git, branch, issueId).checkConflictCache()
}
}
@@ -99,7 +97,7 @@ trait MergeService {
requestBranch: String,
issueId: Int
): Unit = {
using(Git.open(getRepositoryDir(userName, repositoryName))) { git =>
Using.resource(Git.open(getRepositoryDir(userName, repositoryName))) { git =>
git.fetch
.setRemote(getRepositoryDir(requestUserName, requestRepositoryName).toURI.toString)
.setRefSpecs(new RefSpec(s"refs/heads/${requestBranch}:refs/pull/${issueId}/head"))
@@ -118,7 +116,7 @@ trait MergeService {
remoteRepositoryName: String,
remoteBranch: String
): Either[String, (ObjectId, ObjectId, ObjectId)] = {
using(Git.open(getRepositoryDir(localUserName, localRepositoryName))) { git =>
Using.resource(Git.open(getRepositoryDir(localUserName, localRepositoryName))) { git =>
val remoteRefName = s"refs/heads/${remoteBranch}"
val tmpRefName = s"refs/remote-temp/${remoteUserName}/${remoteRepositoryName}/${remoteBranch}"
val refSpec = new RefSpec(s"${remoteRefName}:${tmpRefName}").setForceUpdate(true)
@@ -177,7 +175,7 @@ trait MergeService {
val remoteRepositoryName = remoteRepository.name
tryMergeRemote(localUserName, localRepositoryName, localBranch, remoteUserName, remoteRepositoryName, remoteBranch).map {
case (newTreeId, oldBaseId, oldHeadId) =>
using(Git.open(getRepositoryDir(localUserName, localRepositoryName))) { git =>
Using.resource(Git.open(getRepositoryDir(localUserName, localRepositoryName))) { git =>
val existIds = JGitUtil.getAllCommitIds(git).toSet
val committer = new PersonIdent(loginAccount.fullName, loginAccount.mailAddress)
@@ -261,7 +259,7 @@ trait MergeService {
getPullRequest(repository.owner, repository.name, issueId)
.map {
case (issue, pullreq) =>
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
// mark issue as merged and close.
val commentId =
createComment(repository.owner, repository.name, loginAccount.userName, issueId, message, "merge")
@@ -280,11 +278,13 @@ trait MergeService {
pullreq.commitIdTo
)
val revCommits = using(new RevWalk(git.getRepository)) { revWalk =>
commits.flatten.map { commit =>
revWalk.parseCommit(git.getRepository.resolve(commit.id))
val revCommits = Using
.resource(new RevWalk(git.getRepository)) { revWalk =>
commits.flatten.map { commit =>
revWalk.parseCommit(git.getRepository.resolve(commit.id))
}
}
}.reverse
.reverse
// merge git repository
(strategy match {
@@ -404,7 +404,7 @@ object MergeService {
mergeCommit.setCommitter(committer)
mergeCommit.setMessage(message)
// insertObject and got mergeCommit Object Id
using(repository.newObjectInserter) { inserter =>
Using.resource(repository.newObjectInserter) { inserter =>
val mergeCommitId = inserter.insert(mergeCommit)
inserter.flush()
mergeCommitId
@@ -472,7 +472,7 @@ object MergeService {
} catch {
case e: NoMergeBaseException => true
}
val mergeTipCommit = using(new RevWalk(repository))(_.parseCommit(mergeTip))
val mergeTipCommit = Using.resource(new RevWalk(repository))(_.parseCommit(mergeTip))
val committer = mergeTipCommit.getCommitterIdent
def _updateBranch(treeId: ObjectId, message: String, branchName: String): Unit = {
@@ -525,10 +525,10 @@ object MergeService {
newCommit
}
val mergeBaseTipCommit = using(new RevWalk(repository))(_.parseCommit(mergeBaseTip))
val mergeBaseTipCommit = Using.resource(new RevWalk(repository))(_.parseCommit(mergeBaseTip))
var previousId = mergeBaseTipCommit.getId
using(repository.newObjectInserter) { inserter =>
Using.resource(repository.newObjectInserter) { inserter =>
commits.foreach { commit =>
val nextCommit = _cloneCommit(commit, previousId, mergeBaseTipCommit.getId)
previousId = inserter.insert(nextCommit)
@@ -544,8 +544,9 @@ object MergeService {
throw new RuntimeException("This pull request can't merge automatically.")
}
val mergeBaseTipCommit = using(new RevWalk(repository))(_.parseCommit(mergeBaseTip))
val mergeBranchHeadCommit = using(new RevWalk(repository))(_.parseCommit(repository.resolve(mergedBranchName)))
val mergeBaseTipCommit = Using.resource(new RevWalk(repository))(_.parseCommit(mergeBaseTip))
val mergeBranchHeadCommit =
Using.resource(new RevWalk(repository))(_.parseCommit(repository.resolve(mergedBranchName)))
// Create squash commit
val mergeCommit = new CommitBuilder()
@@ -556,7 +557,7 @@ object MergeService {
mergeCommit.setMessage(message)
// insertObject and got squash commit Object Id
val newCommitId = using(repository.newObjectInserter) { inserter =>
val newCommitId = Using.resource(repository.newObjectInserter) { inserter =>
val newCommitId = inserter.insert(mergeCommit)
inserter.flush()
newCommitId
@@ -579,7 +580,7 @@ object MergeService {
private def createMergeCommit(treeId: ObjectId, committer: PersonIdent, message: String) =
Util.createMergeCommit(repository, treeId, committer, message, Seq[ObjectId](mergeBaseTip, mergeTip))
private def parseCommit(id: ObjectId) = using(new RevWalk(repository))(_.parseCommit(id))
private def parseCommit(id: ObjectId) = Using.resource(new RevWalk(repository))(_.parseCommit(id))
}

View File

@@ -17,7 +17,7 @@ import gitbucket.core.model.Account
import gitbucket.core.model.Profile.profile.blockingApi._
import org.slf4j.LoggerFactory
import scala.collection.JavaConverters.{asScalaSet, mapAsJavaMap}
import scala.jdk.CollectionConverters._
/**
* Service class for the OpenID Connect authentication.
@@ -101,7 +101,7 @@ trait OpenIDConnectService {
redirectURI: URI
): Option[AuthenticationSuccessResponse] =
try {
AuthenticationResponseParser.parse(redirectURI, mapAsJavaMap(params)) match {
AuthenticationResponseParser.parse(redirectURI, params.asJava) match {
case response: AuthenticationSuccessResponse =>
if (response.getState == state) {
Some(response)
@@ -207,5 +207,5 @@ object OpenIDConnectService {
"RSA" -> Family.RSA,
"ECDSA" -> Family.EC,
"EdDSA" -> Family.ED
).toMap.map { case (name, family) => (name, asScalaSet(family).toSet) }
).toMap.map { case (name, family) => (name, family.asScala.toSet) }
}

View File

@@ -8,7 +8,6 @@ import gitbucket.core.service.RepositoryService.RepositoryInfo
import gitbucket.core.api.JsonFormat
import gitbucket.core.controller.Context
import gitbucket.core.plugin.PluginRegistry
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.Directory._
import gitbucket.core.util.Implicits._
import gitbucket.core.util.JGitUtil
@@ -19,7 +18,8 @@ import gitbucket.core.view.helpers
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.ObjectId
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
import scala.util.Using
trait PullRequestService {
self: IssuesService
@@ -387,7 +387,7 @@ trait PullRequestService {
requestRepositoryName: String,
requestCommitId: String
): (Seq[Seq[CommitInfo]], Seq[DiffInfo]) =
using(
Using.resources(
Git.open(getRepositoryDir(userName, repositoryName)),
Git.open(getRepositoryDir(requestUserName, requestRepositoryName))
) { (oldGit, newGit) =>
@@ -478,7 +478,7 @@ trait PullRequestService {
originId: String,
forkedId: String
): (Option[ObjectId], Option[ObjectId]) = {
using(
Using.resources(
Git.open(getRepositoryDir(originRepository.owner, originRepository.name)),
Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name))
) {
@@ -544,7 +544,7 @@ object PullRequestService {
lazy val commitStateSummary: (CommitState, String) = {
val stateMap = statuses.groupBy(_.state)
val state = CommitState.combine(stateMap.keySet)
val summary = stateMap.map { case (keyState, states) => states.size + " " + keyState.name }.mkString(", ")
val summary = stateMap.map { case (keyState, states) => s"${states.size} ${keyState.name}" }.mkString(", ")
state -> summary
}
lazy val statusesAndRequired: List[(CommitStatus, Boolean)] = statuses.map { s =>

View File

@@ -8,11 +8,11 @@ import gitbucket.core.service.WebHookService.WebHookPushPayload
import gitbucket.core.util.Directory.getRepositoryDir
import gitbucket.core.util.JGitUtil.CommitInfo
import gitbucket.core.util.{JGitUtil, LockUtil}
import gitbucket.core.util.SyntaxSugars.using
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.dircache.{DirCache, DirCacheBuilder}
import org.eclipse.jgit.lib._
import org.eclipse.jgit.transport.{ReceiveCommand, ReceivePack}
import scala.util.Using
trait RepositoryCommitFileService {
self: AccountService with ActivityService with IssuesService with PullRequestService with WebHookPullRequestService =>
@@ -117,7 +117,7 @@ trait RepositoryCommitFileService {
)(implicit s: Session, c: JsonFormat.Context): ObjectId = {
LockUtil.lock(s"${repository.owner}/${repository.name}") {
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git =>
val builder = DirCache.newInCore.builder()
val inserter = git.getRepository.newObjectInserter()
val headName = s"refs/heads/${branch}"

View File

@@ -4,12 +4,12 @@ import gitbucket.core.model.Issue
import gitbucket.core.util._
import gitbucket.core.util.StringUtil
import Directory._
import SyntaxSugars._
import org.eclipse.jgit.revwalk.RevWalk
import org.eclipse.jgit.treewalk.TreeWalk
import org.eclipse.jgit.lib.FileMode
import org.eclipse.jgit.api.Git
import gitbucket.core.model.Profile.profile.blockingApi._
import scala.util.Using
trait RepositorySearchService { self: IssuesService =>
import RepositorySearchService._
@@ -37,12 +37,12 @@ trait RepositorySearchService { self: IssuesService =>
}
def countFiles(owner: String, repository: String, query: String): Int =
using(Git.open(getRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(getRepositoryDir(owner, repository))) { git =>
if (JGitUtil.isEmpty(git)) 0 else searchRepositoryFiles(git, query).length
}
def searchFiles(owner: String, repository: String, query: String): List[FileSearchResult] =
using(Git.open(getRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(getRepositoryDir(owner, repository))) { git =>
if (JGitUtil.isEmpty(git)) {
Nil
} else {
@@ -57,12 +57,12 @@ trait RepositorySearchService { self: IssuesService =>
}
def countWikiPages(owner: String, repository: String, query: String): Int =
using(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
if (JGitUtil.isEmpty(git)) 0 else searchRepositoryFiles(git, query).length
}
def searchWikiPages(owner: String, repository: String, query: String): List[FileSearchResult] =
using(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
if (JGitUtil.isEmpty(git)) {
Nil
} else {

View File

@@ -17,6 +17,7 @@ import org.eclipse.jgit.api.Git
import org.eclipse.jgit.dircache.{DirCache, DirCacheBuilder}
import org.eclipse.jgit.lib.{Repository => _, _}
import org.eclipse.jgit.transport.{ReceiveCommand, ReceivePack}
import scala.util.Using
trait RepositoryService {
self: AccountService =>
@@ -763,7 +764,7 @@ trait RepositoryService {
}
// Get template file from project root. When didn't find, will lookup default folder.
using(Git.open(Directory.getRepositoryDir(repository.owner, repository.name))) { git =>
Using.resource(Git.open(Directory.getRepositoryDir(repository.owner, repository.name))) { git =>
choiceTemplate(JGitUtil.getFileList(git, repository.repository.defaultBranch, "."))
.orElse {
choiceTemplate(JGitUtil.getFileList(git, repository.repository.defaultBranch, ".gitbucket"))

View File

@@ -8,6 +8,7 @@ import gitbucket.core.service.SystemSettingsService._
import gitbucket.core.util.ConfigUtil._
import gitbucket.core.util.Directory._
import gitbucket.core.util.SyntaxSugars._
import scala.util.Using
trait SystemSettingsService {
@@ -70,7 +71,7 @@ trait SystemSettingsService {
props.setProperty(SkinName, settings.skinName.toString)
props.setProperty(ShowMailAddress, settings.showMailAddress.toString)
using(new java.io.FileOutputStream(GitBucketConf)) { out =>
Using.resource(new java.io.FileOutputStream(GitBucketConf)) { out =>
props.store(out, null)
}
}
@@ -79,7 +80,7 @@ trait SystemSettingsService {
def loadSystemSettings(): SystemSettings = {
defining(new java.util.Properties()) { props =>
if (GitBucketConf.exists) {
using(new java.io.FileInputStream(GitBucketConf)) { in =>
Using.resource(new java.io.FileInputStream(GitBucketConf)) { in =>
props.load(in)
}
}

View File

@@ -55,6 +55,7 @@ trait WebHookService {
.map { case (w, t) => w -> t.event }
.list
.groupBy(_._1)
.view
.mapValues(_.map(_._2).toSet)
.toList
.sortBy(_._1.url)
@@ -87,6 +88,7 @@ trait WebHookService {
.map { case (w, t) => w -> t.event }
.list
.groupBy(_._1)
.view
.mapValues(_.map(_._2).toSet)
.headOption
@@ -136,6 +138,7 @@ trait WebHookService {
.map { case (w, t) => w -> t.event }
.list
.groupBy(_._1)
.view
.mapValues(_.map(_._2).toSet)
.toList
.sortBy(_._1.url)
@@ -164,6 +167,7 @@ trait WebHookService {
.map { case (w, t) => w -> t.event }
.list
.groupBy(_._1)
.view
.mapValues(_.map(_._2).toSet)
.headOption
@@ -396,7 +400,7 @@ trait WebHookPullRequestService extends WebHookService {
if wht.event === WebHook.PullRequest.asInstanceOf[WebHook.Event].bind && wht.byRepositoryWebHook(wh)
} yield {
((is, iu, pr, bu, ru), wh)
}).list.groupBy(_._1).mapValues(_.map(_._2))
}).list.groupBy(_._1).map { case (k, v) => (k, v.map(_._2)) }
def callPullRequestWebHookByRequestBranch(
action: String,

View File

@@ -14,7 +14,9 @@ import org.eclipse.jgit.diff.{DiffEntry, DiffFormatter}
import java.io.ByteArrayInputStream
import org.eclipse.jgit.patch._
import org.eclipse.jgit.api.errors.PatchFormatException
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
import scala.util.Using
object WikiService {
@@ -73,7 +75,7 @@ trait WikiService {
* Returns the wiki page.
*/
def getWikiPage(owner: String, repository: String, pageName: String): Option[WikiPageInfo] = {
using(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
if (!JGitUtil.isEmpty(git)) {
JGitUtil.getFileList(git, "master", ".").find(_.name == pageName + ".md").map { file =>
WikiPageInfo(
@@ -92,7 +94,7 @@ trait WikiService {
* Returns the list of wiki page names.
*/
def getWikiPageList(owner: String, repository: String): List[String] = {
using(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
JGitUtil
.getFileList(git, "master", ".")
.filter(_.name.endsWith(".md"))
@@ -118,7 +120,7 @@ trait WikiService {
try {
LockUtil.lock(s"${owner}/${repository}/wiki") {
using(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
val reader = git.getRepository.newObjectReader
val oldTreeIter = new CanonicalTreeParser
oldTreeIter.reset(reader, git.getRepository.resolve(from + "^{tree}"))
@@ -133,7 +135,7 @@ trait WikiService {
}
}
val patch = using(new java.io.ByteArrayOutputStream()) { out =>
val patch = Using.resource(new java.io.ByteArrayOutputStream()) { out =>
val formatter = new DiffFormatter(out)
formatter.setRepository(git.getRepository)
formatter.format(diffs.asJava)
@@ -237,7 +239,7 @@ trait WikiService {
currentId: Option[String]
): Option[String] = {
LockUtil.lock(s"${owner}/${repository}/wiki") {
using(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
val builder = DirCache.newInCore.builder()
val inserter = git.getRepository.newObjectInserter()
val headId = git.getRepository.resolve(Constants.HEAD + "^{commit}")
@@ -309,7 +311,7 @@ trait WikiService {
message: String
): Unit = {
LockUtil.lock(s"${owner}/${repository}/wiki") {
using(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
val builder = DirCache.newInCore.builder()
val inserter = git.getRepository.newObjectInserter()
val headId = git.getRepository.resolve(Constants.HEAD + "^{commit}")

View File

@@ -8,6 +8,9 @@ import gitbucket.core.service.SystemSettingsService.SystemSettings
import gitbucket.core.service.{AccessTokenService, AccountService, SystemSettingsService}
import gitbucket.core.util.{AuthUtil, Keys}
import gitbucket.core.model.Profile.profile.blockingApi._
// Imported names have higher precedence than names, defined in other files.
// If Database is not bound by explicit import, then "Database" refers to the Database introduced by the wildcard import above.
import gitbucket.core.servlet.Database
class ApiAuthenticationFilter extends Filter with AccessTokenService with AccountService with SystemSettingsService {

View File

@@ -4,12 +4,16 @@ import javax.servlet._
import javax.servlet.http._
import gitbucket.core.model.Account
import gitbucket.core.model.Profile.profile.blockingApi._
import gitbucket.core.plugin.{GitRepositoryFilter, GitRepositoryRouting, PluginRegistry}
import gitbucket.core.service.SystemSettingsService.SystemSettings
import gitbucket.core.service.{AccessTokenService, AccountService, RepositoryService, SystemSettingsService}
import gitbucket.core.util.Implicits._
import gitbucket.core.util.{AuthUtil, Implicits, Keys}
import gitbucket.core.util.{AuthUtil, Keys}
import gitbucket.core.model.Profile.profile.blockingApi._
// Imported names have higher precedence than names, defined in other files.
// If Database is not bound by explicit import, then "Database" refers to the Database introduced by the wildcard import above.
import gitbucket.core.servlet.Database
import org.slf4j.LoggerFactory
/**

View File

@@ -8,7 +8,8 @@ import gitbucket.core.util.{FileUtil, StringUtil}
import org.apache.commons.io.{FileUtils, IOUtils}
import org.json4s.jackson.Serialization._
import org.apache.http.HttpStatus
import gitbucket.core.util.SyntaxSugars._
import scala.util.Using
/**
* Provides GitLFS Transfer API
@@ -29,7 +30,7 @@ class GitLfsTransferServlet extends HttpServlet {
res.setStatus(HttpStatus.SC_OK)
res.setContentType("application/octet-stream")
res.setHeader("Content-Length", file.length.toString)
using(new FileInputStream(file), res.getOutputStream) { (in, out) =>
Using.resources(new FileInputStream(file), res.getOutputStream) { (in, out) =>
IOUtils.copy(in, out)
out.flush()
}
@@ -45,7 +46,7 @@ class GitLfsTransferServlet extends HttpServlet {
} yield {
val file = new File(FileUtil.getLfsFilePath(owner, repository, oid))
FileUtils.forceMkdir(file.getParentFile)
using(req.getInputStream, new FileOutputStream(file)) { (in, out) =>
Using.resources(req.getInputStream, new FileOutputStream(file)) { (in, out) =>
IOUtils.copy(in, out)
}
res.setStatus(HttpStatus.SC_OK)
@@ -71,7 +72,7 @@ class GitLfsTransferServlet extends HttpServlet {
private def sendError(res: HttpServletResponse, status: Int, message: String): Unit = {
res.setStatus(status)
using(res.getWriter()) { out =>
Using.resource(res.getWriter()) { out =>
out.write(write(GitLfs.Error(message)))
out.flush()
}

View File

@@ -4,9 +4,10 @@ import java.io.File
import java.util
import java.util.Date
import scala.util.Using
import gitbucket.core.api
import gitbucket.core.model.WebHook
import gitbucket.core.model.Profile.profile.blockingApi._
import gitbucket.core.plugin.{GitRepositoryRouting, PluginRegistry}
import gitbucket.core.service.IssuesService.IssueSearchCondition
import gitbucket.core.service.WebHookService._
@@ -14,6 +15,11 @@ import gitbucket.core.service._
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.Implicits._
import gitbucket.core.util._
import gitbucket.core.model.Profile.profile.blockingApi._
// Imported names have higher precedence than names, defined in other files.
// If Database is not bound by explicit import, then "Database" refers to the Database introduced by the wildcard import above.
import gitbucket.core.servlet.Database
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.http.server.GitServlet
import org.eclipse.jgit.lib._
@@ -108,7 +114,7 @@ class GitRepositoryServlet extends GitServlet with SystemSettingsService {
GitLfs.Action(
href = baseUrl + "/git-lfs/" + owner + "/" + repository + "/" + requestObject.oid,
header =
Map("Authorization" -> StringUtil.encodeBlowfish(timeout + " " + requestObject.oid)),
Map("Authorization" -> StringUtil.encodeBlowfish(s"$timeout ${requestObject.oid}")),
expires_at = new Date(timeout)
)
)
@@ -129,7 +135,7 @@ class GitRepositoryServlet extends GitServlet with SystemSettingsService {
GitLfs.Action(
href = baseUrl + "/git-lfs/" + owner + "/" + repository + "/" + requestObject.oid,
header =
Map("Authorization" -> StringUtil.encodeBlowfish(timeout + " " + requestObject.oid)),
Map("Authorization" -> StringUtil.encodeBlowfish(s"$timeout ${requestObject.oid}")),
expires_at = new Date(timeout)
)
)
@@ -140,7 +146,7 @@ class GitRepositoryServlet extends GitServlet with SystemSettingsService {
}
res.setContentType("application/vnd.git-lfs+json")
using(res.getWriter) { out =>
Using.resource(res.getWriter) { out =>
out.print(write(batchResponse))
out.flush()
}
@@ -216,7 +222,7 @@ class GitBucketReceivePackFactory extends ReceivePackFactory[HttpServletRequest]
}
}
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl: String, sshUrl: Option[String])
extends PostReceiveHook
@@ -250,7 +256,7 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
command.setResult(ReceiveCommand.Result.REJECTED_OTHER_REASON, error)
}
}
using(Git.open(Directory.getRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getRepositoryDir(owner, repository))) { git =>
existIds = JGitUtil.getAllCommitIds(git)
}
} catch {
@@ -265,7 +271,7 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
def onPostReceive(receivePack: ReceivePack, commands: java.util.Collection[ReceiveCommand]): Unit = {
Database() withTransaction { implicit session =>
try {
using(Git.open(Directory.getRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getRepositoryDir(owner, repository))) { git =>
JGitUtil.removeCache(git)
val pushedIds = scala.collection.mutable.Set[String]()
@@ -289,7 +295,7 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
if (JGitUtil.isEmpty(git) && commits.nonEmpty && branchName != repositoryInfo.repository.defaultBranch) {
saveRepositoryDefaultBranch(owner, repository, branchName)
// Change repository HEAD
using(Git.open(Directory.getRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(Directory.getRepositoryDir(owner, repository))) { git =>
git.getRepository.updateRef(Constants.HEAD, true).link(Constants.R_HEADS + branchName)
}
}
@@ -443,7 +449,7 @@ class WikiCommitHook(owner: String, repository: String, pusher: String, baseUrl:
commitIds.foreach {
case (oldCommitId, newCommitId) =>
val commits = using(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
val commits = Using.resource(Git.open(Directory.getWikiRepositoryDir(owner, repository))) { git =>
JGitUtil.getCommitLog(git, oldCommitId, newCommitId).flatMap { commit =>
val diffs = JGitUtil.getDiffs(git, None, commit.id, false, false)
diffs.collect {

View File

@@ -9,9 +9,12 @@ import gitbucket.core.plugin.PluginRegistry
import gitbucket.core.service.{ActivityService, SystemSettingsService}
import gitbucket.core.util.DatabaseConfig
import gitbucket.core.util.Directory._
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.JDBCUtil._
import gitbucket.core.model.Profile.profile.blockingApi._
// Imported names have higher precedence than names, defined in other files.
// If Database is not bound by explicit import, then "Database" refers to the Database introduced by the wildcard import above.
import gitbucket.core.servlet.Database
import io.github.gitbucket.solidbase.Solidbase
import io.github.gitbucket.solidbase.manager.JDBCVersionManager
import javax.servlet.{ServletContextEvent, ServletContextListener}
@@ -21,7 +24,8 @@ import org.slf4j.LoggerFactory
import akka.actor.{Actor, ActorSystem, Props}
import com.typesafe.akka.extension.quartz.QuartzSchedulerExtension
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
import scala.util.Using
/**
* Initialize GitBucket system.
@@ -138,7 +142,7 @@ class InitializeListener extends ServletContextListener with SystemSettingsServi
logger.info("Extract bundled plugins...")
val cl = Thread.currentThread.getContextClassLoader
try {
using(cl.getResourceAsStream("bundle-plugins.txt")) { pluginsFile =>
Using.resource(cl.getResourceAsStream("bundle-plugins.txt")) { pluginsFile =>
if (pluginsFile != null) {
val plugins = IOUtils.readLines(pluginsFile, "UTF-8")
val gitbucketVersion = GitBucketCoreModule.getVersions.asScala.last.getVersion
@@ -153,7 +157,7 @@ class InitializeListener extends ServletContextListener with SystemSettingsServi
logger.info(s"Extract to ${file.getAbsolutePath}")
FileUtils.forceMkdirParent(file)
using(in, new FileOutputStream(file)) {
Using.resources(in, new FileOutputStream(file)) {
case (in, out) => IOUtils.copy(in, out)
}
}

View File

@@ -11,13 +11,13 @@ import org.apache.sshd.server.session.ServerSession
import org.slf4j.LoggerFactory
import java.io.{File, InputStream, OutputStream}
import SyntaxSugars._
import org.eclipse.jgit.api.Git
import Directory._
import gitbucket.core.ssh.PublicKeyAuthenticator.AuthType
import org.eclipse.jgit.transport.{ReceivePack, UploadPack}
import org.apache.sshd.server.shell.UnknownCommand
import org.eclipse.jgit.errors.RepositoryNotFoundException
import scala.util.Using
object GitCommand {
val DefaultCommandRegex = """\Agit-(upload|receive)-pack '/([a-zA-Z0-9\-_.]+)/([a-zA-Z0-9\-\+_.]+).git'\Z""".r
@@ -152,7 +152,7 @@ class DefaultGitUploadPack(owner: String, repoName: String)
}
if (execute) {
using(Git.open(getRepositoryDir(owner, repoName))) { git =>
Using.resource(Git.open(getRepositoryDir(owner, repoName))) { git =>
val repository = git.getRepository
val upload = new UploadPack(repository)
upload.upload(in, out, err)
@@ -177,7 +177,7 @@ class DefaultGitReceivePack(owner: String, repoName: String, baseUrl: String, ss
}
if (execute) {
using(Git.open(getRepositoryDir(owner, repoName))) { git =>
Using.resource(Git.open(getRepositoryDir(owner, repoName))) { git =>
val repository = git.getRepository
val receive = new ReceivePack(repository)
if (!repoName.endsWith(".wiki")) {
@@ -202,7 +202,7 @@ class PluginGitUploadPack(repoName: String, routing: GitRepositoryRouting)
if (execute) {
val path = routing.urlPattern.r.replaceFirstIn(repoName, routing.localPath)
using(Git.open(new File(Directory.GitBucketHome, path))) { git =>
Using.resource(Git.open(new File(Directory.GitBucketHome, path))) { git =>
val repository = git.getRepository
val upload = new UploadPack(repository)
upload.upload(in, out, err)
@@ -222,7 +222,7 @@ class PluginGitReceivePack(repoName: String, routing: GitRepositoryRouting)
if (execute) {
val path = routing.urlPattern.r.replaceFirstIn(repoName, routing.localPath)
using(Git.open(new File(Directory.GitBucketHome, path))) { git =>
Using.resource(Git.open(new File(Directory.GitBucketHome, path))) { git =>
val repository = git.getRepository
val receive = new ReceivePack(repository)
receive.receive(in, out, err)

View File

@@ -12,7 +12,8 @@ import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.{ObjectReader, Repository}
import org.eclipse.jgit.revwalk.{RevTree, RevWalk}
import org.eclipse.jgit.treewalk.TreeWalk
import gitbucket.core.util.SyntaxSugars._
import scala.util.Using
object EditorConfigUtil {
private class JGitResource(repo: Repository, revStr: String, path: Ec4jPath) extends Resource {
@@ -27,7 +28,7 @@ object EditorConfigUtil {
}
private def getRevTree: RevTree = {
using(repo.newObjectReader()) { reader: ObjectReader =>
Using.resource(repo.newObjectReader()) { reader: ObjectReader =>
val revWalk = new RevWalk(reader)
val id = repo.resolve(revStr)
val commit = revWalk.parseCommit(id)
@@ -36,7 +37,7 @@ object EditorConfigUtil {
}
override def exists(): Boolean = {
using(repo.newObjectReader()) { reader: ObjectReader =>
Using.resource(repo.newObjectReader()) { reader: ObjectReader =>
try {
val treeWalk = Option(TreeWalk.forPath(reader, removeInitialSlash(path), getRevTree))
treeWalk.isDefined
@@ -59,7 +60,7 @@ object EditorConfigUtil {
}
override def openReader(): Reader = {
using(repo.newObjectReader) { reader: ObjectReader =>
Using.resource(repo.newObjectReader) { reader: ObjectReader =>
val treeWalk = TreeWalk.forPath(reader, removeInitialSlash(path), getRevTree)
new InputStreamReader(reader.open(treeWalk.getObjectId(0)).openStream, StandardCharsets.UTF_8)
}

View File

@@ -36,7 +36,7 @@ object FileUtil {
def isText(content: Array[Byte]): Boolean = !content.contains(0)
def generateFileId: String = System.currentTimeMillis + Random.alphanumeric.take(10).mkString
def generateFileId: String = s"${System.currentTimeMillis}${Random.alphanumeric.take(10).mkString}"
def getExtension(name: String): String =
name.lastIndexOf('.') match {
@@ -56,7 +56,7 @@ object FileUtil {
}
def getLfsFilePath(owner: String, repository: String, oid: String): String =
Directory.getLfsDir(owner, repository) + "/" + checkFilename(oid)
s"${Directory.getLfsDir(owner, repository)}/${checkFilename(oid)}"
def readableSize(size: Long): String = FileUtils.byteCountToDisplaySize(size)

View File

@@ -1,7 +1,8 @@
package gitbucket.core.util
import java.io.ByteArrayInputStream
import collection.JavaConverters._
import scala.jdk.CollectionConverters._
import gitbucket.core.model.Profile._
import gitbucket.core.model.Profile.profile.blockingApi._
import org.bouncycastle.bcpg.ArmoredInputStream

View File

@@ -3,9 +3,9 @@ package gitbucket.core.util
import java.io._
import java.sql._
import java.text.SimpleDateFormat
import SyntaxSugars._
import scala.annotation.tailrec
import scala.collection.mutable.ListBuffer
import scala.util.Using
/**
* Provides implicit class which extends java.sql.Connection.
@@ -26,7 +26,7 @@ object JDBCUtil {
def find[T](sql: String, params: Any*)(f: ResultSet => T): Option[T] = {
execute(sql, params: _*) { stmt =>
using(stmt.executeQuery()) { rs =>
Using.resource(stmt.executeQuery()) { rs =>
if (rs.next) Some(f(rs)) else None
}
}
@@ -34,7 +34,7 @@ object JDBCUtil {
def select[T](sql: String, params: Any*)(f: ResultSet => T): Seq[T] = {
execute(sql, params: _*) { stmt =>
using(stmt.executeQuery()) { rs =>
Using.resource(stmt.executeQuery()) { rs =>
val list = new ListBuffer[T]
while (rs.next) {
list += f(rs)
@@ -46,14 +46,14 @@ object JDBCUtil {
def selectInt(sql: String, params: Any*): Int = {
execute(sql, params: _*) { stmt =>
using(stmt.executeQuery()) { rs =>
Using.resource(stmt.executeQuery()) { rs =>
if (rs.next) rs.getInt(1) else 0
}
}
}
private def execute[T](sql: String, params: Any*)(f: (PreparedStatement) => T): T = {
using(conn.prepareStatement(sql)) { stmt =>
Using.resource(conn.prepareStatement(sql)) { stmt =>
params.zipWithIndex.foreach {
case (p, i) =>
p match {
@@ -68,7 +68,7 @@ object JDBCUtil {
def importAsSQL(in: InputStream): Unit = {
conn.setAutoCommit(false)
try {
using(in) { in =>
Using.resource(in) { in =>
var out = new ByteArrayOutputStream()
var length = 0
@@ -111,7 +111,7 @@ object JDBCUtil {
val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
val file = File.createTempFile("gitbucket-export-", ".sql")
using(new FileOutputStream(file)) { out =>
Using.resource(new FileOutputStream(file)) { out =>
val dbMeta = conn.getMetaData
val allTablesInDatabase = allTablesOrderByDependencies(dbMeta)
@@ -168,7 +168,7 @@ object JDBCUtil {
}
def allTableNames(): Seq[String] = {
using(conn.getMetaData.getTables(null, null, "%", Seq("TABLE").toArray)) { rs =>
Using.resource(conn.getMetaData.getTables(null, null, "%", Seq("TABLE").toArray)) { rs =>
val tableNames = new ListBuffer[String]
while (rs.next) {
val name = rs.getString("TABLE_NAME").toUpperCase
@@ -188,7 +188,7 @@ object JDBCUtil {
tableName
}
using(meta.getExportedKeys(null, null, normalizedTableName)) { rs =>
Using.resource(meta.getExportedKeys(null, null, normalizedTableName)) { rs =>
val children = new ListBuffer[String]
while (rs.next) {
val childTableName = rs.getString("FKTABLE_NAME").toUpperCase
@@ -218,7 +218,7 @@ object JDBCUtil {
ordered ++ orphans
}
def tsort[A](edges: Traversable[(A, A)]): Iterable[A] = {
def tsort[A](edges: Iterable[(A, A)]): Iterable[A] = {
@tailrec
def tsort(toPreds: Map[A, Set[A]], done: Iterable[A]): Iterable[A] = {
val (noPreds, hasPreds) = toPreds.partition { _._2.isEmpty }
@@ -226,7 +226,7 @@ object JDBCUtil {
if (hasPreds.isEmpty) done else sys.error(hasPreds.toString)
} else {
val found = noPreds.map { _._1 }
tsort(hasPreds.mapValues { _ -- found }, done ++ found)
tsort(hasPreds.map { case (k, v) => (k, v -- found) }, done ++ found)
}
}

View File

@@ -9,7 +9,8 @@ import StringUtil._
import SyntaxSugars._
import scala.annotation.tailrec
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
import scala.util.Using
import org.eclipse.jgit.lib._
import org.eclipse.jgit.revwalk._
import org.eclipse.jgit.revwalk.filter._
@@ -20,7 +21,6 @@ import org.eclipse.jgit.errors.{ConfigInvalidException, IncorrectObjectTypeExcep
import org.eclipse.jgit.transport.RefSpec
import java.util.Date
import java.util.concurrent.TimeUnit
import java.util.function.Consumer
import org.cache2k.Cache2kBuilder
import org.eclipse.jgit.api.errors._
@@ -29,6 +29,8 @@ import org.eclipse.jgit.dircache.DirCacheEntry
import org.eclipse.jgit.util.io.DisabledOutputStream
import org.slf4j.LoggerFactory
import scala.util.Using.Releasable
/**
* Provides complex JGit operations.
*/
@@ -36,6 +38,10 @@ object JGitUtil {
private val logger = LoggerFactory.getLogger(JGitUtil.getClass)
implicit val objectDatabaseReleasable = new Releasable[ObjectDatabase] {
override def release(resource: ObjectDatabase): Unit = resource.close()
}
/**
* The repository data.
*
@@ -318,7 +324,7 @@ object JGitUtil {
* Returns the repository information. It contains branch names and tag names.
*/
def getRepositoryInfo(owner: String, repository: String): RepositoryInfo = {
using(Git.open(getRepositoryDir(owner, repository))) { git =>
Using.resource(Git.open(getRepositoryDir(owner, repository))) { git =>
try {
RepositoryInfo(
owner,
@@ -365,7 +371,7 @@ object JGitUtil {
* @return HTML of the file list
*/
def getFileList(git: Git, revision: String, path: String = ".", baseUrl: Option[String] = None): List[FileInfo] = {
using(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
val objectId = git.getRepository.resolve(revision)
if (objectId == null) return Nil
val revCommit = revWalk.parseCommit(objectId)
@@ -374,12 +380,12 @@ object JGitUtil {
if (path == ".") {
val treeWalk = new TreeWalk(git.getRepository)
treeWalk.addTree(rev.getTree)
using(treeWalk)(f)
Using.resource(treeWalk)(f)
} else {
val treeWalk = TreeWalk.forPath(git.getRepository, path, rev.getTree)
if (treeWalk != null) {
treeWalk.enterSubtree
using(treeWalk)(f)
Using.resource(treeWalk)(f)
}
}
@tailrec
@@ -387,7 +393,7 @@ object JGitUtil {
tuple: (ObjectId, FileMode, String, String, Option[String], RevCommit)
): (ObjectId, FileMode, String, String, Option[String], RevCommit) = tuple match {
case (oid, FileMode.TREE, name, path, _, commit) =>
(using(new TreeWalk(git.getRepository)) { walk =>
(Using.resource(new TreeWalk(git.getRepository)) { walk =>
walk.addTree(oid)
// single tree child, or None
if (walk.next() && walk.getFileMode(0) == FileMode.TREE) {
@@ -521,7 +527,7 @@ object JGitUtil {
* get all file list by revision. only file.
*/
def getTreeId(git: Git, revision: String): Option[String] = {
using(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
val objectId = git.getRepository.resolve(revision)
if (objectId == null) return None
val revCommit = revWalk.parseCommit(objectId)
@@ -533,10 +539,10 @@ object JGitUtil {
* get all file list by tree object id.
*/
def getAllFileListByTreeId(git: Git, treeId: String): List[String] = {
using(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
val objectId = git.getRepository.resolve(treeId + "^{tree}")
if (objectId == null) return Nil
using(new TreeWalk(git.getRepository)) { treeWalk =>
Using.resource(new TreeWalk(git.getRepository)) { treeWalk =>
treeWalk.addTree(objectId)
treeWalk.setRecursive(true)
var ret: List[String] = Nil
@@ -587,7 +593,7 @@ object JGitUtil {
case _ => (logs, i.hasNext)
}
using(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
defining(git.getRepository.resolve(revision)) { objectId =>
if (objectId == null) {
Left(s"${revision} can't be resolved.")
@@ -619,7 +625,7 @@ object JGitUtil {
case false => logs
}
using(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
revWalk.markStart(revWalk.parseCommit(git.getRepository.resolve(begin)))
getCommitLog(revWalk.iterator, Nil).reverse
}
@@ -679,12 +685,12 @@ object JGitUtil {
}
private def getDiffEntries(git: Git, from: Option[String], to: String): Seq[DiffEntry] = {
using(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
val df = new DiffFormatter(DisabledOutputStream.INSTANCE)
df.setRepository(git.getRepository)
val toCommit = revWalk.parseCommit(git.getRepository.resolve(to))
from match {
(from match {
case None => {
toCommit.getParentCount match {
case 0 =>
@@ -700,12 +706,12 @@ object JGitUtil {
val fromCommit = revWalk.parseCommit(git.getRepository.resolve(from))
df.scan(fromCommit.getTree, toCommit.getTree).asScala
}
}
}).toSeq
}
}
def getParentCommitId(git: Git, id: String): Option[String] = {
using(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
val commit = revWalk.parseCommit(git.getRepository.resolve(id))
commit.getParentCount match {
case 0 => None
@@ -787,7 +793,7 @@ object JGitUtil {
private def makePatchFromDiffEntry(git: Git, diff: DiffEntry): String = {
val out = new ByteArrayOutputStream()
using(new DiffFormatter(out)) { formatter =>
Using.resource(new DiffFormatter(out)) { formatter =>
formatter.setRepository(git.getRepository)
formatter.format(diff)
val patch = new String(out.toByteArray) // TODO charset???
@@ -799,7 +805,7 @@ object JGitUtil {
* Returns the list of branch names of the specified commit.
*/
def getBranchesOfCommit(git: Git, commitId: String): List[String] =
using(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
defining(revWalk.parseCommit(git.getRepository.resolve(commitId + "^0"))) { commit =>
git.getRepository.getRefDatabase
.getRefsByPrefix(Constants.R_HEADS)
@@ -842,7 +848,7 @@ object JGitUtil {
* Returns the list of tags which contains the specified commit.
*/
def getTagsOfCommit(git: Git, commitId: String): List[String] =
using(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
defining(revWalk.parseCommit(git.getRepository.resolve(commitId + "^0"))) { commit =>
git.getRepository.getRefDatabase
.getRefsByPrefix(Constants.R_TAGS)
@@ -863,13 +869,13 @@ object JGitUtil {
}
def initRepository(dir: java.io.File): Unit =
using(new RepositoryBuilder().setGitDir(dir).setBare.build) { repository =>
Using.resource(new RepositoryBuilder().setGitDir(dir).setBare.build) { repository =>
repository.create(true)
setReceivePack(repository)
}
def cloneRepository(from: java.io.File, to: java.io.File): Unit =
using(Git.cloneRepository.setURI(from.toURI.toString).setDirectory(to).setBare(true).call) { git =>
Using.resource(Git.cloneRepository.setURI(from.toURI.toString).setDirectory(to).setBare(true).call) { git =>
setReceivePack(git.getRepository)
}
@@ -899,7 +905,7 @@ object JGitUtil {
def createTag(git: Git, name: String, message: Option[String], commitId: String) = {
try {
val objectId: ObjectId = git.getRepository.resolve(commitId)
using(new RevWalk(git.getRepository)) { walk =>
Using.resource(new RevWalk(git.getRepository)) { walk =>
val tagCommand = git.tag().setName(name).setObjectId(walk.parseCommit(objectId))
message.foreach { message =>
tagCommand.setMessage(message)
@@ -908,10 +914,10 @@ object JGitUtil {
}
Right("Tag added.")
} catch {
case e: GitAPIException => Left("Sorry, some Git operation error occurs.")
case e: ConcurrentRefUpdateException => Left("Sorry some error occurs.")
case e: ConcurrentRefUpdateException => Left("Sorry, some error occurs.")
case e: InvalidTagNameException => Left("Sorry, that name is invalid.")
case e: NoHeadException => Left("Sorry, this repo doesn't have HEAD reference")
case e: GitAPIException => Left("Sorry, some Git operation error occurs.")
}
}
@@ -1004,7 +1010,7 @@ object JGitUtil {
case false => None
}
using(new TreeWalk(git.getRepository)) { treeWalk =>
Using.resource(new TreeWalk(git.getRepository)) { treeWalk =>
treeWalk.addTree(revTree)
treeWalk.setRecursive(true)
getPathObjectId(path, treeWalk)
@@ -1049,7 +1055,7 @@ object JGitUtil {
def getContentInfo(git: Git, path: String, objectId: ObjectId): ContentInfo = {
// Viewer
using(git.getRepository.getObjectDatabase) { db =>
Using.resource(git.getRepository.getObjectDatabase) { db =>
val loader = db.open(objectId)
val isLfs = isLfsPointer(loader)
val large = FileUtil.isLarge(loader.getSize)
@@ -1087,7 +1093,7 @@ object JGitUtil {
*/
def getContentFromId(git: Git, id: ObjectId, fetchLargeFile: Boolean): Option[Array[Byte]] =
try {
using(git.getRepository.getObjectDatabase) { db =>
Using.resource(git.getRepository.getObjectDatabase) { db =>
val loader = db.open(id)
if (loader.isLarge || (fetchLargeFile == false && FileUtil.isLarge(loader.getSize))) {
None
@@ -1109,7 +1115,7 @@ object JGitUtil {
*/
def getObjectLoaderFromId[A](git: Git, id: ObjectId)(f: ObjectLoader => A): Option[A] =
try {
using(git.getRepository.getObjectDatabase) { db =>
Using.resource(git.getRepository.getObjectDatabase) { db =>
Some(f(db.open(id)))
}
} catch {
@@ -1132,8 +1138,8 @@ object JGitUtil {
}
def processTree[T](git: Git, id: ObjectId)(f: (String, CanonicalTreeParser) => T): Seq[T] = {
using(new RevWalk(git.getRepository)) { revWalk =>
using(new TreeWalk(git.getRepository)) { treeWalk =>
Using.resource(new RevWalk(git.getRepository)) { revWalk =>
Using.resource(new TreeWalk(git.getRepository)) { treeWalk =>
val index = treeWalk.addTree(revWalk.parseTree(id))
treeWalk.setRecursive(true)
val result = new collection.mutable.ListBuffer[T]()
@@ -1177,7 +1183,7 @@ object JGitUtil {
requestRepositoryName: String,
requestBranch: String
): (String, String) =
using(
Using.resources(
Git.open(Directory.getRepositoryDir(userName, repositoryName)),
Git.open(Directory.getRepositoryDir(requestUserName, requestRepositoryName))
) { (oldGit, newGit) =>
@@ -1247,7 +1253,7 @@ object JGitUtil {
} finally {
walk.dispose()
}
}
}.toSeq
}
def getBlame(git: Git, id: String, path: String): Iterable[BlameInfo] = {
@@ -1277,7 +1283,7 @@ object JGitUtil {
}
idLine :+= (c.name, i)
}
val limeMap = idLine.groupBy(_._1).mapValues(_.map(_._2).toSet)
val limeMap = idLine.groupBy(_._1).view.mapValues(_.map(_._2).toSet)
blameMap.values.map { b =>
b.copy(lines = limeMap(b.id))
}
@@ -1294,7 +1300,7 @@ object JGitUtil {
* @return sha1
*/
def getShaByRef(owner: String, name: String, revstr: String): Option[String] = {
using(Git.open(getRepositoryDir(owner, name))) { git =>
Using.resource(Git.open(getRepositoryDir(owner, name))) { git =>
Option(git.getRepository.resolve(revstr)).map(ObjectId.toString(_))
}
}
@@ -1309,14 +1315,14 @@ object JGitUtil {
if (lfsAttrs.nonEmpty) {
val oid = lfsAttrs("oid").split(":")(1)
using(new FileInputStream(FileUtil.getLfsFilePath(repository.owner, repository.name, oid))) { in =>
Using.resource(new FileInputStream(FileUtil.getLfsFilePath(repository.owner, repository.name, oid))) { in =>
f(in)
}
} else {
throw new NoSuchElementException("LFS attribute is empty.")
}
} else {
using(loader.openStream()) { in =>
Using.resource(loader.openStream()) { in =>
f(in)
}
}
@@ -1325,7 +1331,7 @@ object JGitUtil {
def openFile[T](git: Git, repository: RepositoryService.RepositoryInfo, tree: RevTree, path: String)(
f: InputStream => T
): T = {
using(TreeWalk.forPath(git.getRepository, path, tree)) { treeWalk =>
Using.resource(TreeWalk.forPath(git.getRepository, path, tree)) { treeWalk =>
openFile(git, repository, treeWalk)(f)
}
}

View File

@@ -11,6 +11,7 @@ object SyntaxSugars {
def defining[A, B](value: A)(f: A => B): B = f(value)
@deprecated("Use scala.util.Using.resource instead", "4.32.0")
def using[A <: { def close(): Unit }, B](resource: A)(f: A => B): B =
try f(resource)
finally {
@@ -21,6 +22,7 @@ object SyntaxSugars {
}
}
@deprecated("Use scala.util.Using.resources instead", "4.32.0")
def using[A <: { def close(): Unit }, B <: { def close(): Unit }, C](resource1: A, resource2: B)(f: (A, B) => C): C =
try f(resource1, resource2)
finally {
@@ -36,10 +38,12 @@ object SyntaxSugars {
}
}
@deprecated("Use scala.util.Using.resource instead", "4.32.0")
def using[T](git: Git)(f: Git => T): T =
try f(git)
finally git.getRepository.close()
@deprecated("Use scala.util.Using.resources instead", "4.32.0")
def using[T](git1: Git, git2: Git)(f: (Git, Git) => T): T =
try f(git1, git2)
finally {

View File

@@ -22,7 +22,7 @@
<script>
$(function(){
$('#submit-@labelId').click(function(e){
$.post('@helpers.url(repository)/issues/labels/@{if(labelId == "new") "new" else labelId + "/edit"}', {
$.post('@helpers.url(repository)/issues/labels/@{if(labelId == "new") "new" else s"$labelId/edit"}', {
'labelName' : $('#labelName-@labelId').val(),
'labelColor': $('#labelColor-@labelId').val()
}, function(data, status){

View File

@@ -23,7 +23,7 @@
<script>
$(function(){
$('#submit-@priorityId').click(function(e){
$.post('@helpers.url(repository)/issues/priorities/@{if(priorityId == "new") "new" else priorityId + "/edit"}', {
$.post('@helpers.url(repository)/issues/priorities/@{if(priorityId == "new") "new" else s"$priorityId/edit"}', {
'priorityName' : $('#priorityName-@priorityId').val(),
'description' : $('#description-@priorityId').val(),
'priorityColor': $('#priorityColor-@priorityId').val()

View File

@@ -1,7 +1,6 @@
package gitbucket.core.service
import gitbucket.core.util.Directory._
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.GitSpecUtil._
import org.eclipse.jgit.api.Git
@@ -10,6 +9,7 @@ import org.eclipse.jgit.revwalk._
import org.scalatest.FunSpec
import java.io.File
import scala.util.Using
class MergeServiceSpec extends FunSpec {
val service = new MergeService with AccountService with ActivityService with IssuesService with LabelsService
@@ -19,7 +19,7 @@ class MergeServiceSpec extends FunSpec {
val issueId = 10
def initRepository(owner: String, name: String): File = {
val dir = createTestRepository(getRepositoryDir(owner, name))
using(Git.open(dir)) { git =>
Using.resource(Git.open(dir)) { git =>
createFile(git, "refs/heads/master", "test.txt", "hoge")
git.branchCreate().setStartPoint(s"refs/heads/master").setName(s"refs/pull/${issueId}/head").call()
}
@@ -39,7 +39,7 @@ class MergeServiceSpec extends FunSpec {
}
it("checkConflict true if not conflicted, and create cache") {
val repo2Dir = initRepository("user1", "repo2")
using(Git.open(repo2Dir)) { git =>
Using.resource(Git.open(repo2Dir)) { git =>
createConfrict(git)
}
assert(service.checkConflictCache("user1", "repo2", branch, issueId) == None)
@@ -56,7 +56,7 @@ class MergeServiceSpec extends FunSpec {
val repo3Dir = initRepository("user1", "repo3")
assert(service.checkConflict("user1", "repo3", branch, issueId).isEmpty)
assert(service.checkConflictCache("user1", "repo3", branch, issueId) == Some(None))
using(Git.open(repo3Dir)) { git =>
Using.resource(Git.open(repo3Dir)) { git =>
createFile(git, s"refs/heads/${branch}", "test.txt", "hoge2")
}
assert(service.checkConflictCache("user1", "repo3", branch, issueId) == None)
@@ -65,7 +65,7 @@ class MergeServiceSpec extends FunSpec {
val repo4Dir = initRepository("user1", "repo4")
assert(service.checkConflict("user1", "repo4", branch, issueId).isEmpty)
assert(service.checkConflictCache("user1", "repo4", branch, issueId) == Some(None))
using(Git.open(repo4Dir)) { git =>
Using.resource(Git.open(repo4Dir)) { git =>
createFile(git, s"refs/pull/${issueId}/head", "test.txt", "hoge4")
}
assert(service.checkConflictCache("user1", "repo4", branch, issueId) == None)
@@ -74,14 +74,14 @@ class MergeServiceSpec extends FunSpec {
val repo5Dir = initRepository("user1", "repo5")
assert(service.checkConflict("user1", "repo5", branch, issueId).isEmpty)
assert(service.checkConflictCache("user1", "repo5", branch, issueId) == Some(None))
using(Git.open(repo5Dir)) { git =>
Using.resource(Git.open(repo5Dir)) { git =>
createFile(git, s"refs/heads/${branch}", "test.txt", "hoge2")
}
assert(service.checkConflictCache("user1", "repo5", branch, issueId) == None)
}
it("conflicted cache invalid if request branch moved") {
val repo6Dir = initRepository("user1", "repo6")
using(Git.open(repo6Dir)) { git =>
Using.resource(Git.open(repo6Dir)) { git =>
createConfrict(git)
}
assert(service.checkConflict("user1", "repo6", branch, issueId).isDefined)
@@ -89,14 +89,14 @@ class MergeServiceSpec extends FunSpec {
case Some(Some(_: String)) => true
case _ => false
})
using(Git.open(repo6Dir)) { git =>
Using.resource(Git.open(repo6Dir)) { git =>
createFile(git, s"refs/pull/${issueId}/head", "test.txt", "hoge4")
}
assert(service.checkConflictCache("user1", "repo6", branch, issueId) == None)
}
it("conflicted cache invalid if origin branch moved") {
val repo7Dir = initRepository("user1", "repo7")
using(Git.open(repo7Dir)) { git =>
Using.resource(Git.open(repo7Dir)) { git =>
createConfrict(git)
}
assert(service.checkConflict("user1", "repo7", branch, issueId).isDefined)
@@ -104,7 +104,7 @@ class MergeServiceSpec extends FunSpec {
case Some(Some(_)) => true
case _ => false
})
using(Git.open(repo7Dir)) { git =>
Using.resource(Git.open(repo7Dir)) { git =>
createFile(git, s"refs/heads/${branch}", "test.txt", "hoge4")
}
assert(service.checkConflictCache("user1", "repo7", branch, issueId) == None)
@@ -113,7 +113,7 @@ class MergeServiceSpec extends FunSpec {
describe("mergePullRequest") {
it("can merge") {
val repo8Dir = initRepository("user1", "repo8")
using(Git.open(repo8Dir)) { git =>
Using.resource(Git.open(repo8Dir)) { git =>
createFile(git, s"refs/pull/${issueId}/head", "test.txt", "hoge2")
val committer = new PersonIdent("dummy2", "dummy2@example.com")
assert(getFile(git, branch, "test.txt").content.get == "hoge")
@@ -121,7 +121,7 @@ class MergeServiceSpec extends FunSpec {
val masterId = git.getRepository.resolve(branch)
service.mergePullRequest(git, branch, issueId, "merged", committer)
val lastCommitId = git.getRepository.resolve(branch)
val commit = using(new RevWalk(git.getRepository))(_.parseCommit(lastCommitId))
val commit = Using.resource(new RevWalk(git.getRepository))(_.parseCommit(lastCommitId))
assert(commit.getCommitterIdent() == committer)
assert(commit.getAuthorIdent() == committer)
assert(commit.getFullMessage() == "merged")

View File

@@ -2,13 +2,10 @@ package gitbucket.core.service
import gitbucket.core.GitBucketCoreModule
import gitbucket.core.util.{DatabaseConfig, Directory, FileUtil, JGitUtil}
import gitbucket.core.util.SyntaxSugars._
import io.github.gitbucket.solidbase.Solidbase
import liquibase.database.core.H2Database
import liquibase.database.jvm.JdbcConnection
import gitbucket.core.model._
import gitbucket.core.model.Profile._
import gitbucket.core.model.Profile.profile._
import gitbucket.core.model.Profile.profile.blockingApi._
import org.apache.commons.io.FileUtils
import java.sql.DriverManager
@@ -17,10 +14,11 @@ import java.io.File
import gitbucket.core.controller.Context
import gitbucket.core.service.SystemSettingsService.{Ssh, SystemSettings}
import javax.servlet.http.{HttpServletRequest, HttpSession}
import org.scalatest.mockito.MockitoSugar
import org.scalatestplus.mockito.MockitoSugar
import org.mockito.Mockito._
import scala.util.Random
import scala.util.Using
trait ServiceSpecBase extends MockitoSugar {
@@ -60,7 +58,7 @@ trait ServiceSpecBase extends MockitoSugar {
FileUtil.withTmpDir(new File(FileUtils.getTempDirectory(), Random.alphanumeric.take(10).mkString)) { dir =>
val (url, user, pass) = (DatabaseConfig.url(Some(dir.toString)), DatabaseConfig.user, DatabaseConfig.password)
org.h2.Driver.load()
using(DriverManager.getConnection(url, user, pass)) { conn =>
Using.resource(DriverManager.getConnection(url, user, pass)) { conn =>
val solidbase = new Solidbase()
val db = new H2Database()
db.setConnection(new JdbcConnection(conn)) // TODO Remove setConnection in the future

View File

@@ -29,7 +29,7 @@ class WebHookServiceSpec extends FunSuite with ServiceSpecBase {
assert(service.getPullRequestsByRequestForWebhook("user1", "repo1", "master1") == Map.empty)
val r = service.getPullRequestsByRequestForWebhook("user2", "repo2", "master2").mapValues(_.map(_.url).toSet)
val r = service.getPullRequestsByRequestForWebhook("user2", "repo2", "master2").view.mapValues(_.map(_.url).toSet)
assert(r.size == 3)
assert(r((issue1, issueUser, pullreq1, user1, user2)) == Set("webhook1-1", "webhook1-2"))
@@ -39,7 +39,8 @@ class WebHookServiceSpec extends FunSuite with ServiceSpecBase {
// when closed, it not founds.
service.updateClosed("user1", "repo1", issue1.issueId, true)
val r2 = service.getPullRequestsByRequestForWebhook("user2", "repo2", "master2").mapValues(_.map(_.url).toSet)
val r2 =
service.getPullRequestsByRequestForWebhook("user2", "repo2", "master2").view.mapValues(_.map(_.url).toSet)
assert(r2.size == 2)
assert(r2((issue3, issueUser, pullreq3, user3, user2)) == Set("webhook3-1", "webhook3-2"))
assert(r2((issue32, issueUser, pullreq32, user3, user2)) == Set("webhook3-1", "webhook3-2"))

View File

@@ -1,7 +1,5 @@
package gitbucket.core.util
import gitbucket.core.util.SyntaxSugars._
import org.apache.commons.io.FileUtils
import org.eclipse.jgit.api.Git
import org.eclipse.jgit.dircache.DirCache
@@ -13,6 +11,7 @@ import org.eclipse.jgit.errors._
import java.nio.file._
import java.io.File
import scala.util.Using
object GitSpecUtil {
@@ -28,7 +27,8 @@ object GitSpecUtil {
}
}
def withTestRepository[U](f: Git => U): U = withTestFolder(folder => using(Git.open(createTestRepository(folder)))(f))
def withTestRepository[U](f: Git => U): U =
withTestFolder(folder => Using.resource(Git.open(createTestRepository(folder)))(f))
def createTestRepository(dir: File): File = {
RepositoryCache.clear()
@@ -81,7 +81,7 @@ object GitSpecUtil {
def getFile(git: Git, branch: String, path: String) = {
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(branch))
val objectId = using(new TreeWalk(git.getRepository)) { walk =>
val objectId = Using.resource(new TreeWalk(git.getRepository)) { walk =>
walk.addTree(revCommit.getTree)
walk.setRecursive(true)
@scala.annotation.tailrec
@@ -108,7 +108,7 @@ object GitSpecUtil {
if (conflicted) {
throw new RuntimeException("conflict!")
}
val mergeTipCommit = using(new RevWalk(repository))(_.parseCommit(mergeTip))
val mergeTipCommit = Using.resource(new RevWalk(repository))(_.parseCommit(mergeTip))
val committer = mergeTipCommit.getCommitterIdent
// creates merge commit
val mergeCommit = new CommitBuilder()

View File

@@ -1,15 +1,12 @@
package gitbucket.core.util
import GitSpecUtil._
import gitbucket.core.util.SyntaxSugars.using
import org.apache.commons.io.IOUtils
import org.eclipse.jgit.diff.DiffEntry
import org.eclipse.jgit.diff.DiffEntry.ChangeType
import org.eclipse.jgit.lib.Constants
import org.eclipse.jgit.treewalk.TreeWalk
import org.scalatest.FunSuite
import scala.collection.JavaConverters._
import scala.jdk.CollectionConverters._
class JGitUtilSpec extends FunSuite {

View File

@@ -10,7 +10,7 @@ import gitbucket.core.service.RequestCache
import gitbucket.core.service.SystemSettingsService.{Ssh, SystemSettings}
import org.mockito.Mockito._
import org.scalatest.FunSpec
import org.scalatest.mockito.MockitoSugar
import org.scalatestplus.mockito.MockitoSugar
import play.twirl.api.Html
class AvatarImageProviderSpec extends FunSpec with MockitoSugar {

View File

@@ -3,7 +3,7 @@ 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.scalatestplus.mockito.MockitoSugar
import java.util.Date
import java.util.TimeZone

View File

@@ -3,7 +3,7 @@ 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.scalatestplus.mockito.MockitoSugar
import org.mockito.Mockito._
class MarkdownSpec extends FunSpec with MockitoSugar {