@@ -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
0 commit comments