summaryrefslogtreecommitdiffstats
path: root/modules/context/api.go
diff options
context:
space:
mode:
author6543 <6543@obermui.de>2020-11-14 17:13:55 +0100
committerGitHub <noreply@github.com>2020-11-14 11:13:55 -0500
commit7d2700c8be5da8f2073a576dae209ae07ac6ed22 (patch)
tree072698eb27e6b8a1e1da3aa0313283d89127598a /modules/context/api.go
parent3f3447a1ea8ed0d89ed862b7da506c97030d670e (diff)
downloadgitea-7d2700c8be5da8f2073a576dae209ae07ac6ed22.tar.gz
gitea-7d2700c8be5da8f2073a576dae209ae07ac6ed22.zip
[API] Only Return Json (#13511)
* Let Branch and Raw Endpoint return json error if not found * Revert "RM RepoRefByTypeForAPI and move needed parts into GetRawFile directly" This reverts commit d826d08577b23765cb3c257e7a861191d1aa9a04. * more similar to RepoRefByType * dedub-code * API should just speak JSON * nice name Co-authored-by: zeripath <art27@cantab.net>
Diffstat (limited to 'modules/context/api.go')
-rw-r--r--modules/context/api.go58
1 files changed, 58 insertions, 0 deletions
diff --git a/modules/context/api.go b/modules/context/api.go
index 9dad588c7f..b5f521f63c 100644
--- a/modules/context/api.go
+++ b/modules/context/api.go
@@ -259,3 +259,61 @@ func (ctx *APIContext) NotFound(objs ...interface{}) {
"errors": errors,
})
}
+
+// RepoRefForAPI handles repository reference names when the ref name is not explicitly given
+func RepoRefForAPI() macaron.Handler {
+ return func(ctx *APIContext) {
+ // Empty repository does not have reference information.
+ if ctx.Repo.Repository.IsEmpty {
+ return
+ }
+
+ var err error
+
+ if ctx.Repo.GitRepo == nil {
+ repoPath := models.RepoPath(ctx.Repo.Owner.Name, ctx.Repo.Repository.Name)
+ ctx.Repo.GitRepo, err = git.OpenRepository(repoPath)
+ if err != nil {
+ ctx.InternalServerError(err)
+ return
+ }
+ // We opened it, we should close it
+ defer func() {
+ // If it's been set to nil then assume someone else has closed it.
+ if ctx.Repo.GitRepo != nil {
+ ctx.Repo.GitRepo.Close()
+ }
+ }()
+ }
+
+ refName := getRefName(ctx.Context, RepoRefAny)
+
+ if ctx.Repo.GitRepo.IsBranchExist(refName) {
+ ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetBranchCommit(refName)
+ if err != nil {
+ ctx.InternalServerError(err)
+ return
+ }
+ ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()
+ } else if ctx.Repo.GitRepo.IsTagExist(refName) {
+ ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetTagCommit(refName)
+ if err != nil {
+ ctx.InternalServerError(err)
+ return
+ }
+ ctx.Repo.CommitID = ctx.Repo.Commit.ID.String()
+ } else if len(refName) == 40 {
+ ctx.Repo.CommitID = refName
+ ctx.Repo.Commit, err = ctx.Repo.GitRepo.GetCommit(refName)
+ if err != nil {
+ ctx.NotFound("GetCommit", err)
+ return
+ }
+ } else {
+ ctx.NotFound(fmt.Errorf("not exist: '%s'", ctx.Params("*")))
+ return
+ }
+
+ ctx.Next()
+ }
+}