Deprecate using

This commit is contained in:
Naoki Takezoe
2019-08-05 01:38:38 +09:00
parent 33b46869b6
commit ec3961555f
30 changed files with 210 additions and 185 deletions

View File

@@ -20,6 +20,7 @@ import javax.servlet.{FilterChain, ServletRequest, ServletResponse}
import is.tagomor.woothee.Classifier import is.tagomor.woothee.Classifier
import scala.util.Try import scala.util.Try
import scala.util.Using
import net.coobird.thumbnailator.Thumbnails import net.coobird.thumbnailator.Thumbnails
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.ObjectId import org.eclipse.jgit.lib.ObjectId
@@ -240,7 +241,7 @@ abstract class ControllerBase
case false => None case false => None
} }
using(new TreeWalk(git.getRepository)) { treeWalk => Using.resource(new TreeWalk(git.getRepository)) { treeWalk =>
treeWalk.addTree(revCommit.getTree) treeWalk.addTree(revCommit.getTree)
treeWalk.setRecursive(true) treeWalk.setRecursive(true)
_getPathObjectId(path, treeWalk) _getPathObjectId(path, treeWalk)
@@ -268,7 +269,7 @@ abstract class ControllerBase
response.setContentLength(attrs("size").toInt) response.setContentLength(attrs("size").toInt)
val oid = attrs("oid").split(":")(1) 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) IOUtils.copy(in, response.getOutputStream)
} }
} else { } else {

View File

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

View File

@@ -1,7 +1,5 @@
package gitbucket.core.controller 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.pulls.html
import gitbucket.core.service.CommitStatusService import gitbucket.core.service.CommitStatusService
import gitbucket.core.service.MergeService import gitbucket.core.service.MergeService
@@ -15,11 +13,9 @@ import gitbucket.core.util.Implicits._
import gitbucket.core.util._ import gitbucket.core.util._
import org.scalatra.forms._ import org.scalatra.forms._
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.{ObjectId, PersonIdent}
import org.eclipse.jgit.revwalk.RevWalk
import org.scalatra.BadRequest import org.scalatra.BadRequest
import scala.collection.JavaConverters._ import scala.util.Using
class PullRequestsController class PullRequestsController
extends PullRequestsControllerBase extends PullRequestsControllerBase
@@ -273,7 +269,7 @@ trait PullRequestsControllerBase extends ControllerBase {
} else { } else {
if (repository.repository.defaultBranch != pullreq.requestBranch) { if (repository.repository.defaultBranch != pullreq.requestBranch) {
val userName = context.loginAccount.get.userName 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() git.branchDelete().setForce(true).setBranchNames(pullreq.requestBranch).call()
recordDeleteBranchActivity(repository.owner, repository.name, userName, pullreq.requestBranch) recordDeleteBranchActivity(repository.owner, repository.name, userName, pullreq.requestBranch)
} }
@@ -316,9 +312,11 @@ trait PullRequestsControllerBase extends ControllerBase {
} else { } else {
s"${pullreq.userName}:${pullreq.branch}" s"${pullreq.userName}:${pullreq.branch}"
} }
val existIds = using(Git.open(Directory.getRepositoryDir(owner, name))) { git => val existIds = Using
.resource(Git.open(Directory.getRepositoryDir(owner, name))) { git =>
JGitUtil.getAllCommitIds(git) JGitUtil.getAllCommitIds(git)
}.toSet }
.toSet
pullRemote( pullRemote(
repository, repository,
pullreq.requestBranch, pullreq.requestBranch,
@@ -372,7 +370,7 @@ trait PullRequestsControllerBase extends ControllerBase {
case (Some(originUserName), Some(originRepositoryName)) => { case (Some(originUserName), Some(originRepositoryName)) => {
getRepository(originUserName, originRepositoryName).map { getRepository(originUserName, originRepositoryName).map {
originRepository => originRepository =>
using( Using.resources(
Git.open(getRepositoryDir(originUserName, originRepositoryName)), Git.open(getRepositoryDir(originUserName, originRepositoryName)),
Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name)) Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name))
) { (oldGit, newGit) => ) { (oldGit, newGit) =>
@@ -388,7 +386,7 @@ trait PullRequestsControllerBase extends ControllerBase {
} getOrElse NotFound() } getOrElse NotFound()
} }
case _ => { 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 { JGitUtil.getDefaultBranch(git, forkedRepository).map {
case (_, defaultBranch) => case (_, defaultBranch) =>
redirect( redirect(
@@ -510,7 +508,7 @@ trait PullRequestsControllerBase extends ControllerBase {
} }
}; };
originRepository <- getRepository(originOwner, originRepositoryName)) yield { originRepository <- getRepository(originOwner, originRepositoryName)) yield {
using( Using.resources(
Git.open(getRepositoryDir(originRepository.owner, originRepository.name)), Git.open(getRepositoryDir(originRepository.owner, originRepository.name)),
Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.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) context.loginAccount.map(x => Seq(x.mailAddress) ++ getAccountExtraMailAddresses(x.userName)).getOrElse(Nil)
val branches = val branches =
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git => git =>
JGitUtil JGitUtil
.getBranches( .getBranches(

View File

@@ -12,12 +12,14 @@ import gitbucket.core.util.JGitUtil._
import gitbucket.core.util.SyntaxSugars._ import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.Implicits._ import gitbucket.core.util.Implicits._
import gitbucket.core.util.Directory._ import gitbucket.core.util.Directory._
import gitbucket.core.model.WebHookContentType
import org.scalatra.forms._ import org.scalatra.forms._
import org.scalatra.i18n.Messages import org.scalatra.i18n.Messages
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.Constants import org.eclipse.jgit.lib.Constants
import org.eclipse.jgit.lib.ObjectId import org.eclipse.jgit.lib.ObjectId
import gitbucket.core.model.WebHookContentType
import scala.util.Using
class RepositorySettingsController class RepositorySettingsController
extends RepositorySettingsControllerBase extends RepositorySettingsControllerBase
@@ -164,7 +166,7 @@ trait RepositorySettingsControllerBase extends ControllerBase {
} else { } else {
saveRepositoryDefaultBranch(repository.owner, repository.name, form.defaultBranch) saveRepositoryDefaultBranch(repository.owner, repository.name, form.defaultBranch)
// Change repository HEAD // 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) git.getRepository.updateRef(Constants.HEAD, true).link(Constants.R_HEADS + form.defaultBranch)
} }
flash.update("info", "Repository default branch has been updated.") flash.update("info", "Repository default branch has been updated.")
@@ -252,7 +254,7 @@ trait RepositorySettingsControllerBase extends ControllerBase {
Array(h.getName, h.getValue) Array(h.getName, h.getValue)
} }
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git => git =>
import scala.concurrent.duration._ import scala.concurrent.duration._
import scala.concurrent._ import scala.concurrent._
@@ -386,7 +388,7 @@ trait RepositorySettingsControllerBase extends ControllerBase {
*/ */
post("/:owner/:repository/settings/gc")(ownerOnly { repository => post("/:owner/:repository/settings/gc")(ownerOnly { repository =>
LockUtil.lock(s"${repository.owner}/${repository.name}") { 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() git.gc().call()
} }
} }

View File

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

View File

@@ -19,6 +19,7 @@ import org.scalatra.forms._
import org.scalatra.i18n.Messages import org.scalatra.i18n.Messages
import scala.collection.mutable.ListBuffer import scala.collection.mutable.ListBuffer
import scala.util.Using
class SystemSettingsController class SystemSettingsController
extends SystemSettingsControllerBase extends SystemSettingsControllerBase
@@ -225,20 +226,20 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
val conn = request2Session(request).conn val conn = request2Session(request).conn
val meta = conn.getMetaData val meta = conn.getMetaData
val tables = ListBuffer[Table]() val tables = ListBuffer[Table]()
using(meta.getTables(null, "%", "%", Array("TABLE", "VIEW"))) { Using.resource(meta.getTables(null, "%", "%", Array("TABLE", "VIEW"))) {
rs => rs =>
while (rs.next()) { while (rs.next()) {
val tableName = rs.getString("TABLE_NAME") val tableName = rs.getString("TABLE_NAME")
val pkColumns = ListBuffer[String]() val pkColumns = ListBuffer[String]()
using(meta.getPrimaryKeys(null, null, tableName)) { rs => Using.resource(meta.getPrimaryKeys(null, null, tableName)) { rs =>
while (rs.next()) { while (rs.next()) {
pkColumns += rs.getString("COLUMN_NAME").toUpperCase pkColumns += rs.getString("COLUMN_NAME").toUpperCase
} }
} }
val columns = ListBuffer[Column]() val columns = ListBuffer[Column]()
using(meta.getColumns(null, "%", tableName, "%")) { rs => Using.resource(meta.getColumns(null, "%", tableName, "%")) { rs =>
while (rs.next()) { while (rs.next()) {
val columnName = rs.getString("COLUMN_NAME").toUpperCase val columnName = rs.getString("COLUMN_NAME").toUpperCase
columns += Column(columnName, pkColumns.contains(columnName)) columns += Column(columnName, pkColumns.contains(columnName))
@@ -259,10 +260,10 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
if (trimmedQuery.nonEmpty) { if (trimmedQuery.nonEmpty) {
try { try {
val conn = request2Session(request).conn val conn = request2Session(request).conn
using(conn.prepareStatement(query)) { Using.resource(conn.prepareStatement(query)) {
stmt => stmt =>
if (trimmedQuery.toUpperCase.startsWith("SELECT")) { if (trimmedQuery.toUpperCase.startsWith("SELECT")) {
using(stmt.executeQuery()) { Using.resource(stmt.executeQuery()) {
rs => rs =>
val meta = rs.getMetaData val meta = rs.getMetaData
val columns = for (i <- 1 to meta.getColumnCount) yield { val columns = for (i <- 1 to meta.getColumnCount) yield {
@@ -516,7 +517,7 @@ trait SystemSettingsControllerBase extends AccountManagementControllerBase {
response.setHeader("Content-Disposition", "attachment; filename=" + file.getName) response.setHeader("Content-Disposition", "attachment; filename=" + file.getName)
response.setContentLength(file.length.toInt) response.setContentLength(file.length.toInt)
using(new FileInputStream(file)) { in => Using.resource(new FileInputStream(file)) { in =>
IOUtils.copy(in, response.outputStream) IOUtils.copy(in, response.outputStream)
} }

View File

@@ -13,6 +13,7 @@ import gitbucket.core.util.Directory._
import org.scalatra.forms._ import org.scalatra.forms._
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.scalatra.i18n.Messages import org.scalatra.i18n.Messages
import scala.util.Using
class WikiController class WikiController
extends WikiControllerBase extends WikiControllerBase
@@ -90,7 +91,7 @@ trait WikiControllerBase extends ControllerBase {
get("/:owner/:repository/wiki/:page/_history")(referrersOnly { repository => get("/:owner/:repository/wiki/:page/_history")(referrersOnly { repository =>
val pageName = StringUtil.urlDecode(params("page")) 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 { JGitUtil.getCommitLog(git, "master", path = pageName + ".md") match {
case Right((logs, hasNext)) => html.history(Some(pageName), logs, repository, isEditable(repository)) case Right((logs, hasNext)) => html.history(Some(pageName), logs, repository, isEditable(repository))
case Left(_) => NotFound() case Left(_) => NotFound()
@@ -102,7 +103,7 @@ trait WikiControllerBase extends ControllerBase {
val pageName = StringUtil.urlDecode(params("page")) val pageName = StringUtil.urlDecode(params("page"))
val Array(from, to) = params("commitId").split("\\.\\.\\.") 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( html.compare(
Some(pageName), Some(pageName),
from, from,
@@ -118,7 +119,7 @@ trait WikiControllerBase extends ControllerBase {
get("/:owner/:repository/wiki/_compare/:commitId")(referrersOnly { repository => get("/:owner/:repository/wiki/_compare/:commitId")(referrersOnly { repository =>
val Array(from, to) = params("commitId").split("\\.\\.\\.") 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( html.compare(
None, None,
from, from,
@@ -269,7 +270,7 @@ trait WikiControllerBase extends ControllerBase {
}) })
get("/:owner/:repository/wiki/_history")(referrersOnly { repository => 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 { JGitUtil.getCommitLog(git, "master") match {
case Right((logs, hasNext)) => html.history(None, logs, repository, isEditable(repository)) case Right((logs, hasNext)) => html.history(None, logs, repository, isEditable(repository))
case Left(_) => NotFound() case Left(_) => NotFound()
@@ -279,7 +280,7 @@ trait WikiControllerBase extends ControllerBase {
get("/:owner/:repository/wiki/_blob/*")(referrersOnly { repository => get("/:owner/:repository/wiki/_blob/*")(referrersOnly { repository =>
val path = multiParams("splat").head 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")) val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve("master"))
getPathObjectId(git, path, revCommit).map { objectId => getPathObjectId(git, path, revCommit).map { objectId =>

View File

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

View File

@@ -3,11 +3,11 @@ import gitbucket.core.api._
import gitbucket.core.controller.ControllerBase import gitbucket.core.controller.ControllerBase
import gitbucket.core.service.{AccountService, ProtectedBranchService, RepositoryService} import gitbucket.core.service.{AccountService, ProtectedBranchService, RepositoryService}
import gitbucket.core.util._ import gitbucket.core.util._
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.Directory._ import gitbucket.core.util.Directory._
import gitbucket.core.util.Implicits._ import gitbucket.core.util.Implicits._
import gitbucket.core.util.JGitUtil.getBranches import gitbucket.core.util.JGitUtil.getBranches
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import scala.util.Using
trait ApiRepositoryBranchControllerBase extends ControllerBase { trait ApiRepositoryBranchControllerBase extends ControllerBase {
self: RepositoryService self: RepositoryService
@@ -25,7 +25,7 @@ trait ApiRepositoryBranchControllerBase extends ControllerBase {
* https://developer.github.com/v3/repos/branches/#list-branches * https://developer.github.com/v3/repos/branches/#list-branches
*/ */
get("/api/v3/repos/:owner/:repository/branches")(referrersOnly { repository => 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( JsonFormat(
JGitUtil JGitUtil
.getBranches( .getBranches(
@@ -45,7 +45,7 @@ trait ApiRepositoryBranchControllerBase extends ControllerBase {
* https://developer.github.com/v3/repos/branches/#get-branch * https://developer.github.com/v3/repos/branches/#get-branch
*/ */
get("/api/v3/repos/:owner/:repository/branches/*")(referrersOnly { repository => 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 => git =>
(for { (for {
branch <- params.get("splat") if repository.branchList.contains(branch) 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 => patch("/api/v3/repos/:owner/:repository/branches/*")(ownerOnly { repository =>
import gitbucket.core.api._ import gitbucket.core.api._
using(Git.open(getRepositoryDir(repository.owner, repository.name))) { Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) {
git => git =>
(for { (for {
branch <- params.get("splat") if repository.branchList.contains(branch) 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.Implicits._
import gitbucket.core.util.JGitUtil.CommitInfo import gitbucket.core.util.JGitUtil.CommitInfo
import gitbucket.core.util.{JGitUtil, ReferrerAuthenticator, RepositoryName} import gitbucket.core.util.{JGitUtil, ReferrerAuthenticator, RepositoryName}
import gitbucket.core.util.SyntaxSugars.using
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.eclipse.jgit.revwalk.RevWalk import org.eclipse.jgit.revwalk.RevWalk
import scala.util.Using
trait ApiRepositoryCommitControllerBase extends ControllerBase { trait ApiRepositoryCommitControllerBase extends ControllerBase {
self: AccountService with CommitsService with ReferrerAuthenticator => self: AccountService with CommitsService with ReferrerAuthenticator =>
@@ -27,11 +27,11 @@ trait ApiRepositoryCommitControllerBase extends ControllerBase {
val name = repository.name val name = repository.name
val sha = params("sha") val sha = params("sha")
using(Git.open(getRepositoryDir(owner, name))) { Using.resource(Git.open(getRepositoryDir(owner, name))) {
git => git =>
val repo = git.getRepository val repo = git.getRepository
val objectId = repo.resolve(sha) 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)) 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.Directory.getRepositoryDir
import gitbucket.core.util._ import gitbucket.core.util._
import gitbucket.core.util.Implicits._ import gitbucket.core.util.Implicits._
import gitbucket.core.util.SyntaxSugars.using
import gitbucket.core.model.Profile.profile.blockingApi._ import gitbucket.core.model.Profile.profile.blockingApi._
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import scala.concurrent.Await import scala.concurrent.Await
import scala.concurrent.duration.Duration import scala.concurrent.duration.Duration
import scala.util.Using
trait ApiRepositoryControllerBase extends ControllerBase { trait ApiRepositoryControllerBase extends ControllerBase {
self: RepositoryService self: RepositoryService
@@ -193,7 +193,7 @@ trait ApiRepositoryControllerBase extends ControllerBase {
*/ */
get("/api/v3/repos/:owner/:repository/raw/*")(referrersOnly { repository => get("/api/v3/repos/:owner/:repository/raw/*")(referrersOnly { repository =>
val (id, path) = repository.splitPath(multiParams("splat").head) 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)) val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(id))
getPathObjectId(git, path, revCommit).map { objectId => 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.model.{Account, Issue}
import gitbucket.core.service.RepositoryService.RepositoryInfo import gitbucket.core.service.RepositoryService.RepositoryInfo
import gitbucket.core.service.SystemSettingsService.SystemSettings import gitbucket.core.service.SystemSettingsService.SystemSettings
import gitbucket.core.util.SyntaxSugars._
import io.github.gitbucket.solidbase.model.Version import io.github.gitbucket.solidbase.model.Version
import org.apache.sshd.server.command.Command import org.apache.sshd.server.command.Command
import play.twirl.api.Html import play.twirl.api.Html
import scala.util.Using
/** /**
* Trait for define plugin interface. * Trait for define plugin interface.
@@ -434,7 +434,7 @@ abstract class Plugin {
* Helper method to get a resource from classpath. * Helper method to get a resource from classpath.
*/ */
protected def fromClassPath(path: String): Array[Byte] = 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) val bytes = new Array[Byte](in.available)
in.read(bytes) in.read(bytes)
bytes bytes

View File

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

@@ -8,7 +8,6 @@ import gitbucket.core.service.RepositoryService.RepositoryInfo
import gitbucket.core.api.JsonFormat import gitbucket.core.api.JsonFormat
import gitbucket.core.controller.Context import gitbucket.core.controller.Context
import gitbucket.core.plugin.PluginRegistry import gitbucket.core.plugin.PluginRegistry
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.Directory._ import gitbucket.core.util.Directory._
import gitbucket.core.util.Implicits._ import gitbucket.core.util.Implicits._
import gitbucket.core.util.JGitUtil import gitbucket.core.util.JGitUtil
@@ -20,6 +19,7 @@ import org.eclipse.jgit.api.Git
import org.eclipse.jgit.lib.ObjectId import org.eclipse.jgit.lib.ObjectId
import scala.jdk.CollectionConverters._ import scala.jdk.CollectionConverters._
import scala.util.Using
trait PullRequestService { trait PullRequestService {
self: IssuesService self: IssuesService
@@ -387,7 +387,7 @@ trait PullRequestService {
requestRepositoryName: String, requestRepositoryName: String,
requestCommitId: String requestCommitId: String
): (Seq[Seq[CommitInfo]], Seq[DiffInfo]) = ): (Seq[Seq[CommitInfo]], Seq[DiffInfo]) =
using( Using.resources(
Git.open(getRepositoryDir(userName, repositoryName)), Git.open(getRepositoryDir(userName, repositoryName)),
Git.open(getRepositoryDir(requestUserName, requestRepositoryName)) Git.open(getRepositoryDir(requestUserName, requestRepositoryName))
) { (oldGit, newGit) => ) { (oldGit, newGit) =>
@@ -478,7 +478,7 @@ trait PullRequestService {
originId: String, originId: String,
forkedId: String forkedId: String
): (Option[ObjectId], Option[ObjectId]) = { ): (Option[ObjectId], Option[ObjectId]) = {
using( Using.resources(
Git.open(getRepositoryDir(originRepository.owner, originRepository.name)), Git.open(getRepositoryDir(originRepository.owner, originRepository.name)),
Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name)) Git.open(getRepositoryDir(forkedRepository.owner, forkedRepository.name))
) { ) {

View File

@@ -8,11 +8,11 @@ import gitbucket.core.service.WebHookService.WebHookPushPayload
import gitbucket.core.util.Directory.getRepositoryDir import gitbucket.core.util.Directory.getRepositoryDir
import gitbucket.core.util.JGitUtil.CommitInfo import gitbucket.core.util.JGitUtil.CommitInfo
import gitbucket.core.util.{JGitUtil, LockUtil} import gitbucket.core.util.{JGitUtil, LockUtil}
import gitbucket.core.util.SyntaxSugars.using
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.eclipse.jgit.dircache.{DirCache, DirCacheBuilder} import org.eclipse.jgit.dircache.{DirCache, DirCacheBuilder}
import org.eclipse.jgit.lib._ import org.eclipse.jgit.lib._
import org.eclipse.jgit.transport.{ReceiveCommand, ReceivePack} import org.eclipse.jgit.transport.{ReceiveCommand, ReceivePack}
import scala.util.Using
trait RepositoryCommitFileService { trait RepositoryCommitFileService {
self: AccountService with ActivityService with IssuesService with PullRequestService with WebHookPullRequestService => self: AccountService with ActivityService with IssuesService with PullRequestService with WebHookPullRequestService =>
@@ -117,7 +117,7 @@ trait RepositoryCommitFileService {
)(implicit s: Session, c: JsonFormat.Context): ObjectId = { )(implicit s: Session, c: JsonFormat.Context): ObjectId = {
LockUtil.lock(s"${repository.owner}/${repository.name}") { 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 builder = DirCache.newInCore.builder()
val inserter = git.getRepository.newObjectInserter() val inserter = git.getRepository.newObjectInserter()
val headName = s"refs/heads/${branch}" 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._
import gitbucket.core.util.StringUtil import gitbucket.core.util.StringUtil
import Directory._ import Directory._
import SyntaxSugars._
import org.eclipse.jgit.revwalk.RevWalk import org.eclipse.jgit.revwalk.RevWalk
import org.eclipse.jgit.treewalk.TreeWalk import org.eclipse.jgit.treewalk.TreeWalk
import org.eclipse.jgit.lib.FileMode import org.eclipse.jgit.lib.FileMode
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import gitbucket.core.model.Profile.profile.blockingApi._ import gitbucket.core.model.Profile.profile.blockingApi._
import scala.util.Using
trait RepositorySearchService { self: IssuesService => trait RepositorySearchService { self: IssuesService =>
import RepositorySearchService._ import RepositorySearchService._
@@ -37,12 +37,12 @@ trait RepositorySearchService { self: IssuesService =>
} }
def countFiles(owner: String, repository: String, query: String): Int = 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 if (JGitUtil.isEmpty(git)) 0 else searchRepositoryFiles(git, query).length
} }
def searchFiles(owner: String, repository: String, query: String): List[FileSearchResult] = 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)) { if (JGitUtil.isEmpty(git)) {
Nil Nil
} else { } else {
@@ -57,12 +57,12 @@ trait RepositorySearchService { self: IssuesService =>
} }
def countWikiPages(owner: String, repository: String, query: String): Int = 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 if (JGitUtil.isEmpty(git)) 0 else searchRepositoryFiles(git, query).length
} }
def searchWikiPages(owner: String, repository: String, query: String): List[FileSearchResult] = 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)) { if (JGitUtil.isEmpty(git)) {
Nil Nil
} else { } else {

View File

@@ -17,6 +17,7 @@ import org.eclipse.jgit.api.Git
import org.eclipse.jgit.dircache.{DirCache, DirCacheBuilder} import org.eclipse.jgit.dircache.{DirCache, DirCacheBuilder}
import org.eclipse.jgit.lib.{Repository => _, _} import org.eclipse.jgit.lib.{Repository => _, _}
import org.eclipse.jgit.transport.{ReceiveCommand, ReceivePack} import org.eclipse.jgit.transport.{ReceiveCommand, ReceivePack}
import scala.util.Using
trait RepositoryService { trait RepositoryService {
self: AccountService => self: AccountService =>
@@ -763,7 +764,7 @@ trait RepositoryService {
} }
// Get template file from project root. When didn't find, will lookup default folder. // 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, ".")) choiceTemplate(JGitUtil.getFileList(git, repository.repository.defaultBranch, "."))
.orElse { .orElse {
choiceTemplate(JGitUtil.getFileList(git, repository.repository.defaultBranch, ".gitbucket")) 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.ConfigUtil._
import gitbucket.core.util.Directory._ import gitbucket.core.util.Directory._
import gitbucket.core.util.SyntaxSugars._ import gitbucket.core.util.SyntaxSugars._
import scala.util.Using
trait SystemSettingsService { trait SystemSettingsService {
@@ -70,7 +71,7 @@ trait SystemSettingsService {
props.setProperty(SkinName, settings.skinName.toString) props.setProperty(SkinName, settings.skinName.toString)
props.setProperty(ShowMailAddress, settings.showMailAddress.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) props.store(out, null)
} }
} }
@@ -79,7 +80,7 @@ trait SystemSettingsService {
def loadSystemSettings(): SystemSettings = { def loadSystemSettings(): SystemSettings = {
defining(new java.util.Properties()) { props => defining(new java.util.Properties()) { props =>
if (GitBucketConf.exists) { if (GitBucketConf.exists) {
using(new java.io.FileInputStream(GitBucketConf)) { in => Using.resource(new java.io.FileInputStream(GitBucketConf)) { in =>
props.load(in) props.load(in)
} }
} }

View File

@@ -16,6 +16,7 @@ import org.eclipse.jgit.patch._
import org.eclipse.jgit.api.errors.PatchFormatException import org.eclipse.jgit.api.errors.PatchFormatException
import scala.jdk.CollectionConverters._ import scala.jdk.CollectionConverters._
import scala.util.Using
object WikiService { object WikiService {
@@ -74,7 +75,7 @@ trait WikiService {
* Returns the wiki page. * Returns the wiki page.
*/ */
def getWikiPage(owner: String, repository: String, pageName: String): Option[WikiPageInfo] = { 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)) { if (!JGitUtil.isEmpty(git)) {
JGitUtil.getFileList(git, "master", ".").find(_.name == pageName + ".md").map { file => JGitUtil.getFileList(git, "master", ".").find(_.name == pageName + ".md").map { file =>
WikiPageInfo( WikiPageInfo(
@@ -93,7 +94,7 @@ trait WikiService {
* Returns the list of wiki page names. * Returns the list of wiki page names.
*/ */
def getWikiPageList(owner: String, repository: String): List[String] = { 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 JGitUtil
.getFileList(git, "master", ".") .getFileList(git, "master", ".")
.filter(_.name.endsWith(".md")) .filter(_.name.endsWith(".md"))
@@ -119,7 +120,7 @@ trait WikiService {
try { try {
LockUtil.lock(s"${owner}/${repository}/wiki") { 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 reader = git.getRepository.newObjectReader
val oldTreeIter = new CanonicalTreeParser val oldTreeIter = new CanonicalTreeParser
oldTreeIter.reset(reader, git.getRepository.resolve(from + "^{tree}")) oldTreeIter.reset(reader, git.getRepository.resolve(from + "^{tree}"))
@@ -134,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) val formatter = new DiffFormatter(out)
formatter.setRepository(git.getRepository) formatter.setRepository(git.getRepository)
formatter.format(diffs.asJava) formatter.format(diffs.asJava)
@@ -238,7 +239,7 @@ trait WikiService {
currentId: Option[String] currentId: Option[String]
): Option[String] = { ): Option[String] = {
LockUtil.lock(s"${owner}/${repository}/wiki") { 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 builder = DirCache.newInCore.builder()
val inserter = git.getRepository.newObjectInserter() val inserter = git.getRepository.newObjectInserter()
val headId = git.getRepository.resolve(Constants.HEAD + "^{commit}") val headId = git.getRepository.resolve(Constants.HEAD + "^{commit}")
@@ -310,7 +311,7 @@ trait WikiService {
message: String message: String
): Unit = { ): Unit = {
LockUtil.lock(s"${owner}/${repository}/wiki") { 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 builder = DirCache.newInCore.builder()
val inserter = git.getRepository.newObjectInserter() val inserter = git.getRepository.newObjectInserter()
val headId = git.getRepository.resolve(Constants.HEAD + "^{commit}") val headId = git.getRepository.resolve(Constants.HEAD + "^{commit}")

View File

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

View File

@@ -4,6 +4,8 @@ import java.io.File
import java.util import java.util
import java.util.Date import java.util.Date
import scala.util.Using
import gitbucket.core.api import gitbucket.core.api
import gitbucket.core.model.WebHook import gitbucket.core.model.WebHook
import gitbucket.core.plugin.{GitRepositoryRouting, PluginRegistry} import gitbucket.core.plugin.{GitRepositoryRouting, PluginRegistry}
@@ -144,7 +146,7 @@ class GitRepositoryServlet extends GitServlet with SystemSettingsService {
} }
res.setContentType("application/vnd.git-lfs+json") res.setContentType("application/vnd.git-lfs+json")
using(res.getWriter) { out => Using.resource(res.getWriter) { out =>
out.print(write(batchResponse)) out.print(write(batchResponse))
out.flush() out.flush()
} }
@@ -254,7 +256,7 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
command.setResult(ReceiveCommand.Result.REJECTED_OTHER_REASON, error) 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) existIds = JGitUtil.getAllCommitIds(git)
} }
} catch { } catch {
@@ -269,7 +271,7 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
def onPostReceive(receivePack: ReceivePack, commands: java.util.Collection[ReceiveCommand]): Unit = { def onPostReceive(receivePack: ReceivePack, commands: java.util.Collection[ReceiveCommand]): Unit = {
Database() withTransaction { implicit session => Database() withTransaction { implicit session =>
try { try {
using(Git.open(Directory.getRepositoryDir(owner, repository))) { git => Using.resource(Git.open(Directory.getRepositoryDir(owner, repository))) { git =>
JGitUtil.removeCache(git) JGitUtil.removeCache(git)
val pushedIds = scala.collection.mutable.Set[String]() val pushedIds = scala.collection.mutable.Set[String]()
@@ -293,7 +295,7 @@ class CommitLogHook(owner: String, repository: String, pusher: String, baseUrl:
if (JGitUtil.isEmpty(git) && commits.nonEmpty && branchName != repositoryInfo.repository.defaultBranch) { if (JGitUtil.isEmpty(git) && commits.nonEmpty && branchName != repositoryInfo.repository.defaultBranch) {
saveRepositoryDefaultBranch(owner, repository, branchName) saveRepositoryDefaultBranch(owner, repository, branchName)
// Change repository HEAD // 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) git.getRepository.updateRef(Constants.HEAD, true).link(Constants.R_HEADS + branchName)
} }
} }
@@ -447,7 +449,7 @@ class WikiCommitHook(owner: String, repository: String, pusher: String, baseUrl:
commitIds.foreach { commitIds.foreach {
case (oldCommitId, newCommitId) => 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 => JGitUtil.getCommitLog(git, oldCommitId, newCommitId).flatMap { commit =>
val diffs = JGitUtil.getDiffs(git, None, commit.id, false, false) val diffs = JGitUtil.getDiffs(git, None, commit.id, false, false)
diffs.collect { diffs.collect {

View File

@@ -9,7 +9,6 @@ import gitbucket.core.plugin.PluginRegistry
import gitbucket.core.service.{ActivityService, SystemSettingsService} import gitbucket.core.service.{ActivityService, SystemSettingsService}
import gitbucket.core.util.DatabaseConfig import gitbucket.core.util.DatabaseConfig
import gitbucket.core.util.Directory._ import gitbucket.core.util.Directory._
import gitbucket.core.util.SyntaxSugars._
import gitbucket.core.util.JDBCUtil._ import gitbucket.core.util.JDBCUtil._
import gitbucket.core.model.Profile.profile.blockingApi._ import gitbucket.core.model.Profile.profile.blockingApi._
// Imported names have higher precedence than names, defined in other files. // Imported names have higher precedence than names, defined in other files.
@@ -26,6 +25,7 @@ import akka.actor.{Actor, ActorSystem, Props}
import com.typesafe.akka.extension.quartz.QuartzSchedulerExtension import com.typesafe.akka.extension.quartz.QuartzSchedulerExtension
import scala.jdk.CollectionConverters._ import scala.jdk.CollectionConverters._
import scala.util.Using
/** /**
* Initialize GitBucket system. * Initialize GitBucket system.
@@ -142,7 +142,7 @@ class InitializeListener extends ServletContextListener with SystemSettingsServi
logger.info("Extract bundled plugins...") logger.info("Extract bundled plugins...")
val cl = Thread.currentThread.getContextClassLoader val cl = Thread.currentThread.getContextClassLoader
try { try {
using(cl.getResourceAsStream("bundle-plugins.txt")) { pluginsFile => Using.resource(cl.getResourceAsStream("bundle-plugins.txt")) { pluginsFile =>
if (pluginsFile != null) { if (pluginsFile != null) {
val plugins = IOUtils.readLines(pluginsFile, "UTF-8") val plugins = IOUtils.readLines(pluginsFile, "UTF-8")
val gitbucketVersion = GitBucketCoreModule.getVersions.asScala.last.getVersion val gitbucketVersion = GitBucketCoreModule.getVersions.asScala.last.getVersion
@@ -157,7 +157,7 @@ class InitializeListener extends ServletContextListener with SystemSettingsServi
logger.info(s"Extract to ${file.getAbsolutePath}") logger.info(s"Extract to ${file.getAbsolutePath}")
FileUtils.forceMkdirParent(file) FileUtils.forceMkdirParent(file)
using(in, new FileOutputStream(file)) { Using.resources(in, new FileOutputStream(file)) {
case (in, out) => IOUtils.copy(in, out) 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 org.slf4j.LoggerFactory
import java.io.{File, InputStream, OutputStream} import java.io.{File, InputStream, OutputStream}
import SyntaxSugars._
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import Directory._ import Directory._
import gitbucket.core.ssh.PublicKeyAuthenticator.AuthType import gitbucket.core.ssh.PublicKeyAuthenticator.AuthType
import org.eclipse.jgit.transport.{ReceivePack, UploadPack} import org.eclipse.jgit.transport.{ReceivePack, UploadPack}
import org.apache.sshd.server.shell.UnknownCommand import org.apache.sshd.server.shell.UnknownCommand
import org.eclipse.jgit.errors.RepositoryNotFoundException import org.eclipse.jgit.errors.RepositoryNotFoundException
import scala.util.Using
object GitCommand { object GitCommand {
val DefaultCommandRegex = """\Agit-(upload|receive)-pack '/([a-zA-Z0-9\-_.]+)/([a-zA-Z0-9\-\+_.]+).git'\Z""".r 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) { if (execute) {
using(Git.open(getRepositoryDir(owner, repoName))) { git => Using.resource(Git.open(getRepositoryDir(owner, repoName))) { git =>
val repository = git.getRepository val repository = git.getRepository
val upload = new UploadPack(repository) val upload = new UploadPack(repository)
upload.upload(in, out, err) upload.upload(in, out, err)
@@ -177,7 +177,7 @@ class DefaultGitReceivePack(owner: String, repoName: String, baseUrl: String, ss
} }
if (execute) { if (execute) {
using(Git.open(getRepositoryDir(owner, repoName))) { git => Using.resource(Git.open(getRepositoryDir(owner, repoName))) { git =>
val repository = git.getRepository val repository = git.getRepository
val receive = new ReceivePack(repository) val receive = new ReceivePack(repository)
if (!repoName.endsWith(".wiki")) { if (!repoName.endsWith(".wiki")) {
@@ -202,7 +202,7 @@ class PluginGitUploadPack(repoName: String, routing: GitRepositoryRouting)
if (execute) { if (execute) {
val path = routing.urlPattern.r.replaceFirstIn(repoName, routing.localPath) 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 repository = git.getRepository
val upload = new UploadPack(repository) val upload = new UploadPack(repository)
upload.upload(in, out, err) upload.upload(in, out, err)
@@ -222,7 +222,7 @@ class PluginGitReceivePack(repoName: String, routing: GitRepositoryRouting)
if (execute) { if (execute) {
val path = routing.urlPattern.r.replaceFirstIn(repoName, routing.localPath) 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 repository = git.getRepository
val receive = new ReceivePack(repository) val receive = new ReceivePack(repository)
receive.receive(in, out, err) 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.lib.{ObjectReader, Repository}
import org.eclipse.jgit.revwalk.{RevTree, RevWalk} import org.eclipse.jgit.revwalk.{RevTree, RevWalk}
import org.eclipse.jgit.treewalk.TreeWalk import org.eclipse.jgit.treewalk.TreeWalk
import gitbucket.core.util.SyntaxSugars._
import scala.util.Using
object EditorConfigUtil { object EditorConfigUtil {
private class JGitResource(repo: Repository, revStr: String, path: Ec4jPath) extends Resource { private class JGitResource(repo: Repository, revStr: String, path: Ec4jPath) extends Resource {
@@ -27,7 +28,7 @@ object EditorConfigUtil {
} }
private def getRevTree: RevTree = { private def getRevTree: RevTree = {
using(repo.newObjectReader()) { reader: ObjectReader => Using.resource(repo.newObjectReader()) { reader: ObjectReader =>
val revWalk = new RevWalk(reader) val revWalk = new RevWalk(reader)
val id = repo.resolve(revStr) val id = repo.resolve(revStr)
val commit = revWalk.parseCommit(id) val commit = revWalk.parseCommit(id)
@@ -36,7 +37,7 @@ object EditorConfigUtil {
} }
override def exists(): Boolean = { override def exists(): Boolean = {
using(repo.newObjectReader()) { reader: ObjectReader => Using.resource(repo.newObjectReader()) { reader: ObjectReader =>
try { try {
val treeWalk = Option(TreeWalk.forPath(reader, removeInitialSlash(path), getRevTree)) val treeWalk = Option(TreeWalk.forPath(reader, removeInitialSlash(path), getRevTree))
treeWalk.isDefined treeWalk.isDefined
@@ -59,7 +60,7 @@ object EditorConfigUtil {
} }
override def openReader(): Reader = { override def openReader(): Reader = {
using(repo.newObjectReader) { reader: ObjectReader => Using.resource(repo.newObjectReader) { reader: ObjectReader =>
val treeWalk = TreeWalk.forPath(reader, removeInitialSlash(path), getRevTree) val treeWalk = TreeWalk.forPath(reader, removeInitialSlash(path), getRevTree)
new InputStreamReader(reader.open(treeWalk.getObjectId(0)).openStream, StandardCharsets.UTF_8) new InputStreamReader(reader.open(treeWalk.getObjectId(0)).openStream, StandardCharsets.UTF_8)
} }

View File

@@ -3,9 +3,9 @@ package gitbucket.core.util
import java.io._ import java.io._
import java.sql._ import java.sql._
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import SyntaxSugars._
import scala.annotation.tailrec import scala.annotation.tailrec
import scala.collection.mutable.ListBuffer import scala.collection.mutable.ListBuffer
import scala.util.Using
/** /**
* Provides implicit class which extends java.sql.Connection. * 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] = { def find[T](sql: String, params: Any*)(f: ResultSet => T): Option[T] = {
execute(sql, params: _*) { stmt => execute(sql, params: _*) { stmt =>
using(stmt.executeQuery()) { rs => Using.resource(stmt.executeQuery()) { rs =>
if (rs.next) Some(f(rs)) else None 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] = { def select[T](sql: String, params: Any*)(f: ResultSet => T): Seq[T] = {
execute(sql, params: _*) { stmt => execute(sql, params: _*) { stmt =>
using(stmt.executeQuery()) { rs => Using.resource(stmt.executeQuery()) { rs =>
val list = new ListBuffer[T] val list = new ListBuffer[T]
while (rs.next) { while (rs.next) {
list += f(rs) list += f(rs)
@@ -46,14 +46,14 @@ object JDBCUtil {
def selectInt(sql: String, params: Any*): Int = { def selectInt(sql: String, params: Any*): Int = {
execute(sql, params: _*) { stmt => execute(sql, params: _*) { stmt =>
using(stmt.executeQuery()) { rs => Using.resource(stmt.executeQuery()) { rs =>
if (rs.next) rs.getInt(1) else 0 if (rs.next) rs.getInt(1) else 0
} }
} }
} }
private def execute[T](sql: String, params: Any*)(f: (PreparedStatement) => T): T = { 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 { params.zipWithIndex.foreach {
case (p, i) => case (p, i) =>
p match { p match {
@@ -68,7 +68,7 @@ object JDBCUtil {
def importAsSQL(in: InputStream): Unit = { def importAsSQL(in: InputStream): Unit = {
conn.setAutoCommit(false) conn.setAutoCommit(false)
try { try {
using(in) { in => Using.resource(in) { in =>
var out = new ByteArrayOutputStream() var out = new ByteArrayOutputStream()
var length = 0 var length = 0
@@ -111,7 +111,7 @@ object JDBCUtil {
val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
val file = File.createTempFile("gitbucket-export-", ".sql") val file = File.createTempFile("gitbucket-export-", ".sql")
using(new FileOutputStream(file)) { out => Using.resource(new FileOutputStream(file)) { out =>
val dbMeta = conn.getMetaData val dbMeta = conn.getMetaData
val allTablesInDatabase = allTablesOrderByDependencies(dbMeta) val allTablesInDatabase = allTablesOrderByDependencies(dbMeta)
@@ -168,7 +168,7 @@ object JDBCUtil {
} }
def allTableNames(): Seq[String] = { 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] val tableNames = new ListBuffer[String]
while (rs.next) { while (rs.next) {
val name = rs.getString("TABLE_NAME").toUpperCase val name = rs.getString("TABLE_NAME").toUpperCase
@@ -188,7 +188,7 @@ object JDBCUtil {
tableName tableName
} }
using(meta.getExportedKeys(null, null, normalizedTableName)) { rs => Using.resource(meta.getExportedKeys(null, null, normalizedTableName)) { rs =>
val children = new ListBuffer[String] val children = new ListBuffer[String]
while (rs.next) { while (rs.next) {
val childTableName = rs.getString("FKTABLE_NAME").toUpperCase val childTableName = rs.getString("FKTABLE_NAME").toUpperCase

View File

@@ -10,6 +10,7 @@ import SyntaxSugars._
import scala.annotation.tailrec import scala.annotation.tailrec
import scala.jdk.CollectionConverters._ import scala.jdk.CollectionConverters._
import scala.util.Using
import org.eclipse.jgit.lib._ import org.eclipse.jgit.lib._
import org.eclipse.jgit.revwalk._ import org.eclipse.jgit.revwalk._
import org.eclipse.jgit.revwalk.filter._ import org.eclipse.jgit.revwalk.filter._
@@ -28,6 +29,8 @@ import org.eclipse.jgit.dircache.DirCacheEntry
import org.eclipse.jgit.util.io.DisabledOutputStream import org.eclipse.jgit.util.io.DisabledOutputStream
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import scala.util.Using.Releasable
/** /**
* Provides complex JGit operations. * Provides complex JGit operations.
*/ */
@@ -35,6 +38,10 @@ object JGitUtil {
private val logger = LoggerFactory.getLogger(JGitUtil.getClass) private val logger = LoggerFactory.getLogger(JGitUtil.getClass)
implicit val objectDatabaseReleasable = new Releasable[ObjectDatabase] {
override def release(resource: ObjectDatabase): Unit = resource.close()
}
/** /**
* The repository data. * The repository data.
* *
@@ -317,7 +324,7 @@ object JGitUtil {
* Returns the repository information. It contains branch names and tag names. * Returns the repository information. It contains branch names and tag names.
*/ */
def getRepositoryInfo(owner: String, repository: String): RepositoryInfo = { def getRepositoryInfo(owner: String, repository: String): RepositoryInfo = {
using(Git.open(getRepositoryDir(owner, repository))) { git => Using.resource(Git.open(getRepositoryDir(owner, repository))) { git =>
try { try {
RepositoryInfo( RepositoryInfo(
owner, owner,
@@ -364,7 +371,7 @@ object JGitUtil {
* @return HTML of the file list * @return HTML of the file list
*/ */
def getFileList(git: Git, revision: String, path: String = ".", baseUrl: Option[String] = None): List[FileInfo] = { 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) val objectId = git.getRepository.resolve(revision)
if (objectId == null) return Nil if (objectId == null) return Nil
val revCommit = revWalk.parseCommit(objectId) val revCommit = revWalk.parseCommit(objectId)
@@ -373,12 +380,12 @@ object JGitUtil {
if (path == ".") { if (path == ".") {
val treeWalk = new TreeWalk(git.getRepository) val treeWalk = new TreeWalk(git.getRepository)
treeWalk.addTree(rev.getTree) treeWalk.addTree(rev.getTree)
using(treeWalk)(f) Using.resource(treeWalk)(f)
} else { } else {
val treeWalk = TreeWalk.forPath(git.getRepository, path, rev.getTree) val treeWalk = TreeWalk.forPath(git.getRepository, path, rev.getTree)
if (treeWalk != null) { if (treeWalk != null) {
treeWalk.enterSubtree treeWalk.enterSubtree
using(treeWalk)(f) Using.resource(treeWalk)(f)
} }
} }
@tailrec @tailrec
@@ -386,7 +393,7 @@ object JGitUtil {
tuple: (ObjectId, FileMode, String, String, Option[String], RevCommit) tuple: (ObjectId, FileMode, String, String, Option[String], RevCommit)
): (ObjectId, FileMode, String, String, Option[String], RevCommit) = tuple match { ): (ObjectId, FileMode, String, String, Option[String], RevCommit) = tuple match {
case (oid, FileMode.TREE, name, path, _, commit) => case (oid, FileMode.TREE, name, path, _, commit) =>
(using(new TreeWalk(git.getRepository)) { walk => (Using.resource(new TreeWalk(git.getRepository)) { walk =>
walk.addTree(oid) walk.addTree(oid)
// single tree child, or None // single tree child, or None
if (walk.next() && walk.getFileMode(0) == FileMode.TREE) { if (walk.next() && walk.getFileMode(0) == FileMode.TREE) {
@@ -520,7 +527,7 @@ object JGitUtil {
* get all file list by revision. only file. * get all file list by revision. only file.
*/ */
def getTreeId(git: Git, revision: String): Option[String] = { 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) val objectId = git.getRepository.resolve(revision)
if (objectId == null) return None if (objectId == null) return None
val revCommit = revWalk.parseCommit(objectId) val revCommit = revWalk.parseCommit(objectId)
@@ -532,10 +539,10 @@ object JGitUtil {
* get all file list by tree object id. * get all file list by tree object id.
*/ */
def getAllFileListByTreeId(git: Git, treeId: String): List[String] = { 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}") val objectId = git.getRepository.resolve(treeId + "^{tree}")
if (objectId == null) return Nil if (objectId == null) return Nil
using(new TreeWalk(git.getRepository)) { treeWalk => Using.resource(new TreeWalk(git.getRepository)) { treeWalk =>
treeWalk.addTree(objectId) treeWalk.addTree(objectId)
treeWalk.setRecursive(true) treeWalk.setRecursive(true)
var ret: List[String] = Nil var ret: List[String] = Nil
@@ -586,7 +593,7 @@ object JGitUtil {
case _ => (logs, i.hasNext) case _ => (logs, i.hasNext)
} }
using(new RevWalk(git.getRepository)) { revWalk => Using.resource(new RevWalk(git.getRepository)) { revWalk =>
defining(git.getRepository.resolve(revision)) { objectId => defining(git.getRepository.resolve(revision)) { objectId =>
if (objectId == null) { if (objectId == null) {
Left(s"${revision} can't be resolved.") Left(s"${revision} can't be resolved.")
@@ -618,7 +625,7 @@ object JGitUtil {
case false => logs case false => logs
} }
using(new RevWalk(git.getRepository)) { revWalk => Using.resource(new RevWalk(git.getRepository)) { revWalk =>
revWalk.markStart(revWalk.parseCommit(git.getRepository.resolve(begin))) revWalk.markStart(revWalk.parseCommit(git.getRepository.resolve(begin)))
getCommitLog(revWalk.iterator, Nil).reverse getCommitLog(revWalk.iterator, Nil).reverse
} }
@@ -678,7 +685,7 @@ object JGitUtil {
} }
private def getDiffEntries(git: Git, from: Option[String], to: String): Seq[DiffEntry] = { 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) val df = new DiffFormatter(DisabledOutputStream.INSTANCE)
df.setRepository(git.getRepository) df.setRepository(git.getRepository)
@@ -704,7 +711,7 @@ object JGitUtil {
} }
def getParentCommitId(git: Git, id: String): Option[String] = { 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)) val commit = revWalk.parseCommit(git.getRepository.resolve(id))
commit.getParentCount match { commit.getParentCount match {
case 0 => None case 0 => None
@@ -786,7 +793,7 @@ object JGitUtil {
private def makePatchFromDiffEntry(git: Git, diff: DiffEntry): String = { private def makePatchFromDiffEntry(git: Git, diff: DiffEntry): String = {
val out = new ByteArrayOutputStream() val out = new ByteArrayOutputStream()
using(new DiffFormatter(out)) { formatter => Using.resource(new DiffFormatter(out)) { formatter =>
formatter.setRepository(git.getRepository) formatter.setRepository(git.getRepository)
formatter.format(diff) formatter.format(diff)
val patch = new String(out.toByteArray) // TODO charset??? val patch = new String(out.toByteArray) // TODO charset???
@@ -798,7 +805,7 @@ object JGitUtil {
* Returns the list of branch names of the specified commit. * Returns the list of branch names of the specified commit.
*/ */
def getBranchesOfCommit(git: Git, commitId: String): List[String] = 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 => defining(revWalk.parseCommit(git.getRepository.resolve(commitId + "^0"))) { commit =>
git.getRepository.getRefDatabase git.getRepository.getRefDatabase
.getRefsByPrefix(Constants.R_HEADS) .getRefsByPrefix(Constants.R_HEADS)
@@ -841,7 +848,7 @@ object JGitUtil {
* Returns the list of tags which contains the specified commit. * Returns the list of tags which contains the specified commit.
*/ */
def getTagsOfCommit(git: Git, commitId: String): List[String] = 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 => defining(revWalk.parseCommit(git.getRepository.resolve(commitId + "^0"))) { commit =>
git.getRepository.getRefDatabase git.getRepository.getRefDatabase
.getRefsByPrefix(Constants.R_TAGS) .getRefsByPrefix(Constants.R_TAGS)
@@ -862,13 +869,13 @@ object JGitUtil {
} }
def initRepository(dir: java.io.File): Unit = 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) repository.create(true)
setReceivePack(repository) setReceivePack(repository)
} }
def cloneRepository(from: java.io.File, to: java.io.File): Unit = 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) setReceivePack(git.getRepository)
} }
@@ -898,7 +905,7 @@ object JGitUtil {
def createTag(git: Git, name: String, message: Option[String], commitId: String) = { def createTag(git: Git, name: String, message: Option[String], commitId: String) = {
try { try {
val objectId: ObjectId = git.getRepository.resolve(commitId) 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)) val tagCommand = git.tag().setName(name).setObjectId(walk.parseCommit(objectId))
message.foreach { message => message.foreach { message =>
tagCommand.setMessage(message) tagCommand.setMessage(message)
@@ -1003,7 +1010,7 @@ object JGitUtil {
case false => None case false => None
} }
using(new TreeWalk(git.getRepository)) { treeWalk => Using.resource(new TreeWalk(git.getRepository)) { treeWalk =>
treeWalk.addTree(revTree) treeWalk.addTree(revTree)
treeWalk.setRecursive(true) treeWalk.setRecursive(true)
getPathObjectId(path, treeWalk) getPathObjectId(path, treeWalk)
@@ -1048,7 +1055,7 @@ object JGitUtil {
def getContentInfo(git: Git, path: String, objectId: ObjectId): ContentInfo = { def getContentInfo(git: Git, path: String, objectId: ObjectId): ContentInfo = {
// Viewer // Viewer
using(git.getRepository.getObjectDatabase) { db => Using.resource(git.getRepository.getObjectDatabase) { db =>
val loader = db.open(objectId) val loader = db.open(objectId)
val isLfs = isLfsPointer(loader) val isLfs = isLfsPointer(loader)
val large = FileUtil.isLarge(loader.getSize) val large = FileUtil.isLarge(loader.getSize)
@@ -1086,7 +1093,7 @@ object JGitUtil {
*/ */
def getContentFromId(git: Git, id: ObjectId, fetchLargeFile: Boolean): Option[Array[Byte]] = def getContentFromId(git: Git, id: ObjectId, fetchLargeFile: Boolean): Option[Array[Byte]] =
try { try {
using(git.getRepository.getObjectDatabase) { db => Using.resource(git.getRepository.getObjectDatabase) { db =>
val loader = db.open(id) val loader = db.open(id)
if (loader.isLarge || (fetchLargeFile == false && FileUtil.isLarge(loader.getSize))) { if (loader.isLarge || (fetchLargeFile == false && FileUtil.isLarge(loader.getSize))) {
None None
@@ -1108,7 +1115,7 @@ object JGitUtil {
*/ */
def getObjectLoaderFromId[A](git: Git, id: ObjectId)(f: ObjectLoader => A): Option[A] = def getObjectLoaderFromId[A](git: Git, id: ObjectId)(f: ObjectLoader => A): Option[A] =
try { try {
using(git.getRepository.getObjectDatabase) { db => Using.resource(git.getRepository.getObjectDatabase) { db =>
Some(f(db.open(id))) Some(f(db.open(id)))
} }
} catch { } catch {
@@ -1131,8 +1138,8 @@ object JGitUtil {
} }
def processTree[T](git: Git, id: ObjectId)(f: (String, CanonicalTreeParser) => T): Seq[T] = { def processTree[T](git: Git, id: ObjectId)(f: (String, CanonicalTreeParser) => T): Seq[T] = {
using(new RevWalk(git.getRepository)) { revWalk => Using.resource(new RevWalk(git.getRepository)) { revWalk =>
using(new TreeWalk(git.getRepository)) { treeWalk => Using.resource(new TreeWalk(git.getRepository)) { treeWalk =>
val index = treeWalk.addTree(revWalk.parseTree(id)) val index = treeWalk.addTree(revWalk.parseTree(id))
treeWalk.setRecursive(true) treeWalk.setRecursive(true)
val result = new collection.mutable.ListBuffer[T]() val result = new collection.mutable.ListBuffer[T]()
@@ -1176,7 +1183,7 @@ object JGitUtil {
requestRepositoryName: String, requestRepositoryName: String,
requestBranch: String requestBranch: String
): (String, String) = ): (String, String) =
using( Using.resources(
Git.open(Directory.getRepositoryDir(userName, repositoryName)), Git.open(Directory.getRepositoryDir(userName, repositoryName)),
Git.open(Directory.getRepositoryDir(requestUserName, requestRepositoryName)) Git.open(Directory.getRepositoryDir(requestUserName, requestRepositoryName))
) { (oldGit, newGit) => ) { (oldGit, newGit) =>
@@ -1293,7 +1300,7 @@ object JGitUtil {
* @return sha1 * @return sha1
*/ */
def getShaByRef(owner: String, name: String, revstr: String): Option[String] = { 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(_)) Option(git.getRepository.resolve(revstr)).map(ObjectId.toString(_))
} }
} }
@@ -1308,14 +1315,14 @@ object JGitUtil {
if (lfsAttrs.nonEmpty) { if (lfsAttrs.nonEmpty) {
val oid = lfsAttrs("oid").split(":")(1) 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) f(in)
} }
} else { } else {
throw new NoSuchElementException("LFS attribute is empty.") throw new NoSuchElementException("LFS attribute is empty.")
} }
} else { } else {
using(loader.openStream()) { in => Using.resource(loader.openStream()) { in =>
f(in) f(in)
} }
} }
@@ -1324,7 +1331,7 @@ object JGitUtil {
def openFile[T](git: Git, repository: RepositoryService.RepositoryInfo, tree: RevTree, path: String)( def openFile[T](git: Git, repository: RepositoryService.RepositoryInfo, tree: RevTree, path: String)(
f: InputStream => T f: InputStream => T
): T = { ): T = {
using(TreeWalk.forPath(git.getRepository, path, tree)) { treeWalk => Using.resource(TreeWalk.forPath(git.getRepository, path, tree)) { treeWalk =>
openFile(git, repository, treeWalk)(f) 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) 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 = def using[A <: { def close(): Unit }, B](resource: A)(f: A => B): B =
try f(resource) try f(resource)
finally { 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 = def using[A <: { def close(): Unit }, B <: { def close(): Unit }, C](resource1: A, resource2: B)(f: (A, B) => C): C =
try f(resource1, resource2) try f(resource1, resource2)
finally { 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 = def using[T](git: Git)(f: Git => T): T =
try f(git) try f(git)
finally git.getRepository.close() 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 = def using[T](git1: Git, git2: Git)(f: (Git, Git) => T): T =
try f(git1, git2) try f(git1, git2)
finally { finally {

View File

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

View File

@@ -2,7 +2,6 @@ package gitbucket.core.service
import gitbucket.core.GitBucketCoreModule import gitbucket.core.GitBucketCoreModule
import gitbucket.core.util.{DatabaseConfig, Directory, FileUtil, JGitUtil} import gitbucket.core.util.{DatabaseConfig, Directory, FileUtil, JGitUtil}
import gitbucket.core.util.SyntaxSugars._
import io.github.gitbucket.solidbase.Solidbase import io.github.gitbucket.solidbase.Solidbase
import liquibase.database.core.H2Database import liquibase.database.core.H2Database
import liquibase.database.jvm.JdbcConnection import liquibase.database.jvm.JdbcConnection
@@ -19,6 +18,7 @@ import org.scalatestplus.mockito.MockitoSugar
import org.mockito.Mockito._ import org.mockito.Mockito._
import scala.util.Random import scala.util.Random
import scala.util.Using
trait ServiceSpecBase extends MockitoSugar { trait ServiceSpecBase extends MockitoSugar {
@@ -58,7 +58,7 @@ trait ServiceSpecBase extends MockitoSugar {
FileUtil.withTmpDir(new File(FileUtils.getTempDirectory(), Random.alphanumeric.take(10).mkString)) { dir => 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) val (url, user, pass) = (DatabaseConfig.url(Some(dir.toString)), DatabaseConfig.user, DatabaseConfig.password)
org.h2.Driver.load() org.h2.Driver.load()
using(DriverManager.getConnection(url, user, pass)) { conn => Using.resource(DriverManager.getConnection(url, user, pass)) { conn =>
val solidbase = new Solidbase() val solidbase = new Solidbase()
val db = new H2Database() val db = new H2Database()
db.setConnection(new JdbcConnection(conn)) // TODO Remove setConnection in the future db.setConnection(new JdbcConnection(conn)) // TODO Remove setConnection in the future

View File

@@ -1,7 +1,5 @@
package gitbucket.core.util package gitbucket.core.util
import gitbucket.core.util.SyntaxSugars._
import org.apache.commons.io.FileUtils import org.apache.commons.io.FileUtils
import org.eclipse.jgit.api.Git import org.eclipse.jgit.api.Git
import org.eclipse.jgit.dircache.DirCache import org.eclipse.jgit.dircache.DirCache
@@ -13,6 +11,7 @@ import org.eclipse.jgit.errors._
import java.nio.file._ import java.nio.file._
import java.io.File import java.io.File
import scala.util.Using
object GitSpecUtil { 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 = { def createTestRepository(dir: File): File = {
RepositoryCache.clear() RepositoryCache.clear()
@@ -81,7 +81,7 @@ object GitSpecUtil {
def getFile(git: Git, branch: String, path: String) = { def getFile(git: Git, branch: String, path: String) = {
val revCommit = JGitUtil.getRevCommitFromId(git, git.getRepository.resolve(branch)) 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.addTree(revCommit.getTree)
walk.setRecursive(true) walk.setRecursive(true)
@scala.annotation.tailrec @scala.annotation.tailrec
@@ -108,7 +108,7 @@ object GitSpecUtil {
if (conflicted) { if (conflicted) {
throw new RuntimeException("conflict!") 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 val committer = mergeTipCommit.getCommitterIdent
// creates merge commit // creates merge commit
val mergeCommit = new CommitBuilder() val mergeCommit = new CommitBuilder()