@@ -630,19 +630,105 @@ public ContextMenu CreateContextMenuForSelectedCommits(List<Models.Commit> selec
630
630
_repo . ShowPopup ( new CheckoutCommit ( _repo , commit ) ) ;
631
631
e . Handled = true ;
632
632
} ;
633
+ menu . Items . Add ( checkoutCommit ) ;
633
634
634
- var interactiveRebase = new MenuItem ( ) ;
635
- interactiveRebase . Header = App . Text ( "CommitCM.InteractiveRebase" , current . Name , target ) ;
636
- interactiveRebase . Icon = App . CreateMenuIcon ( "Icons.InteractiveRebase" ) ;
637
- interactiveRebase . Click += async ( _ , e ) =>
635
+ if ( commit . IsMerged && commit . Parents . Count > 0 )
638
636
{
639
- await App . ShowDialog ( new InteractiveRebase ( _repo , current , commit ) ) ;
640
- e . Handled = true ;
641
- } ;
637
+ var interactiveRebase = new MenuItem ( ) ;
638
+ interactiveRebase . Header = App . Text ( "CommitCM.InteractiveRebase" ) ;
639
+ interactiveRebase . Icon = App . CreateMenuIcon ( "Icons.InteractiveRebase" ) ;
642
640
643
- menu . Items . Add ( checkoutCommit ) ;
644
- menu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
645
- menu . Items . Add ( interactiveRebase ) ;
641
+ var manually = new MenuItem ( ) ;
642
+ manually . Header = App . Text ( "CommitCM.InteractiveRebase.Manually" , current . Name , target ) ;
643
+ manually . Click += async ( _ , e ) =>
644
+ {
645
+ await App . ShowDialog ( new InteractiveRebase ( _repo , commit ) ) ;
646
+ e . Handled = true ;
647
+ } ;
648
+
649
+ var reword = new MenuItem ( ) ;
650
+ reword . Header = App . Text ( "CommitCM.InteractiveRebase.Reword" ) ;
651
+ reword . Click += async ( _ , e ) =>
652
+ {
653
+ var prefill = new InteractiveRebasePrefill ( commit . SHA , Models . InteractiveRebaseAction . Reword ) ;
654
+ var on = await new Commands . QuerySingleCommit ( _repo . FullPath , $ "{ commit . SHA } ~") . GetResultAsync ( ) ;
655
+ await App . ShowDialog ( new InteractiveRebase ( _repo , on , prefill ) ) ;
656
+ e . Handled = true ;
657
+ } ;
658
+
659
+ var edit = new MenuItem ( ) ;
660
+ edit . Header = App . Text ( "CommitCM.InteractiveRebase.Edit" ) ;
661
+ edit . Click += async ( _ , e ) =>
662
+ {
663
+ var prefill = new InteractiveRebasePrefill ( commit . SHA , Models . InteractiveRebaseAction . Edit ) ;
664
+ var on = await new Commands . QuerySingleCommit ( _repo . FullPath , $ "{ commit . SHA } ~") . GetResultAsync ( ) ;
665
+ await App . ShowDialog ( new InteractiveRebase ( _repo , on , prefill ) ) ;
666
+ e . Handled = true ;
667
+ } ;
668
+
669
+ var squash = new MenuItem ( ) ;
670
+ squash . Header = App . Text ( "CommitCM.InteractiveRebase.Squash" ) ;
671
+ squash . Click += async ( _ , e ) =>
672
+ {
673
+ var prefill = new InteractiveRebasePrefill ( commit . SHA , Models . InteractiveRebaseAction . Squash ) ;
674
+ var on = await new Commands . QuerySingleCommit ( _repo . FullPath , $ "{ commit . SHA } ~~") . GetResultAsync ( ) ;
675
+ if ( on != null )
676
+ await App . ShowDialog ( new InteractiveRebase ( _repo , on , prefill ) ) ;
677
+ else
678
+ App . RaiseException ( _repo . FullPath , $ "Can not squash current commit into parent!") ;
679
+
680
+ e . Handled = true ;
681
+ } ;
682
+
683
+ var fixup = new MenuItem ( ) ;
684
+ fixup . Header = App . Text ( "CommitCM.InteractiveRebase.Fixup" ) ;
685
+ fixup . Click += async ( _ , e ) =>
686
+ {
687
+ var prefill = new InteractiveRebasePrefill ( commit . SHA , Models . InteractiveRebaseAction . Fixup ) ;
688
+ var on = await new Commands . QuerySingleCommit ( _repo . FullPath , $ "{ commit . SHA } ~~") . GetResultAsync ( ) ;
689
+ if ( on != null )
690
+ await App . ShowDialog ( new InteractiveRebase ( _repo , on , prefill ) ) ;
691
+ else
692
+ App . RaiseException ( _repo . FullPath , $ "Can not fixup current commit into parent!") ;
693
+
694
+ e . Handled = true ;
695
+ } ;
696
+
697
+ var drop = new MenuItem ( ) ;
698
+ drop . Header = App . Text ( "CommitCM.InteractiveRebase.Drop" ) ;
699
+ drop . Click += async ( _ , e ) =>
700
+ {
701
+ var prefill = new InteractiveRebasePrefill ( commit . SHA , Models . InteractiveRebaseAction . Drop ) ;
702
+ var on = await new Commands . QuerySingleCommit ( _repo . FullPath , $ "{ commit . SHA } ~") . GetResultAsync ( ) ;
703
+ await App . ShowDialog ( new InteractiveRebase ( _repo , on , prefill ) ) ;
704
+ e . Handled = true ;
705
+ } ;
706
+
707
+ interactiveRebase . Items . Add ( manually ) ;
708
+ interactiveRebase . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
709
+ interactiveRebase . Items . Add ( reword ) ;
710
+ interactiveRebase . Items . Add ( edit ) ;
711
+ interactiveRebase . Items . Add ( squash ) ;
712
+ interactiveRebase . Items . Add ( fixup ) ;
713
+ interactiveRebase . Items . Add ( drop ) ;
714
+
715
+ menu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
716
+ menu . Items . Add ( interactiveRebase ) ;
717
+ }
718
+ else
719
+ {
720
+ var interactiveRebase = new MenuItem ( ) ;
721
+ interactiveRebase . Header = App . Text ( "CommitCM.InteractiveRebase.Manually" , current . Name , target ) ;
722
+ interactiveRebase . Icon = App . CreateMenuIcon ( "Icons.InteractiveRebase" ) ;
723
+ interactiveRebase . Click += async ( _ , e ) =>
724
+ {
725
+ await App . ShowDialog ( new InteractiveRebase ( _repo , commit ) ) ;
726
+ e . Handled = true ;
727
+ } ;
728
+
729
+ menu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
730
+ menu . Items . Add ( interactiveRebase ) ;
731
+ }
646
732
}
647
733
648
734
menu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
0 commit comments