mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-30 06:38:37 -04: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 | 	//   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": { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user