mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-11-23 19:11:58 +01:00
Filter get single commit (#24613)
Pretty much the same thing as #24568 but for getting a single commit instead of getting a list of commits
This commit is contained in:
parent
9a0652f0b2
commit
5930ab5fdf
3 changed files with 44 additions and 16 deletions
|
@ -42,6 +42,18 @@ func GetSingleCommit(ctx *context.APIContext) {
|
||||||
// description: a git ref or commit sha
|
// description: a git ref or commit sha
|
||||||
// type: string
|
// type: string
|
||||||
// required: true
|
// required: true
|
||||||
|
// - name: stat
|
||||||
|
// in: query
|
||||||
|
// description: include diff stats for every commit (disable for speedup, default 'true')
|
||||||
|
// type: boolean
|
||||||
|
// - name: verification
|
||||||
|
// in: query
|
||||||
|
// description: include verification for every commit (disable for speedup, default 'true')
|
||||||
|
// type: boolean
|
||||||
|
// - name: files
|
||||||
|
// in: query
|
||||||
|
// description: include a list of affected files for every commit (disable for speedup, default 'true')
|
||||||
|
// type: boolean
|
||||||
// responses:
|
// responses:
|
||||||
// "200":
|
// "200":
|
||||||
// "$ref": "#/responses/Commit"
|
// "$ref": "#/responses/Commit"
|
||||||
|
@ -55,10 +67,11 @@ func GetSingleCommit(ctx *context.APIContext) {
|
||||||
ctx.Error(http.StatusUnprocessableEntity, "no valid ref or sha", fmt.Sprintf("no valid ref or sha: %s", sha))
|
ctx.Error(http.StatusUnprocessableEntity, "no valid ref or sha", fmt.Sprintf("no valid ref or sha: %s", sha))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
getCommit(ctx, sha)
|
|
||||||
|
getCommit(ctx, sha, convert.ParseCommitOptions(ctx))
|
||||||
}
|
}
|
||||||
|
|
||||||
func getCommit(ctx *context.APIContext, identifier string) {
|
func getCommit(ctx *context.APIContext, identifier string, toCommitOpts convert.ToCommitOptions) {
|
||||||
commit, err := ctx.Repo.GitRepo.GetCommit(identifier)
|
commit, err := ctx.Repo.GitRepo.GetCommit(identifier)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if git.IsErrNotExist(err) {
|
if git.IsErrNotExist(err) {
|
||||||
|
@ -69,7 +82,7 @@ func getCommit(ctx *context.APIContext, identifier string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
json, err := convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, commit, nil, convert.ToCommitOptions{Stat: true})
|
json, err := convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, commit, nil, toCommitOpts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "toCommit", err)
|
ctx.Error(http.StatusInternalServerError, "toCommit", err)
|
||||||
return
|
return
|
||||||
|
@ -240,24 +253,12 @@ func GetAllCommits(ctx *context.APIContext) {
|
||||||
}
|
}
|
||||||
|
|
||||||
pageCount := int(math.Ceil(float64(commitsCountTotal) / float64(listOptions.PageSize)))
|
pageCount := int(math.Ceil(float64(commitsCountTotal) / float64(listOptions.PageSize)))
|
||||||
|
|
||||||
userCache := make(map[string]*user_model.User)
|
userCache := make(map[string]*user_model.User)
|
||||||
|
|
||||||
apiCommits := make([]*api.Commit, len(commits))
|
apiCommits := make([]*api.Commit, len(commits))
|
||||||
|
|
||||||
stat := ctx.FormString("stat") == "" || ctx.FormBool("stat")
|
|
||||||
verification := ctx.FormString("verification") == "" || ctx.FormBool("verification")
|
|
||||||
files := ctx.FormString("files") == "" || ctx.FormBool("files")
|
|
||||||
|
|
||||||
for i, commit := range commits {
|
for i, commit := range commits {
|
||||||
// Create json struct
|
// Create json struct
|
||||||
apiCommits[i], err = convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, commit, userCache,
|
apiCommits[i], err = convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, commit, userCache, convert.ParseCommitOptions(ctx))
|
||||||
convert.ToCommitOptions{
|
|
||||||
Stat: stat,
|
|
||||||
Verification: verification,
|
|
||||||
Files: files,
|
|
||||||
})
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.Error(http.StatusInternalServerError, "toCommit", err)
|
ctx.Error(http.StatusInternalServerError, "toCommit", err)
|
||||||
return
|
return
|
||||||
|
|
|
@ -10,6 +10,7 @@ import (
|
||||||
|
|
||||||
repo_model "code.gitea.io/gitea/models/repo"
|
repo_model "code.gitea.io/gitea/models/repo"
|
||||||
user_model "code.gitea.io/gitea/models/user"
|
user_model "code.gitea.io/gitea/models/user"
|
||||||
|
ctx "code.gitea.io/gitea/modules/context"
|
||||||
"code.gitea.io/gitea/modules/git"
|
"code.gitea.io/gitea/modules/git"
|
||||||
"code.gitea.io/gitea/modules/log"
|
"code.gitea.io/gitea/modules/log"
|
||||||
api "code.gitea.io/gitea/modules/structs"
|
api "code.gitea.io/gitea/modules/structs"
|
||||||
|
@ -78,6 +79,14 @@ type ToCommitOptions struct {
|
||||||
Files bool
|
Files bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ParseCommitOptions(ctx *ctx.APIContext) ToCommitOptions {
|
||||||
|
return ToCommitOptions{
|
||||||
|
Stat: ctx.FormString("stat") == "" || ctx.FormBool("stat"),
|
||||||
|
Files: ctx.FormString("files") == "" || ctx.FormBool("files"),
|
||||||
|
Verification: ctx.FormString("verification") == "" || ctx.FormBool("verification"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ToCommit convert a git.Commit to api.Commit
|
// ToCommit convert a git.Commit to api.Commit
|
||||||
func ToCommit(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, commit *git.Commit, userCache map[string]*user_model.User, opts ToCommitOptions) (*api.Commit, error) {
|
func ToCommit(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, commit *git.Commit, userCache map[string]*user_model.User, opts ToCommitOptions) (*api.Commit, error) {
|
||||||
var apiAuthor, apiCommitter *api.User
|
var apiAuthor, apiCommitter *api.User
|
||||||
|
|
18
templates/swagger/v1_json.tmpl
generated
18
templates/swagger/v1_json.tmpl
generated
|
@ -4498,6 +4498,24 @@
|
||||||
"name": "sha",
|
"name": "sha",
|
||||||
"in": "path",
|
"in": "path",
|
||||||
"required": true
|
"required": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "include diff stats for every commit (disable for speedup, default 'true')",
|
||||||
|
"name": "stat",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "include verification for every commit (disable for speedup, default 'true')",
|
||||||
|
"name": "verification",
|
||||||
|
"in": "query"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "include a list of affected files for every commit (disable for speedup, default 'true')",
|
||||||
|
"name": "files",
|
||||||
|
"in": "query"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"responses": {
|
"responses": {
|
||||||
|
|
Loading…
Reference in a new issue