diff --git a/remote/gogs/fixtures/handler.go b/remote/gogs/fixtures/handler.go index 26300644c..5904a1dd3 100644 --- a/remote/gogs/fixtures/handler.go +++ b/remote/gogs/fixtures/handler.go @@ -30,12 +30,13 @@ func getRepo(c *gin.Context) { } func getRepoFile(c *gin.Context) { - switch c.Param("file") { - case "file_not_found": + if c.Param("file") == "file_not_found" { c.String(404, "") - default: + } + if c.Param("commit") == "v1.0.0" || c.Param("commit") == "9ecad50" { c.String(200, repoFilePayload) } + c.String(404, "") } func createRepoHook(c *gin.Context) { diff --git a/remote/gogs/gogs.go b/remote/gogs/gogs.go index 666101036..98cc6f231 100644 --- a/remote/gogs/gogs.go +++ b/remote/gogs/gogs.go @@ -6,6 +6,7 @@ import ( "net" "net/http" "net/url" + "strings" "github.com/drone/drone/model" "github.com/drone/drone/remote" @@ -176,7 +177,14 @@ func (c *client) File(u *model.User, r *model.Repo, b *model.Build, f string) ([ client := c.newClientToken(u.Token) buildRef := b.Commit if buildRef == "" { - buildRef = b.Ref + // Remove refs/tags or refs/heads, Gogs needs a short ref + buildRef = strings.TrimPrefix( + strings.TrimPrefix( + b.Ref, + "refs/heads/", + ), + "refs/tags/", + ) } cfg, err := client.GetFile(r.Owner, r.Name, buildRef, f) return cfg, err diff --git a/remote/gogs/gogs_test.go b/remote/gogs/gogs_test.go index 1d88d1302..bfd8728c9 100644 --- a/remote/gogs/gogs_test.go +++ b/remote/gogs/gogs_test.go @@ -128,6 +128,12 @@ func Test_gogs(t *testing.T) { g.Assert(string(raw)).Equal("{ platform: linux/amd64 }") }) + g.It("Should return a repository file from a ref", func() { + raw, err := c.File(fakeUser, fakeRepo, fakeBuildWithRef, ".drone.yml") + g.Assert(err == nil).IsTrue() + g.Assert(string(raw)).Equal("{ platform: linux/amd64 }") + }) + g.Describe("Given an authentication request", func() { g.It("Should redirect to login form") g.It("Should create an access token") @@ -178,4 +184,8 @@ var ( fakeBuild = &model.Build{ Commit: "9ecad50", } + + fakeBuildWithRef = &model.Build{ + Ref: "refs/tags/v1.0.0", + } )