]> source.dussan.org Git - gitea.git/commitdiff
Fix API raw requests for commits and tags (#2841)
authorLauris BH <lauris@nix.lv>
Fri, 3 Nov 2017 23:23:59 +0000 (01:23 +0200)
committerGitHub <noreply@github.com>
Fri, 3 Nov 2017 23:23:59 +0000 (01:23 +0200)
integrations/api_repo_raw_test.go [new file with mode: 0644]
modules/context/repo.go
routers/api/v1/api.go

diff --git a/integrations/api_repo_raw_test.go b/integrations/api_repo_raw_test.go
new file mode 100644 (file)
index 0000000..045e812
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package integrations
+
+import (
+       "net/http"
+       "testing"
+
+       "code.gitea.io/gitea/models"
+)
+
+func TestAPIReposRaw(t *testing.T) {
+       prepareTestEnv(t)
+       user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User)
+       // Login as User2.
+       session := loginUser(t, user.Name)
+
+       for _, ref := range [...]string{
+               "master", // Branch
+               "v1.1",   // Tag
+               "65f1bf27bc3bf70f64657658635e66094edbcb4d", // Commit
+       } {
+               req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo1/raw/%s/README.md", user.Name, ref)
+               session.MakeRequest(t, req, http.StatusOK)
+       }
+}
index 8e0c584c822d61f7f7c9b42d4ed51de620345075..850b127e595ae8fde772004aa35044874c04eb6f 100644 (file)
@@ -466,6 +466,9 @@ const (
        // RepoRefLegacy unknown type, make educated guess and redirect.
        // for backward compatibility with previous URL scheme
        RepoRefLegacy RepoRefType = iota
+       // RepoRefAny is for usage where educated guess is needed
+       // but redirect can not be made
+       RepoRefAny
        // RepoRefBranch branch
        RepoRefBranch
        // RepoRefTag tag
@@ -497,7 +500,7 @@ func getRefNameFromPath(ctx *Context, path string, isExist func(string) bool) st
 func getRefName(ctx *Context, pathType RepoRefType) string {
        path := ctx.Params("*")
        switch pathType {
-       case RepoRefLegacy:
+       case RepoRefLegacy, RepoRefAny:
                if refName := getRefName(ctx, RepoRefBranch); len(refName) > 0 {
                        return refName
                }
index 79ae5799e3a4691a3dffe529c2d5b7d6cb734de4..4331929614600b3fd586ce35cc59c634445d55c6 100644 (file)
@@ -385,7 +385,7 @@ func RegisterRoutes(m *macaron.Macaron) {
                                                Put(bind(api.AddCollaboratorOption{}), repo.AddCollaborator).
                                                Delete(repo.DeleteCollaborator)
                                }, reqToken())
-                               m.Get("/raw/*", context.RepoRef(), repo.GetRawFile)
+                               m.Get("/raw/*", context.RepoRefByType(context.RepoRefAny), repo.GetRawFile)
                                m.Get("/archive/*", repo.GetArchive)
                                m.Combo("/forks").Get(repo.ListForks).
                                        Post(reqToken(), bind(api.CreateForkOption{}), repo.CreateFork)