* Add API to list tags * update dependency gitea sdk vendor * fix swagger generation * fix swagger * add tests * update code.gitea.io/git vendorfor-closed-social
@ -0,0 +1,38 @@ | |||
// Copyright 2018 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" | |||
"path" | |||
"testing" | |||
"code.gitea.io/gitea/models" | |||
"code.gitea.io/gitea/modules/setting" | |||
api "code.gitea.io/sdk/gitea" | |||
"github.com/stretchr/testify/assert" | |||
) | |||
func TestAPIReposGetTags(t *testing.T) { | |||
prepareTestEnv(t) | |||
user := models.AssertExistsAndLoadBean(t, &models.User{ID: 2}).(*models.User) | |||
// Login as User2. | |||
session := loginUser(t, user.Name) | |||
token := getTokenForLoggedInUser(t, session) | |||
req := NewRequestf(t, "GET", "/api/v1/repos/%s/repo1/tags?token="+token, user.Name) | |||
resp := session.MakeRequest(t, req, http.StatusOK) | |||
var tags []*api.Tag | |||
DecodeJSON(t, resp, &tags) | |||
assert.EqualValues(t, 1, len(tags)) | |||
assert.Equal(t, "v1.1", tags[0].Name) | |||
assert.Equal(t, "65f1bf27bc3bf70f64657658635e66094edbcb4d", tags[0].Commit.SHA) | |||
assert.Equal(t, path.Join(setting.AppSubURL, "/user2/repo1/commit/65f1bf27bc3bf70f64657658635e66094edbcb4d"), tags[0].Commit.URL) | |||
assert.Equal(t, path.Join(setting.AppSubURL, "/user2/repo1/archive/v1.1.zip"), tags[0].ZipballURL) | |||
assert.Equal(t, path.Join(setting.AppSubURL, "/user2/repo1/archive/v1.1.tar.gz"), tags[0].TarballURL) | |||
} |
@ -0,0 +1,24 @@ | |||
// Copyright 2019 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 models | |||
import ( | |||
"code.gitea.io/git" | |||
) | |||
// GetTagsByPath returns repo tags by it's path | |||
func GetTagsByPath(path string) ([]*git.Tag, error) { | |||
gitRepo, err := git.OpenRepository(path) | |||
if err != nil { | |||
return nil, err | |||
} | |||
return gitRepo.GetTagInfos() | |||
} | |||
// GetTags return repo's tags | |||
func (repo *Repository) GetTags() ([]*git.Tag, error) { | |||
return GetTagsByPath(repo.RepoPath()) | |||
} |
@ -0,0 +1,47 @@ | |||
// Copyright 2019 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 repo | |||
import ( | |||
"code.gitea.io/gitea/modules/context" | |||
"code.gitea.io/gitea/routers/api/v1/convert" | |||
api "code.gitea.io/sdk/gitea" | |||
) | |||
// ListTags list all the tags of a repository | |||
func ListTags(ctx *context.APIContext) { | |||
// swagger:operation GET /repos/{owner}/{repo}/tags repository repoListTags | |||
// --- | |||
// summary: List a repository's tags | |||
// 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 | |||
// responses: | |||
// "200": | |||
// "$ref": "#/responses/TagList" | |||
tags, err := ctx.Repo.Repository.GetTags() | |||
if err != nil { | |||
ctx.Error(500, "GetTags", err) | |||
return | |||
} | |||
apiTags := make([]*api.Tag, len(tags)) | |||
for i := range tags { | |||
apiTags[i] = convert.ToTag(ctx.Repo.Repository, tags[i]) | |||
} | |||
ctx.JSON(200, &apiTags) | |||
} |