mirror of
				https://github.com/gitbucket/gitbucket.git
				synced 2025-11-03 12:05:59 +01:00 
			
		
		
		
	Implement missing parameters on commits api (#3061)
* Add missing leading slash html_url api path * Use HEAD as default ref * Implement missing parameters Co-authored-by: Petri Pyy <petri.pyy@abako.fi>
This commit is contained in:
		@@ -97,7 +97,7 @@ object ApiCommits {
 | 
				
			|||||||
    ApiCommits(
 | 
					    ApiCommits(
 | 
				
			||||||
      url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${commitInfo.id}"),
 | 
					      url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${commitInfo.id}"),
 | 
				
			||||||
      sha = commitInfo.id,
 | 
					      sha = commitInfo.id,
 | 
				
			||||||
      html_url = ApiPath(s"${repositoryName.fullName}/commit/${commitInfo.id}"),
 | 
					      html_url = ApiPath(s"/${repositoryName.fullName}/commit/${commitInfo.id}"),
 | 
				
			||||||
      comment_url = ApiPath(""), // TODO no API for commit comment
 | 
					      comment_url = ApiPath(""), // TODO no API for commit comment
 | 
				
			||||||
      commit = Commit(
 | 
					      commit = Commit(
 | 
				
			||||||
        url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${commitInfo.id}"),
 | 
					        url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${commitInfo.id}"),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,9 +9,23 @@ import gitbucket.core.util.JGitUtil.{CommitInfo, getBranches, getBranchesOfCommi
 | 
				
			|||||||
import gitbucket.core.util.{JGitUtil, ReferrerAuthenticator, RepositoryName}
 | 
					import gitbucket.core.util.{JGitUtil, ReferrerAuthenticator, RepositoryName}
 | 
				
			||||||
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 org.eclipse.jgit.revwalk.filter.{
 | 
				
			||||||
 | 
					  AndRevFilter,
 | 
				
			||||||
 | 
					  AuthorRevFilter,
 | 
				
			||||||
 | 
					  CommitTimeRevFilter,
 | 
				
			||||||
 | 
					  MaxCountRevFilter,
 | 
				
			||||||
 | 
					  RevFilter,
 | 
				
			||||||
 | 
					  SkipRevFilter
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					import org.eclipse.jgit.treewalk.filter.{AndTreeFilter, PathFilterGroup, TreeFilter}
 | 
				
			||||||
 | 
					import scala.collection.mutable.ListBuffer
 | 
				
			||||||
import scala.jdk.CollectionConverters._
 | 
					import scala.jdk.CollectionConverters._
 | 
				
			||||||
import scala.util.Using
 | 
					import scala.util.Using
 | 
				
			||||||
 | 
					import math.min
 | 
				
			||||||
 | 
					import java.time.LocalDateTime
 | 
				
			||||||
 | 
					import java.time.format.DateTimeFormatter._
 | 
				
			||||||
 | 
					import java.util.Date
 | 
				
			||||||
 | 
					import java.time.ZoneOffset
 | 
				
			||||||
 | 
					
 | 
				
			||||||
trait ApiRepositoryCommitControllerBase extends ControllerBase {
 | 
					trait ApiRepositoryCommitControllerBase extends ControllerBase {
 | 
				
			||||||
  self: AccountService with CommitsService with ProtectedBranchService with ReferrerAuthenticator =>
 | 
					  self: AccountService with CommitsService with ProtectedBranchService with ReferrerAuthenticator =>
 | 
				
			||||||
@@ -22,8 +36,13 @@ trait ApiRepositoryCommitControllerBase extends ControllerBase {
 | 
				
			|||||||
  get("/api/v3/repos/:owner/:repository/commits")(referrersOnly { repository =>
 | 
					  get("/api/v3/repos/:owner/:repository/commits")(referrersOnly { repository =>
 | 
				
			||||||
    val owner = repository.owner
 | 
					    val owner = repository.owner
 | 
				
			||||||
    val name = repository.name
 | 
					    val name = repository.name
 | 
				
			||||||
    // TODO: The following parameters need to be implemented. [:path, :author, :since, :until]
 | 
					    val sha = params.get("sha").filter(_.nonEmpty).getOrElse("HEAD")
 | 
				
			||||||
    val sha = params.getOrElse("sha", "refs/heads/master")
 | 
					    val page = params.get("page").filter(_.nonEmpty).getOrElse("1").toInt
 | 
				
			||||||
 | 
					    val per_page = min(params.get("per_page").filter(_.nonEmpty).getOrElse("30").toInt, 100)
 | 
				
			||||||
 | 
					    val author = params.get("author").filter(_.nonEmpty)
 | 
				
			||||||
 | 
					    val path = params.get("path").filter(_.nonEmpty)
 | 
				
			||||||
 | 
					    val since = params.get("since").filter(_.nonEmpty)
 | 
				
			||||||
 | 
					    val until = params.get("until").filter(_.nonEmpty)
 | 
				
			||||||
    Using.resource(Git.open(getRepositoryDir(owner, name))) {
 | 
					    Using.resource(Git.open(getRepositoryDir(owner, name))) {
 | 
				
			||||||
      git =>
 | 
					      git =>
 | 
				
			||||||
        val repo = git.getRepository
 | 
					        val repo = git.getRepository
 | 
				
			||||||
@@ -31,7 +50,37 @@ trait ApiRepositoryCommitControllerBase extends ControllerBase {
 | 
				
			|||||||
          revWalk =>
 | 
					          revWalk =>
 | 
				
			||||||
            val objectId = repo.resolve(sha)
 | 
					            val objectId = repo.resolve(sha)
 | 
				
			||||||
            revWalk.markStart(revWalk.parseCommit(objectId))
 | 
					            revWalk.markStart(revWalk.parseCommit(objectId))
 | 
				
			||||||
            JsonFormat(revWalk.asScala.take(30).map {
 | 
					            if (path.nonEmpty) {
 | 
				
			||||||
 | 
					              revWalk.setTreeFilter(
 | 
				
			||||||
 | 
					                AndTreeFilter.create(PathFilterGroup.createFromStrings(path.get), TreeFilter.ANY_DIFF)
 | 
				
			||||||
 | 
					              )
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            val revfilters = new ListBuffer[(RevFilter)]()
 | 
				
			||||||
 | 
					            if (author.nonEmpty) {
 | 
				
			||||||
 | 
					              revfilters += AuthorRevFilter.create(author.get)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (since.nonEmpty) {
 | 
				
			||||||
 | 
					              revfilters += CommitTimeRevFilter.after(
 | 
				
			||||||
 | 
					                Date.from(LocalDateTime.parse(since.get, ISO_DATE_TIME).toInstant(ZoneOffset.UTC))
 | 
				
			||||||
 | 
					              )
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (until.nonEmpty) {
 | 
				
			||||||
 | 
					              revfilters += CommitTimeRevFilter.before(
 | 
				
			||||||
 | 
					                Date.from(LocalDateTime.parse(until.get, ISO_DATE_TIME).toInstant(ZoneOffset.UTC))
 | 
				
			||||||
 | 
					              )
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if (page > 1) {
 | 
				
			||||||
 | 
					              revfilters += SkipRevFilter.create(page * per_page - 2)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            revfilters += MaxCountRevFilter.create(per_page);
 | 
				
			||||||
 | 
					            revWalk.setRevFilter(
 | 
				
			||||||
 | 
					              if (revfilters.size > 1) {
 | 
				
			||||||
 | 
					                AndRevFilter.create(revfilters.toArray)
 | 
				
			||||||
 | 
					              } else {
 | 
				
			||||||
 | 
					                revfilters(0)
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					            JsonFormat(revWalk.asScala.map {
 | 
				
			||||||
              commit =>
 | 
					              commit =>
 | 
				
			||||||
                val commitInfo = new CommitInfo(commit)
 | 
					                val commitInfo = new CommitInfo(commit)
 | 
				
			||||||
                ApiCommits(
 | 
					                ApiCommits(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -680,7 +680,7 @@ object ApiSpecModels {
 | 
				
			|||||||
  val jsonCommits = s"""{
 | 
					  val jsonCommits = s"""{
 | 
				
			||||||
       |"url":"http://gitbucket.exmple.com/api/v3/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e",
 | 
					       |"url":"http://gitbucket.exmple.com/api/v3/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e",
 | 
				
			||||||
       |"sha":"6dcb09b5b57875f334f61aebed695e2e4193db5e",
 | 
					       |"sha":"6dcb09b5b57875f334f61aebed695e2e4193db5e",
 | 
				
			||||||
       |"html_url":"http://gitbucket.exmple.comoctocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e",
 | 
					       |"html_url":"http://gitbucket.exmple.com/octocat/Hello-World/commit/6dcb09b5b57875f334f61aebed695e2e4193db5e",
 | 
				
			||||||
       |"comment_url":"http://gitbucket.exmple.com",
 | 
					       |"comment_url":"http://gitbucket.exmple.com",
 | 
				
			||||||
       |"commit":{
 | 
					       |"commit":{
 | 
				
			||||||
         |"url":"http://gitbucket.exmple.com/api/v3/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e",
 | 
					         |"url":"http://gitbucket.exmple.com/api/v3/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e",
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user