From 98e42e22bae28be7ecc7a169193dd6ddc6805498 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Sat, 13 Feb 2021 06:16:20 +0100 Subject: [PATCH] Add DeleteTag + Tests && Correct DeleteReleaseByTag func + Tests --- gitea/release.go | 4 ++-- gitea/release_test.go | 20 +++++++++++------- gitea/repo_tag.go | 11 ++++++++++ gitea/repo_tag_test.go | 47 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 gitea/repo_tag_test.go diff --git a/gitea/release.go b/gitea/release.go index cd6f4f5..741cbce 100644 --- a/gitea/release.go +++ b/gitea/release.go @@ -133,8 +133,8 @@ func (c *Client) DeleteRelease(user, repo string, id int64) (*Response, error) { return resp, err } -// DeleteReleaseTag deletes a tag from a repository, if no release refers to it. -func (c *Client) DeleteReleaseTag(user, repo string, tag string) (*Response, error) { +// DeleteReleaseByTag deletes a release frm a repository by tag +func (c *Client) DeleteReleaseByTag(user, repo string, tag string) (*Response, error) { if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil { return nil, err } diff --git a/gitea/release_test.go b/gitea/release_test.go index 6dd544c..b4798bf 100644 --- a/gitea/release_test.go +++ b/gitea/release_test.go @@ -74,16 +74,22 @@ func TestRelease(t *testing.T) { assert.NoError(t, err) rl, _, _ = c.ListReleases(repo.Owner.UserName, repo.Name, ListReleasesOptions{}) assert.Len(t, rl, 0) - tags, _, err := c.ListRepoTags(repo.Owner.UserName, repo.Name, ListRepoTagsOptions{}) - assert.NoError(t, err) - assert.Len(t, tags, 1) - // DeleteReleaseTag - _, err = c.DeleteReleaseTag(repo.Owner.UserName, repo.Name, r.TagName) + // CreateRelease + _, _, err = c.CreateRelease(repo.Owner.UserName, repo.Name, CreateReleaseOption{ + TagName: "aNewReleaseTag", + Target: "master", + Title: "Title of aNewReleaseTag", + }) assert.NoError(t, err) - tags, _, err = c.ListRepoTags(repo.Owner.UserName, repo.Name, ListRepoTagsOptions{}) + + // DeleteReleaseByTag + _, err = c.DeleteReleaseByTag(repo.Owner.UserName, repo.Name, "aNewReleaseTag") assert.NoError(t, err) - assert.Len(t, tags, 0) + rl, _, _ = c.ListReleases(repo.Owner.UserName, repo.Name, ListReleasesOptions{}) + assert.Len(t, rl, 0) + _, err = c.DeleteReleaseByTag(repo.Owner.UserName, repo.Name, "aNewReleaseTag") + assert.Error(t, err) // Test Response if try to get not existing release _, resp, err := c.GetRelease(repo.Owner.UserName, repo.Name, 1234) diff --git a/gitea/repo_tag.go b/gitea/repo_tag.go index 19eed5b..6565fa7 100644 --- a/gitea/repo_tag.go +++ b/gitea/repo_tag.go @@ -29,3 +29,14 @@ func (c *Client) ListRepoTags(user, repo string, opt ListRepoTagsOptions) ([]*Ta resp, err := c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/tags?%s", user, repo, opt.getURLQuery().Encode()), nil, nil, &tags) return tags, resp, err } + +// DeleteTag deletes a tag from a repository, if no release refers to it +func (c *Client) DeleteTag(user, repo string, tag string) (*Response, error) { + if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil { + return nil, err + } + _, resp, err := c.getResponse("DELETE", + fmt.Sprintf("/repos/%s/%s/tags/%s", user, repo, tag), + nil, nil) + return resp, err +} diff --git a/gitea/repo_tag_test.go b/gitea/repo_tag_test.go new file mode 100644 index 0000000..c3b3e96 --- /dev/null +++ b/gitea/repo_tag_test.go @@ -0,0 +1,47 @@ +// Copyright 2020 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 gitea + +import ( + "log" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestTags(t *testing.T) { + log.Println("== TestTags ==") + c := newTestClient() + + repo, _ := createTestRepo(t, "TestTags", c) + + // Create Tags + createTestTag(t, c, repo, "tag1") + + tags, _, err := c.ListRepoTags(repo.Owner.UserName, repo.Name, ListRepoTagsOptions{}) + assert.NoError(t, err) + assert.Len(t, tags, 1) + + // DeleteReleaseTag + resp, err := c.DeleteTag(repo.Owner.UserName, repo.Name, "tag1") + assert.NoError(t, err) + assert.EqualValues(t, 204, resp.StatusCode) + tags, _, err = c.ListRepoTags(repo.Owner.UserName, repo.Name, ListRepoTagsOptions{}) + assert.NoError(t, err) + assert.Len(t, tags, 0) +} + +// createTestTag use create release api since there exist no api to create tag only +// https://github.com/go-gitea/gitea/issues/14669 +func createTestTag(t *testing.T, c *Client, repo *Repository, name string) { + rel, _, err := c.CreateRelease(repo.Owner.UserName, repo.Name, CreateReleaseOption{ + TagName: name, + Target: "master", + Title: "TMP Release", + }) + assert.NoError(t, err) + _, err = c.DeleteRelease(repo.Owner.UserName, repo.Name, rel.ID) + assert.NoError(t, err) +} -- 2.40.1