mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-03 20:15: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