From 68eec69f472e7bc559861d79d13061a23ede5bdc Mon Sep 17 00:00:00 2001 From: Norwin Date: Thu, 10 Dec 2020 02:08:22 +0800 Subject: [PATCH] Add DeleteRepoTag function (#461) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit add DeleteRepoTag() fixes #441 add test didnt run them yet 🙃 Co-authored-by: Norwin Roosen Reviewed-on: https://gitea.com/gitea/go-sdk/pulls/461 Reviewed-by: 6543 <6543@obermui.de> Reviewed-by: khmarbaise Co-Authored-By: Norwin Co-Committed-By: Norwin --- gitea/release.go | 13 ++++++++++++- gitea/release_test.go | 10 ++++++++++ gitea/version.go | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/gitea/release.go b/gitea/release.go index d8d28c5..502e5da 100644 --- a/gitea/release.go +++ b/gitea/release.go @@ -124,7 +124,7 @@ func (c *Client) EditRelease(user, repo string, id int64, form EditReleaseOption return r, resp, err } -// DeleteRelease delete a release from a repository +// DeleteRelease delete a release from a repository, keeping its tag func (c *Client) DeleteRelease(user, repo string, id int64) (*Response, error) { _, resp, err := c.getResponse("DELETE", fmt.Sprintf("/repos/%s/%s/releases/%d", user, repo, id), @@ -132,6 +132,17 @@ 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) { + if err := c.checkServerVersionGreaterThanOrEqual(version1_14_0); err != nil { + return nil, err + } + _, resp, err := c.getResponse("DELETE", + fmt.Sprintf("/repos/%s/%s/releases/tags/%s", user, repo, tag), + nil, nil) + return resp, err +} + // fallbackGetReleaseByTag is fallback for old gitea installations ( < 1.13.0 ) func (c *Client) fallbackGetReleaseByTag(user, repo string, tag string) (*Release, *Response, error) { for i := 1; ; i++ { diff --git a/gitea/release_test.go b/gitea/release_test.go index 844d59b..6dd544c 100644 --- a/gitea/release_test.go +++ b/gitea/release_test.go @@ -74,6 +74,16 @@ 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) + assert.NoError(t, err) + tags, _, err = c.ListRepoTags(repo.Owner.UserName, repo.Name, ListRepoTagsOptions{}) + assert.NoError(t, err) + assert.Len(t, tags, 0) // Test Response if try to get not existing release _, resp, err := c.GetRelease(repo.Owner.UserName, repo.Name, 1234) diff --git a/gitea/version.go b/gitea/version.go index b5922ec..c96ef66 100644 --- a/gitea/version.go +++ b/gitea/version.go @@ -41,6 +41,7 @@ var ( version1_11_0, _ = version.NewVersion("1.11.0") version1_12_0, _ = version.NewVersion("1.12.0") version1_13_0, _ = version.NewVersion("1.13.0") + version1_14_0, _ = version.NewVersion("1.14.0") ) // checkServerVersionGreaterThanOrEqual is internally used to speed up things and ignore issues with prerelease