Skip to content

Commit 5cf8947

Browse files
committed
fix legacy bugs
1 parent 10c6287 commit 5cf8947

File tree

4 files changed

+72
-100
lines changed

4 files changed

+72
-100
lines changed

routers/web/repo/release.go

Lines changed: 60 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
"code.gitea.io/gitea/models/unit"
1818
user_model "code.gitea.io/gitea/models/user"
1919
"code.gitea.io/gitea/modules/git"
20-
"code.gitea.io/gitea/modules/log"
2120
"code.gitea.io/gitea/modules/markup/markdown"
2221
"code.gitea.io/gitea/modules/optional"
2322
"code.gitea.io/gitea/modules/setting"
@@ -408,58 +407,56 @@ func NewReleasePost(ctx *context.Context) {
408407
}
409408

410409
// Title of release cannot be empty
411-
if len(form.TagOnly) == 0 && len(form.Title) == 0 {
410+
if !form.TagOnly && form.Title == "" {
412411
ctx.RenderWithErr(ctx.Tr("repo.release.title_empty"), tplReleaseNew, &form)
413412
return
414413
}
415414

416-
var attachmentUUIDs []string
417-
if setting.Attachment.Enabled {
418-
attachmentUUIDs = form.Files
415+
handleTagReleaseError := func(err error) {
416+
ctx.Data["Err_TagName"] = true
417+
switch {
418+
case release_service.IsErrTagAlreadyExists(err):
419+
ctx.RenderWithErr(ctx.Tr("repo.branch.tag_collision", form.TagName), tplReleaseNew, &form)
420+
case repo_model.IsErrReleaseAlreadyExist(err):
421+
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_already_exist"), tplReleaseNew, &form)
422+
case release_service.IsErrInvalidTagName(err):
423+
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_invalid"), tplReleaseNew, &form)
424+
case release_service.IsErrProtectedTagName(err):
425+
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_protected"), tplReleaseNew, &form)
426+
default:
427+
ctx.ServerError("handleTagReleaseError", err)
428+
}
419429
}
420430

421431
rel, err := repo_model.GetRelease(ctx, ctx.Repo.Repository.ID, form.TagName)
422-
if err != nil {
423-
if !repo_model.IsErrReleaseNotExist(err) {
424-
ctx.ServerError("GetRelease", err)
425-
return
426-
}
427-
428-
msg := ""
429-
if len(form.Title) > 0 && form.AddTagMsg {
430-
msg = form.Title + "\n\n" + form.Content
431-
}
432-
433-
if len(form.TagOnly) > 0 {
434-
if err = release_service.CreateNewTag(ctx, ctx.Doer, ctx.Repo.Repository, form.Target, form.TagName, msg); err != nil {
435-
if release_service.IsErrTagAlreadyExists(err) {
436-
e := err.(release_service.ErrTagAlreadyExists)
437-
ctx.Flash.Error(ctx.Tr("repo.branch.tag_collision", e.TagName))
438-
ctx.Redirect(ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL())
439-
return
440-
}
441-
442-
if release_service.IsErrInvalidTagName(err) {
443-
ctx.Flash.Error(ctx.Tr("repo.release.tag_name_invalid"))
444-
ctx.Redirect(ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL())
445-
return
446-
}
447-
448-
if release_service.IsErrProtectedTagName(err) {
449-
ctx.Flash.Error(ctx.Tr("repo.release.tag_name_protected"))
450-
ctx.Redirect(ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL())
451-
return
452-
}
432+
if err != nil && !repo_model.IsErrReleaseNotExist(err) {
433+
ctx.ServerError("GetRelease", err)
434+
return
435+
}
453436

454-
ctx.ServerError("release_service.CreateNewTag", err)
455-
return
456-
}
437+
newTagMsg := ""
438+
if form.Title != "" && form.AddTagMsg {
439+
newTagMsg = form.Title + "\n\n" + form.Content
440+
}
457441

458-
ctx.Flash.Success(ctx.Tr("repo.tag.create_success", form.TagName))
459-
ctx.Redirect(ctx.Repo.RepoLink + "/src/tag/" + util.PathEscapeSegments(form.TagName))
442+
// no release, and tag only
443+
if rel == nil && form.TagOnly {
444+
if err = release_service.CreateNewTag(ctx, ctx.Doer, ctx.Repo.Repository, form.Target, form.TagName, newTagMsg); err != nil {
445+
handleTagReleaseError(err)
460446
return
461447
}
448+
ctx.Flash.Success(ctx.Tr("repo.tag.create_success", form.TagName))
449+
ctx.Redirect(ctx.Repo.RepoLink + "/src/tag/" + util.PathEscapeSegments(form.TagName))
450+
return
451+
}
452+
453+
var attachmentUUIDs []string
454+
if setting.Attachment.Enabled {
455+
attachmentUUIDs = form.Files
456+
}
462457

458+
// no release, create a new release
459+
if rel == nil {
463460
rel = &repo_model.Release{
464461
RepoID: ctx.Repo.Repository.ID,
465462
Repo: ctx.Repo.Repository,
@@ -469,48 +466,35 @@ func NewReleasePost(ctx *context.Context) {
469466
TagName: form.TagName,
470467
Target: form.Target,
471468
Note: form.Content,
472-
IsDraft: len(form.Draft) > 0,
469+
IsDraft: form.Draft,
473470
IsPrerelease: form.Prerelease,
474471
IsTag: false,
475472
}
476-
477-
if err = release_service.CreateRelease(ctx.Repo.GitRepo, rel, attachmentUUIDs, msg); err != nil {
478-
ctx.Data["Err_TagName"] = true
479-
switch {
480-
case repo_model.IsErrReleaseAlreadyExist(err):
481-
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_already_exist"), tplReleaseNew, &form)
482-
case release_service.IsErrInvalidTagName(err):
483-
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_invalid"), tplReleaseNew, &form)
484-
case release_service.IsErrProtectedTagName(err):
485-
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_protected"), tplReleaseNew, &form)
486-
default:
487-
ctx.ServerError("CreateRelease", err)
488-
}
489-
return
490-
}
491-
} else {
492-
if form.TagOnly != "" && rel.IsTag {
493-
ctx.Data["Err_TagName"] = true
494-
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_already_exist"), tplReleaseNew, &form)
495-
return
496-
}
497-
498-
rel.Title = form.Title
499-
rel.Note = form.Content
500-
rel.Target = form.Target
501-
rel.IsDraft = len(form.Draft) > 0
502-
rel.IsPrerelease = form.Prerelease
503-
rel.PublisherID = ctx.Doer.ID
504-
rel.IsTag = false
505-
506-
if err = release_service.UpdateRelease(ctx, ctx.Doer, ctx.Repo.GitRepo, rel, attachmentUUIDs, nil, nil); err != nil {
507-
ctx.Data["Err_TagName"] = true
508-
ctx.ServerError("UpdateRelease", err)
473+
if err = release_service.CreateRelease(ctx.Repo.GitRepo, rel, attachmentUUIDs, newTagMsg); err != nil {
474+
handleTagReleaseError(err)
509475
return
510476
}
477+
ctx.Redirect(ctx.Repo.RepoLink + "/releases")
478+
return
511479
}
512-
log.Trace("Release created: %s/%s:%s", ctx.Doer.LowerName, ctx.Repo.Repository.Name, form.TagName)
513480

481+
// release exists, try to update it (it can't do tag-only if the release is just a tag)
482+
if form.TagOnly && rel.IsTag {
483+
ctx.Data["Err_TagName"] = true
484+
ctx.RenderWithErr(ctx.Tr("repo.release.tag_name_already_exist"), tplReleaseNew, &form)
485+
return
486+
}
487+
rel.Title = form.Title
488+
rel.Note = form.Content
489+
rel.Target = form.Target
490+
rel.IsDraft = form.Draft
491+
rel.IsPrerelease = form.Prerelease
492+
rel.PublisherID = ctx.Doer.ID
493+
rel.IsTag = false
494+
if err = release_service.UpdateRelease(ctx, ctx.Doer, ctx.Repo.GitRepo, rel, attachmentUUIDs, nil, nil); err != nil {
495+
handleTagReleaseError(err)
496+
return
497+
}
514498
ctx.Redirect(ctx.Repo.RepoLink + "/releases")
515499
}
516500

routers/web/repo/release_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func TestNewReleasePost(t *testing.T) {
4545
TagName: "delete-tag",
4646
Target: "master",
4747
Title: "delete-tag",
48-
TagOnly: "1",
48+
TagOnly: true,
4949
},
5050
},
5151
{

services/forms/repo_form.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -647,16 +647,12 @@ type UpdateAllowEditsForm struct {
647647

648648
// NewReleaseForm form for creating release
649649
type NewReleaseForm struct {
650-
TagName string `binding:"Required;GitRefName;MaxSize(255)"`
651-
Target string `form:"tag_target" binding:"Required;MaxSize(255)"`
652-
Title string `binding:"MaxSize(255)"`
653-
Content string
654-
Draft string
655-
656-
// TODO: ideally it should be a bool. The "string" type here was used to accept the value of `<input type="submit" value="Tag Only">`.
657-
// As now, the tmpl code had been refactor to `<button value="1">Tag Only</button>`, so the type could be safely refactored to "bool" in the future.
658-
TagOnly string
659-
650+
TagName string `binding:"Required;GitRefName;MaxSize(255)"`
651+
Target string `form:"tag_target" binding:"Required;MaxSize(255)"`
652+
Title string `binding:"MaxSize(255)"`
653+
Content string
654+
Draft bool
655+
TagOnly bool
660656
Prerelease bool
661657
AddTagMsg bool
662658
Files []string

templates/repo/release/new.tmpl

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -109,23 +109,15 @@
109109
{{ctx.Locale.Tr "repo.release.delete_release"}}
110110
</a>
111111
{{if .IsDraft}}
112-
<button class="ui small button" type="submit" name="draft" value="{{ctx.Locale.Tr "repo.release.save_draft"}}">{{ctx.Locale.Tr "repo.release.save_draft"}}</button>
113-
<button class="ui small primary button">
114-
{{ctx.Locale.Tr "repo.release.publish"}}
115-
</button>
112+
<button class="ui small button" type="submit" name="draft" value="1">{{ctx.Locale.Tr "repo.release.save_draft"}}</button>
113+
<button class="ui small primary button">{{ctx.Locale.Tr "repo.release.publish"}}</button>
116114
{{else}}
117-
<button class="ui small primary button">
118-
{{ctx.Locale.Tr "repo.release.edit_release"}}
119-
</button>
115+
<button class="ui small primary button">{{ctx.Locale.Tr "repo.release.edit_release"}}</button>
120116
{{end}}
121117
{{else}}
122-
{{if not .tag_name}}
123-
<button class="ui small button" name="tag_only" value="1">{{ctx.Locale.Tr "repo.release.add_tag"}}</button>
124-
{{end}}
118+
<button class="ui small button" name="tag_only" value="1">{{ctx.Locale.Tr "repo.release.add_tag"}}</button>
125119
<button class="ui small button" name="draft" value="1">{{ctx.Locale.Tr "repo.release.save_draft"}}</button>
126-
<button class="ui small primary button">
127-
{{ctx.Locale.Tr "repo.release.publish"}}
128-
</button>
120+
<button class="ui small primary button">{{ctx.Locale.Tr "repo.release.publish"}}</button>
129121
{{end}}
130122
</div>
131123
</div>

0 commit comments

Comments
 (0)