mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 14:05:52 +01:00
Deprecate using
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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(
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 =>
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 =>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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))
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -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}"
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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"))
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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}")
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user