@@ -600,28 +600,35 @@ func updateIssueCols(e Engine, issue *Issue, cols ...string) error {
600
600
return nil
601
601
}
602
602
603
- func (issue * Issue ) changeStatus (e * xorm.Session , doer * User , isClosed bool ) (err error ) {
603
+ func (issue * Issue ) changeStatus (e * xorm.Session , doer * User , isClosed bool ) (* Comment , error ) {
604
604
// Reload the issue
605
605
currentIssue , err := getIssueByID (e , issue .ID )
606
606
if err != nil {
607
- return err
607
+ return nil , err
608
608
}
609
609
610
610
// Nothing should be performed if current status is same as target status
611
611
if currentIssue .IsClosed == isClosed {
612
- return nil
612
+ if ! issue .IsPull {
613
+ return nil , ErrIssueWasClosed {
614
+ ID : issue .ID ,
615
+ }
616
+ }
617
+ return nil , ErrPullWasClosed {
618
+ ID : issue .ID ,
619
+ }
613
620
}
614
621
615
622
// Check for open dependencies
616
623
if isClosed && issue .Repo .isDependenciesEnabled (e ) {
617
624
// only check if dependencies are enabled and we're about to close an issue, otherwise reopening an issue would fail when there are unsatisfied dependencies
618
625
noDeps , err := issueNoDependenciesLeft (e , issue )
619
626
if err != nil {
620
- return err
627
+ return nil , err
621
628
}
622
629
623
630
if ! noDeps {
624
- return ErrDependenciesLeft {issue .ID }
631
+ return nil , ErrDependenciesLeft {issue .ID }
625
632
}
626
633
}
627
634
@@ -633,22 +640,22 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, isClosed bool) (er
633
640
}
634
641
635
642
if err = updateIssueCols (e , issue , "is_closed" , "closed_unix" ); err != nil {
636
- return err
643
+ return nil , err
637
644
}
638
645
639
646
// Update issue count of labels
640
647
if err = issue .getLabels (e ); err != nil {
641
- return err
648
+ return nil , err
642
649
}
643
650
for idx := range issue .Labels {
644
651
if err = updateLabel (e , issue .Labels [idx ]); err != nil {
645
- return err
652
+ return nil , err
646
653
}
647
654
}
648
655
649
656
// Update issue count of milestone
650
657
if err := updateMilestoneClosedNum (e , issue .MilestoneID ); err != nil {
651
- return err
658
+ return nil , err
652
659
}
653
660
654
661
// New action comment
@@ -657,43 +664,39 @@ func (issue *Issue) changeStatus(e *xorm.Session, doer *User, isClosed bool) (er
657
664
cmtType = CommentTypeReopen
658
665
}
659
666
660
- var opts = & CreateCommentOptions {
667
+ return createCommentWithNoAction ( e , & CreateCommentOptions {
661
668
Type : cmtType ,
662
669
Doer : doer ,
663
670
Repo : issue .Repo ,
664
671
Issue : issue ,
665
- }
666
- comment , err := createCommentWithNoAction (e , opts )
667
- if err != nil {
668
- return err
669
- }
670
- return sendCreateCommentAction (e , opts , comment )
672
+ })
671
673
}
672
674
673
675
// ChangeStatus changes issue status to open or closed.
674
- func (issue * Issue ) ChangeStatus (doer * User , isClosed bool ) (err error ) {
676
+ func (issue * Issue ) ChangeStatus (doer * User , isClosed bool ) (* Comment , error ) {
675
677
sess := x .NewSession ()
676
678
defer sess .Close ()
677
- if err = sess .Begin (); err != nil {
678
- return err
679
+ if err : = sess .Begin (); err != nil {
680
+ return nil , err
679
681
}
680
682
681
- if err = issue .loadRepo (sess ); err != nil {
682
- return err
683
+ if err : = issue .loadRepo (sess ); err != nil {
684
+ return nil , err
683
685
}
684
- if err = issue .loadPoster (sess ); err != nil {
685
- return err
686
+ if err : = issue .loadPoster (sess ); err != nil {
687
+ return nil , err
686
688
}
687
689
688
- if err = issue .changeStatus (sess , doer , isClosed ); err != nil {
689
- return err
690
+ comment , err := issue .changeStatus (sess , doer , isClosed )
691
+ if err != nil {
692
+ return nil , err
690
693
}
691
694
692
695
if err = sess .Commit (); err != nil {
693
- return fmt .Errorf ("Commit: %v" , err )
696
+ return nil , fmt .Errorf ("Commit: %v" , err )
694
697
}
695
698
696
- return nil
699
+ return comment , nil
697
700
}
698
701
699
702
// ChangeTitle changes the title of this issue, as the given user.
0 commit comments