mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 01:53:18 +00: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:
		@@ -42,6 +42,18 @@ func GetSingleCommit(ctx *context.APIContext) {
 | 
			
		||||
	//   description: a git ref or commit sha
 | 
			
		||||
	//   type: string
 | 
			
		||||
	//   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:
 | 
			
		||||
	//   "200":
 | 
			
		||||
	//     "$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))
 | 
			
		||||
		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)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if git.IsErrNotExist(err) {
 | 
			
		||||
@@ -69,7 +82,7 @@ func getCommit(ctx *context.APIContext, identifier string) {
 | 
			
		||||
		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 {
 | 
			
		||||
		ctx.Error(http.StatusInternalServerError, "toCommit", err)
 | 
			
		||||
		return
 | 
			
		||||
@@ -240,24 +253,12 @@ func GetAllCommits(ctx *context.APIContext) {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pageCount := int(math.Ceil(float64(commitsCountTotal) / float64(listOptions.PageSize)))
 | 
			
		||||
 | 
			
		||||
	userCache := make(map[string]*user_model.User)
 | 
			
		||||
 | 
			
		||||
	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 {
 | 
			
		||||
		// Create json struct
 | 
			
		||||
		apiCommits[i], err = convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, commit, userCache,
 | 
			
		||||
			convert.ToCommitOptions{
 | 
			
		||||
				Stat:         stat,
 | 
			
		||||
				Verification: verification,
 | 
			
		||||
				Files:        files,
 | 
			
		||||
			})
 | 
			
		||||
 | 
			
		||||
		apiCommits[i], err = convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, commit, userCache, convert.ParseCommitOptions(ctx))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ctx.Error(http.StatusInternalServerError, "toCommit", err)
 | 
			
		||||
			return
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ import (
 | 
			
		||||
 | 
			
		||||
	repo_model "code.gitea.io/gitea/models/repo"
 | 
			
		||||
	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/log"
 | 
			
		||||
	api "code.gitea.io/gitea/modules/structs"
 | 
			
		||||
@@ -78,6 +79,14 @@ type ToCommitOptions struct {
 | 
			
		||||
	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
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										18
									
								
								templates/swagger/v1_json.tmpl
									
									
									
										generated
									
									
									
								
							@@ -4498,6 +4498,24 @@
 | 
			
		||||
            "name": "sha",
 | 
			
		||||
            "in": "path",
 | 
			
		||||
            "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": {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user