diff --git a/src/main/scala/gitbucket/core/controller/api/ApiRepositoryBranchControllerBase.scala b/src/main/scala/gitbucket/core/controller/api/ApiRepositoryBranchControllerBase.scala index ac26f3b..6ec5635 100644 --- a/src/main/scala/gitbucket/core/controller/api/ApiRepositoryBranchControllerBase.scala +++ b/src/main/scala/gitbucket/core/controller/api/ApiRepositoryBranchControllerBase.scala @@ -1,11 +1,11 @@ package gitbucket.core.controller.api -import gitbucket.core.api._ +import gitbucket.core.api.* import gitbucket.core.controller.ControllerBase import gitbucket.core.service.{AccountService, ProtectedBranchService, RepositoryService} -import gitbucket.core.util._ -import gitbucket.core.util.Directory._ -import gitbucket.core.util.Implicits._ -import gitbucket.core.util.JGitUtil.getBranches +import gitbucket.core.util.* +import gitbucket.core.util.Directory.* +import gitbucket.core.util.Implicits.* +import gitbucket.core.util.JGitUtil.getBranchesNoMergeInfo import org.eclipse.jgit.api.Git import org.scalatra.NoContent @@ -30,10 +30,9 @@ Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git => JsonFormat( JGitUtil - .getBranches( + .getBranchesNoMergeInfo( git = git, - defaultBranch = repository.repository.defaultBranch, - origin = repository.repository.originUserName.isEmpty + defaultBranch = repository.repository.defaultBranch ) .map { br => ApiBranchForList(br.name, ApiBranchCommit(br.commitId)) @@ -50,10 +49,9 @@ Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git => (for { branch <- params.get("splat") if repository.branchList.contains(branch) - br <- getBranches( + br <- getBranchesNoMergeInfo( git, - repository.repository.defaultBranch, - repository.repository.originUserName.isEmpty + repository.repository.defaultBranch ).find(_.name == branch) } yield { val protection = getProtectedBranchInfo(repository.owner, repository.name, branch) @@ -273,15 +271,14 @@ * https://developer.github.com/v3/repos/#enabling-and-disabling-branch-protection */ patch("/api/v3/repos/:owner/:repository/branches/*")(ownerOnly { repository => - import gitbucket.core.api._ + import gitbucket.core.api.* Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git => (for { branch <- params.get("splat") if repository.branchList.contains(branch) protection <- extractFromJsonBody[ApiBranchProtection.EnablingAndDisabling].map(_.protection) - br <- getBranches( + br <- getBranchesNoMergeInfo( git, - repository.repository.defaultBranch, - repository.repository.originUserName.isEmpty + repository.repository.defaultBranch ).find(_.name == branch) } yield { if (protection.enabled) { diff --git a/src/main/scala/gitbucket/core/controller/api/ApiRepositoryCommitControllerBase.scala b/src/main/scala/gitbucket/core/controller/api/ApiRepositoryCommitControllerBase.scala index 0022c19..c4c5322 100644 --- a/src/main/scala/gitbucket/core/controller/api/ApiRepositoryCommitControllerBase.scala +++ b/src/main/scala/gitbucket/core/controller/api/ApiRepositoryCommitControllerBase.scala @@ -4,28 +4,21 @@ import gitbucket.core.model.Account import gitbucket.core.service.{AccountService, CommitsService, ProtectedBranchService} import gitbucket.core.util.Directory.getRepositoryDir -import gitbucket.core.util.Implicits._ -import gitbucket.core.util.JGitUtil.{CommitInfo, getBranches, getBranchesOfCommit} +import gitbucket.core.util.Implicits.* +import gitbucket.core.util.JGitUtil.{CommitInfo, getBranchesNoMergeInfo, getBranchesOfCommit} import gitbucket.core.util.{JGitUtil, ReferrerAuthenticator, RepositoryName} import org.eclipse.jgit.api.Git import org.eclipse.jgit.revwalk.RevWalk -import org.eclipse.jgit.revwalk.filter.{ - AndRevFilter, - AuthorRevFilter, - CommitTimeRevFilter, - MaxCountRevFilter, - RevFilter, - SkipRevFilter -} +import org.eclipse.jgit.revwalk.filter.* import org.eclipse.jgit.treewalk.filter.{AndTreeFilter, PathFilterGroup, TreeFilter} -import scala.collection.mutable.ListBuffer -import scala.jdk.CollectionConverters._ -import scala.util.Using -import math.min -import java.time.LocalDateTime -import java.time.format.DateTimeFormatter._ + +import java.time.format.DateTimeFormatter.* +import java.time.{LocalDateTime, ZoneOffset} import java.util.Date -import java.time.ZoneOffset +import scala.collection.mutable.ListBuffer +import scala.jdk.CollectionConverters.* +import scala.math.min +import scala.util.Using trait ApiRepositoryCommitControllerBase extends ControllerBase { self: AccountService with CommitsService with ProtectedBranchService with ReferrerAuthenticator => @@ -166,7 +159,7 @@ Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git => val apiBranchForCommits = for { branch <- getBranchesOfCommit(git, sha) - br <- getBranches(git, branch, repository.repository.originUserName.isEmpty).find(_.name == branch) + br <- getBranchesNoMergeInfo(git, branch).find(_.name == branch) } yield { val protection = getProtectedBranchInfo(repository.owner, repository.name, branch) ApiBranchForHeadCommit(branch, ApiBranchCommit(br.commitId), protection.enabled) diff --git a/src/main/scala/gitbucket/core/service/PullRequestService.scala b/src/main/scala/gitbucket/core/service/PullRequestService.scala index 7cf6f13..0910e3a 100644 --- a/src/main/scala/gitbucket/core/service/PullRequestService.scala +++ b/src/main/scala/gitbucket/core/service/PullRequestService.scala @@ -2,26 +2,26 @@ import com.github.difflib.DiffUtils import com.github.difflib.patch.DeltaType -import gitbucket.core.model.{CommitComments => _, Session => _, _} -import gitbucket.core.model.Profile._ -import gitbucket.core.model.Profile.profile.blockingApi._ -import gitbucket.core.service.RepositoryService.RepositoryInfo import gitbucket.core.api.JsonFormat import gitbucket.core.controller.Context +import gitbucket.core.model.Profile.* +import gitbucket.core.model.Profile.profile.blockingApi.* import gitbucket.core.model.activity.OpenPullRequestInfo +import gitbucket.core.model.{CommitComments as _, Session as _, *} import gitbucket.core.plugin.PluginRegistry +import gitbucket.core.service.RepositoryService.RepositoryInfo import gitbucket.core.service.SystemSettingsService.SystemSettings -import gitbucket.core.util.Directory._ -import gitbucket.core.util.Implicits._ +import gitbucket.core.util.Directory.* +import gitbucket.core.util.Implicits.* import gitbucket.core.util.JGitUtil -import gitbucket.core.util.StringUtil._ -import gitbucket.core.util.JGitUtil.{CommitInfo, DiffInfo, getBranches} +import gitbucket.core.util.JGitUtil.{CommitInfo, DiffInfo, getBranchesNoMergeInfo} +import gitbucket.core.util.StringUtil.* import gitbucket.core.view import gitbucket.core.view.helpers import org.eclipse.jgit.api.Git import org.eclipse.jgit.lib.ObjectId -import scala.jdk.CollectionConverters._ +import scala.jdk.CollectionConverters.* import scala.util.Using trait PullRequestService { @@ -32,7 +32,7 @@ with RepositoryService with MergeService with ActivityService => - import PullRequestService._ + import PullRequestService.* def getPullRequest(owner: String, repository: String, issueId: Int)(implicit s: Session @@ -318,7 +318,7 @@ base.foreach { _base => if (pr.branch != _base) { Using.resource(Git.open(getRepositoryDir(repository.owner, repository.name))) { git => - getBranches(git, repository.repository.defaultBranch, origin = true) + getBranchesNoMergeInfo(git, repository.repository.defaultBranch) .find(_.name == _base) .foreach(br => updateBaseBranch(repository.owner, repository.name, issueId, br.name, br.commitId)) } diff --git a/src/main/scala/gitbucket/core/servlet/GitAuthenticationFilter.scala b/src/main/scala/gitbucket/core/servlet/GitAuthenticationFilter.scala index 5cbe686..4f6574d 100644 --- a/src/main/scala/gitbucket/core/servlet/GitAuthenticationFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/GitAuthenticationFilter.scala @@ -23,9 +23,9 @@ private val logger = LoggerFactory.getLogger(classOf[GitAuthenticationFilter]) - def init(config: FilterConfig) = {} + override def init(config: FilterConfig) = {} - def destroy(): Unit = {} + override def destroy(): Unit = {} def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain): Unit = { val request = req.asInstanceOf[HttpServletRequest] diff --git a/src/main/scala/gitbucket/core/servlet/SessionCleanupListener.scala b/src/main/scala/gitbucket/core/servlet/SessionCleanupListener.scala index 97ab13b..5bf38d8 100644 --- a/src/main/scala/gitbucket/core/servlet/SessionCleanupListener.scala +++ b/src/main/scala/gitbucket/core/servlet/SessionCleanupListener.scala @@ -1,17 +1,18 @@ package gitbucket.core.servlet -import javax.servlet.http.{HttpSessionEvent, HttpSessionListener} -import gitbucket.core.util.Directory +import gitbucket.core.util.Directory.* import org.apache.commons.io.FileUtils -import Directory._ + +import javax.servlet.http.{HttpSessionEvent, HttpSessionListener} /** * Removes session associated temporary files when session is destroyed. */ class SessionCleanupListener extends HttpSessionListener { - def sessionCreated(se: HttpSessionEvent): Unit = {} + override def sessionCreated(se: HttpSessionEvent): Unit = {} - def sessionDestroyed(se: HttpSessionEvent): Unit = FileUtils.deleteDirectory(getTemporaryDir(se.getSession.getId)) + override def sessionDestroyed(se: HttpSessionEvent): Unit = + FileUtils.deleteDirectory(getTemporaryDir(se.getSession.getId)) } diff --git a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala index 8c4f335..b640485 100644 --- a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala @@ -17,9 +17,9 @@ private val logger = LoggerFactory.getLogger(classOf[TransactionFilter]) - def init(config: FilterConfig) = {} + override def init(config: FilterConfig): Unit = {} - def destroy(): Unit = {} + override def destroy(): Unit = {} def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain): Unit = { val servletPath = req.asInstanceOf[HttpServletRequest].getServletPath() diff --git a/src/main/scala/gitbucket/core/util/JGitUtil.scala b/src/main/scala/gitbucket/core/util/JGitUtil.scala index 1f4e501..9affb3e 100644 --- a/src/main/scala/gitbucket/core/util/JGitUtil.scala +++ b/src/main/scala/gitbucket/core/util/JGitUtil.scala @@ -248,6 +248,14 @@ case class BranchMergeInfo(ahead: Int, behind: Int, isMerged: Boolean) + case class BranchInfoSimple( + name: String, + committerName: String, + commitTime: Date, + committerEmailAddress: String, + commitId: String + ) + case class BranchInfo( name: String, committerName: String, @@ -1244,6 +1252,25 @@ git.log.add(startCommit).addPath(path).setMaxCount(1).call.iterator.next } + def getBranchesNoMergeInfo(git: Git, defaultBranch: String): Seq[BranchInfoSimple] = { + val repo = git.getRepository + val defaultObject = repo.resolve(defaultBranch) + + git.branchList.call.asScala.map { ref => + val walk = new RevWalk(repo) + try { + val branchName = ref.getName.stripPrefix("refs/heads/") + val branchCommit = walk.parseCommit(ref.getObjectId) + val when = branchCommit.getCommitterIdent.getWhen + val committer = branchCommit.getCommitterIdent.getName + val committerEmail = branchCommit.getCommitterIdent.getEmailAddress + BranchInfoSimple(branchName, committer, when, committerEmail, ref.getObjectId.name) + } finally { + walk.dispose() + } + }.toSeq + } + def getBranches(git: Git, defaultBranch: String, origin: Boolean): Seq[BranchInfo] = { val repo = git.getRepository val defaultObject = repo.resolve(defaultBranch) diff --git a/src/test/scala/gitbucket/core/util/JGitUtilSpec.scala b/src/test/scala/gitbucket/core/util/JGitUtilSpec.scala index 33664b8..cfeb094 100644 --- a/src/test/scala/gitbucket/core/util/JGitUtilSpec.scala +++ b/src/test/scala/gitbucket/core/util/JGitUtilSpec.scala @@ -1,12 +1,13 @@ package gitbucket.core.util -import GitSpecUtil._ +import gitbucket.core.util.GitSpecUtil.* +import gitbucket.core.util.JGitUtil.BranchInfoSimple import org.apache.commons.io.IOUtils import org.eclipse.jgit.diff.DiffEntry.ChangeType import org.eclipse.jgit.lib.Constants import org.scalatest.funsuite.AnyFunSuite -import scala.jdk.CollectionConverters._ +import scala.jdk.CollectionConverters.* class JGitUtilSpec extends AnyFunSuite { @@ -173,6 +174,26 @@ } } + test("getBranchesNoMergeInfo") { + withTestRepository { git => + createFile(git, Constants.HEAD, "README.md", "body1", message = "commit1") + JGitUtil.createBranch(git, "main", "test1") + + createFile(git, Constants.HEAD, "README.md", "body2", message = "commit2") + JGitUtil.createBranch(git, "main", "test2") + + // getBranches + val branchesNMI = JGitUtil.getBranchesNoMergeInfo(git, "main") + val branches = JGitUtil.getBranches(git, "main", true) + + assert( + branches.map(bi => + BranchInfoSimple(bi.name, bi.committerName, bi.commitTime, bi.committerEmailAddress, bi.commitId) + ) == branchesNMI + ) + } + } + test("createTag, getTagsOfCommit and getTagsOnCommit") { withTestRepository { git => createFile(git, Constants.HEAD, "README.md", "body1", message = "commit1")