@@ -630,19 +630,105 @@ public ContextMenu CreateContextMenuForSelectedCommits(List<Models.Commit> selec
630630 _repo . ShowPopup ( new CheckoutCommit ( _repo , commit ) ) ;
631631 e . Handled = true ;
632632 } ;
633+ menu . Items . Add ( checkoutCommit ) ;
633634
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 )
638636 {
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" ) ;
642640
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+ }
646732 }
647733
648734 menu . Items . Add ( new MenuItem ( ) { Header = "-" } ) ;
0 commit comments