feat: API GET /repos/{owner}/{repo}/git/blobs

This commit is contained in:
oliverpool 2025-06-13 11:36:57 +02:00
parent 07e8684a61
commit a4ea74020f
6 changed files with 167 additions and 7 deletions

View file

@ -5,11 +5,54 @@ package repo
import (
"net/http"
"strings"
"forgejo.org/services/context"
files_service "forgejo.org/services/repository/files"
)
// GetBlobs gets multiple blobs of a repository.
func GetBlobs(ctx *context.APIContext) {
// swagger:operation GET /repos/{owner}/{repo}/git/blobs repository GetBlobs
// ---
// summary: Gets multiplbe blobs of a repository.
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: shas
// in: query
// description: a comma separated list of blob-sha (mind the overall URL-length limit of ~2,083 chars)
// type: string
// required: true
// responses:
// "200":
// "$ref": "#/responses/GitBlobList"
// "400":
// "$ref": "#/responses/error"
shas := ctx.FormString("shas")
if len(shas) == 0 {
ctx.Error(http.StatusBadRequest, "", "shas not provided")
return
}
if blobs, err := files_service.GetBlobsBySHA(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, strings.Split(shas, ",")); err != nil {
ctx.Error(http.StatusBadRequest, "", err)
} else {
ctx.JSON(http.StatusOK, blobs)
}
}
// GetBlob get the blob of a repository file.
func GetBlob(ctx *context.APIContext) {
// swagger:operation GET /repos/{owner}/{repo}/git/blobs/{sha} repository GetBlob