mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-02 19:45:57 +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(
|
||||
url = ApiPath(s"/api/v3/repos/${repositoryName.fullName}/commits/${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
|
||||
commit = Commit(
|
||||
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 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.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.util.Date
|
||||
import java.time.ZoneOffset
|
||||
|
||||
trait ApiRepositoryCommitControllerBase extends ControllerBase {
|
||||
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 =>
|
||||
val owner = repository.owner
|
||||
val name = repository.name
|
||||
// TODO: The following parameters need to be implemented. [:path, :author, :since, :until]
|
||||
val sha = params.getOrElse("sha", "refs/heads/master")
|
||||
val sha = params.get("sha").filter(_.nonEmpty).getOrElse("HEAD")
|
||||
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))) {
|
||||
git =>
|
||||
val repo = git.getRepository
|
||||
@@ -31,7 +50,37 @@ trait ApiRepositoryCommitControllerBase extends ControllerBase {
|
||||
revWalk =>
|
||||
val objectId = repo.resolve(sha)
|
||||
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 =>
|
||||
val commitInfo = new CommitInfo(commit)
|
||||
ApiCommits(
|
||||
|
||||
@@ -680,7 +680,7 @@ object ApiSpecModels {
|
||||
val jsonCommits = s"""{
|
||||
|"url":"http://gitbucket.exmple.com/api/v3/repos/octocat/Hello-World/commits/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",
|
||||
|"commit":{
|
||||
|"url":"http://gitbucket.exmple.com/api/v3/repos/octocat/Hello-World/commits/6dcb09b5b57875f334f61aebed695e2e4193db5e",
|
||||
|
||||
Reference in New Issue
Block a user