@@ -17,7 +17,6 @@ import (
17
17
"code.gitea.io/gitea/models/unit"
18
18
user_model "code.gitea.io/gitea/models/user"
19
19
"code.gitea.io/gitea/modules/git"
20
- "code.gitea.io/gitea/modules/log"
21
20
"code.gitea.io/gitea/modules/markup/markdown"
22
21
"code.gitea.io/gitea/modules/optional"
23
22
"code.gitea.io/gitea/modules/setting"
@@ -408,58 +407,56 @@ func NewReleasePost(ctx *context.Context) {
408
407
}
409
408
410
409
// Title of release cannot be empty
411
- if len ( form .TagOnly ) == 0 && len ( form .Title ) == 0 {
410
+ if ! form .TagOnly && form .Title == "" {
412
411
ctx .RenderWithErr (ctx .Tr ("repo.release.title_empty" ), tplReleaseNew , & form )
413
412
return
414
413
}
415
414
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
+ }
419
429
}
420
430
421
431
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
+ }
453
436
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
+ }
457
441
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 )
460
446
return
461
447
}
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
+ }
462
457
458
+ // no release, create a new release
459
+ if rel == nil {
463
460
rel = & repo_model.Release {
464
461
RepoID : ctx .Repo .Repository .ID ,
465
462
Repo : ctx .Repo .Repository ,
@@ -469,48 +466,35 @@ func NewReleasePost(ctx *context.Context) {
469
466
TagName : form .TagName ,
470
467
Target : form .Target ,
471
468
Note : form .Content ,
472
- IsDraft : len ( form .Draft ) > 0 ,
469
+ IsDraft : form .Draft ,
473
470
IsPrerelease : form .Prerelease ,
474
471
IsTag : false ,
475
472
}
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 )
509
475
return
510
476
}
477
+ ctx .Redirect (ctx .Repo .RepoLink + "/releases" )
478
+ return
511
479
}
512
- log .Trace ("Release created: %s/%s:%s" , ctx .Doer .LowerName , ctx .Repo .Repository .Name , form .TagName )
513
480
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
+ }
514
498
ctx .Redirect (ctx .Repo .RepoLink + "/releases" )
515
499
}
516
500
0 commit comments