}
releases, err := db.Find[repo_model.Release](ctx, repo_model.FindReleasesOptions{
- RepoID: repo.ID,
- TagNames: tags,
+ RepoID: repo.ID,
+ TagNames: tags,
+ IncludeTags: true,
})
if err != nil {
return fmt.Errorf("db.Find[repo_model.Release]: %w", err)
rel, has := relMap[lowerTag]
+ parts := strings.SplitN(tag.Message, "\n", 2)
+ note := ""
+ if len(parts) > 1 {
+ note = parts[1]
+ }
if !has {
- parts := strings.SplitN(tag.Message, "\n", 2)
- note := ""
- if len(parts) > 1 {
- note = parts[1]
- }
rel = &repo_model.Release{
RepoID: repo.ID,
Title: parts[0],
newReleases = append(newReleases, rel)
} else {
+ rel.Title = parts[0]
+ rel.Note = note
rel.Sha1 = commit.ID.String()
rel.CreatedUnix = timeutil.TimeStamp(createdAt.Unix())
rel.NumCommits = commitsCount
- rel.IsDraft = false
if rel.IsTag && author != nil {
rel.PublisherID = author.ID
}
package integration
import (
+ "net/http"
"net/url"
"testing"
"code.gitea.io/gitea/tests"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
)
func TestCreateNewTagProtected(t *testing.T) {
})
})
+ t.Run("GitTagForce", func(t *testing.T) {
+ onGiteaRun(t, func(t *testing.T, u *url.URL) {
+ httpContext := NewAPITestContext(t, owner.Name, repo.Name)
+
+ dstPath := t.TempDir()
+
+ u.Path = httpContext.GitPath()
+ u.User = url.UserPassword(owner.Name, userPassword)
+
+ doGitClone(dstPath, u)(t)
+
+ _, _, err := git.NewCommand(git.DefaultContext, "tag", "v-1.1", "-m", "force update", "--force").RunStdString(&git.RunOpts{Dir: dstPath})
+ require.NoError(t, err)
+
+ _, _, err = git.NewCommand(git.DefaultContext, "push", "--tags").RunStdString(&git.RunOpts{Dir: dstPath})
+ require.NoError(t, err)
+
+ _, _, err = git.NewCommand(git.DefaultContext, "tag", "v-1.1", "-m", "force update v2", "--force").RunStdString(&git.RunOpts{Dir: dstPath})
+ require.NoError(t, err)
+
+ _, _, err = git.NewCommand(git.DefaultContext, "push", "--tags").RunStdString(&git.RunOpts{Dir: dstPath})
+ require.Error(t, err)
+ assert.Contains(t, err.Error(), "the tag already exists in the remote")
+
+ _, _, err = git.NewCommand(git.DefaultContext, "push", "--tags", "--force").RunStdString(&git.RunOpts{Dir: dstPath})
+ require.NoError(t, err)
+ req := NewRequestf(t, "GET", "/%s/releases/tag/v-1.1", repo.FullName())
+ resp := MakeRequest(t, req, http.StatusOK)
+ htmlDoc := NewHTMLParser(t, resp.Body)
+ tagsTab := htmlDoc.Find(".release-list-title")
+ assert.Contains(t, tagsTab.Text(), "force update v2")
+ })
+ })
+
// Cleanup
releases, err := db.Find[repo_model.Release](db.DefaultContext, repo_model.FindReleasesOptions{
IncludeTags: true,