1
1
mirror of https://github.com/go-gitea/gitea synced 2025-07-22 18:28:37 +00:00

Let branch/tag name be a valid ref to get CI status (#16400)

* fix #16384#

* refactor: move shared helper func to utils package

* extend Tests

* use ctx.Repo.GitRepo if not nil
This commit is contained in:
6543
2021-07-13 09:14:14 +02:00
committed by GitHub
parent 4ce32c9e93
commit b81106be3f
4 changed files with 92 additions and 60 deletions

View File

@@ -8,8 +8,8 @@ import (
"net/http"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/git"
api "code.gitea.io/gitea/modules/structs"
"code.gitea.io/gitea/routers/api/v1/utils"
)
// GetGitAllRefs get ref or an list all the refs of a repository
@@ -73,22 +73,8 @@ func GetGitRefs(ctx *context.APIContext) {
getGitRefsInternal(ctx, ctx.Params("*"))
}
func getGitRefs(ctx *context.APIContext, filter string) ([]*git.Reference, string, error) {
gitRepo, err := git.OpenRepository(ctx.Repo.Repository.RepoPath())
if err != nil {
return nil, "OpenRepository", err
}
defer gitRepo.Close()
if len(filter) > 0 {
filter = "refs/" + filter
}
refs, err := gitRepo.GetRefsFiltered(filter)
return refs, "GetRefsFiltered", err
}
func getGitRefsInternal(ctx *context.APIContext, filter string) {
refs, lastMethodName, err := getGitRefs(ctx, filter)
refs, lastMethodName, err := utils.GetGitRefs(ctx, filter)
if err != nil {
ctx.Error(http.StatusInternalServerError, lastMethodName, err)
return

View File

@@ -171,39 +171,14 @@ func GetCommitStatusesByRef(ctx *context.APIContext) {
// "400":
// "$ref": "#/responses/error"
filter := ctx.Params("ref")
if len(filter) == 0 {
ctx.Error(http.StatusBadRequest, "ref not given", nil)
filter := utils.ResolveRefOrSha(ctx, ctx.Params("ref"))
if ctx.Written() {
return
}
for _, reftype := range []string{"heads", "tags"} { //Search branches and tags
refSHA, lastMethodName, err := searchRefCommitByType(ctx, reftype, filter)
if err != nil {
ctx.Error(http.StatusInternalServerError, lastMethodName, err)
return
}
if refSHA != "" {
filter = refSHA
break
}
}
getCommitStatuses(ctx, filter) //By default filter is maybe the raw SHA
}
func searchRefCommitByType(ctx *context.APIContext, refType, filter string) (string, string, error) {
refs, lastMethodName, err := getGitRefs(ctx, refType+"/"+filter) //Search by type
if err != nil {
return "", lastMethodName, err
}
if len(refs) > 0 {
return refs[0].Object.String(), "", nil //Return found SHA
}
return "", "", nil
}
func getCommitStatuses(ctx *context.APIContext, sha string) {
if len(sha) == 0 {
ctx.Error(http.StatusBadRequest, "ref/sha not given", nil)
@@ -272,11 +247,11 @@ func GetCombinedCommitStatusByRef(ctx *context.APIContext) {
// "400":
// "$ref": "#/responses/error"
sha := ctx.Params("ref")
if len(sha) == 0 {
ctx.Error(http.StatusBadRequest, "ref/sha not given", nil)
sha := utils.ResolveRefOrSha(ctx, ctx.Params("ref"))
if ctx.Written() {
return
}
repo := ctx.Repo.Repository
statuses, err := models.GetLatestCommitStatus(repo.ID, sha, utils.GetListOptions(ctx))