{{svg "octicon-alert-fill" 16}} Existing tag referencing {{svg "octicon-git-commit" 16}}
+{{ctx.Locale.Tr "repo.release.existing_tag"}}
+{{ctx.Locale.Tr "repo.release.create_confirmation"}}
+diff --git a/models/repo/release.go b/models/repo/release.go index 1c2e4a48e39..7cf8760f312 100644 --- a/models/repo/release.go +++ b/models/repo/release.go @@ -298,6 +298,26 @@ func GetTagNamesByRepoID(ctx context.Context, repoID int64) ([]string, error) { return tags, sess.Find(&tags) } +// GetTagMappingsByRepoID returns a mapping from tag name to commit SHA by repo id +func GetTagMappingsByRepoID(ctx context.Context, repoID int64) (map[string]string, error) { + mapping := make(map[string]string) + rels := make([]*Release, 0) + if err := db.GetEngine(ctx). + Desc("created_unix"). + Find(&rels, Release{RepoID: repoID}); err != nil { + return mapping, err + } + for _, r := range rels { + mapping[r.TagName] = r.Sha1 + } + return mapping, nil +} + +// CountReleasesByRepoID returns a number of releases matching FindReleaseOptions and RepoID. +func CountReleasesByRepoID(ctx context.Context, repoID int64, opts FindReleasesOptions) (int64, error) { + return db.GetEngine(ctx).Where(opts.ToConds()).Count(new(Release)) +} + // GetLatestReleaseByRepoID returns the latest release for a repository func GetLatestReleaseByRepoID(ctx context.Context, repoID int64) (*Release, error) { cond := builder.NewCond(). diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 41f6c5055d6..71c974085c3 100644 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -2679,6 +2679,12 @@ release.add_tag_msg = Use the title and content of release as tag message. release.add_tag = Create Tag Only release.releases_for = Releases for %s release.tags_for = Tags for %s +release.existing_tag_header = New release with an old tag +release.existing_tag_draft_header = Draft release with an old tag +release.existing_tag = You are about to create a new release with an existing tag. Make sure that the tag is pointing to the right commit. +release.existing_draft_tag = You are about to create a draft release with an existing tag. Make sure that the tag is pointing to the right commit. +release.create_confirmation = Do you want to continue with the release creation? +release.create_draft_confirmation = Do you want to continue with the release draft creation? branch.name = Branch Name branch.already_exists = A branch named "%s" already exists. diff --git a/routers/web/repo/release.go b/routers/web/repo/release.go index 284fd27abf7..e84af21798c 100644 --- a/routers/web/repo/release.go +++ b/routers/web/repo/release.go @@ -330,9 +330,9 @@ func newReleaseCommon(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("repo.release.new_release") ctx.Data["PageIsReleaseList"] = true - tags, err := repo_model.GetTagNamesByRepoID(ctx, ctx.Repo.Repository.ID) + tags, err := repo_model.GetTagMappingsByRepoID(ctx, ctx.Repo.Repository.ID) if err != nil { - ctx.ServerError("GetTagNamesByRepoID", err) + ctx.ServerError("GetTagMappingsByRepoID", err) return } ctx.Data["Tags"] = tags diff --git a/templates/repo/release/new.tmpl b/templates/repo/release/new.tmpl index 8b6aa252aff..6766e2a3a04 100644 --- a/templates/repo/release/new.tmpl +++ b/templates/repo/release/new.tmpl @@ -38,6 +38,9 @@ +