@@ -849,15 +849,15 @@ private ContextMenu CreateContextMenuForSingleCommit(ViewModels.Repository repo,
849849 FillCurrentBranchMenu ( menu , repo , current ) ;
850850 break ;
851851 case Models . DecoratorType . LocalBranchHead :
852- var lb = repo . Branches . Find ( x => x . IsLocal && d . Name == x . Name ) ;
852+ var lb = repo . Branches . Find ( x => x . IsLocal && d . Name . Equals ( x . Name , StringComparison . Ordinal ) ) ;
853853 FillOtherLocalBranchMenu ( menu , repo , lb , current , commit . IsMerged ) ;
854854 break ;
855855 case Models . DecoratorType . RemoteBranchHead :
856- var rb = repo . Branches . Find ( x => ! x . IsLocal && d . Name == x . FriendlyName ) ;
856+ var rb = repo . Branches . Find ( x => ! x . IsLocal && d . Name . Equals ( x . FriendlyName , StringComparison . Ordinal ) ) ;
857857 FillRemoteBranchMenu ( menu , repo , rb , current , commit . IsMerged ) ;
858858 break ;
859859 case Models . DecoratorType . Tag :
860- var t = repo . Tags . Find ( x => x . Name == d . Name ) ;
860+ var t = repo . Tags . Find ( x => d . Name . Equals ( x . Name , StringComparison . Ordinal ) ) ;
861861 if ( t != null )
862862 tags . Add ( t ) ;
863863 break ;
@@ -903,7 +903,7 @@ private ContextMenu CreateContextMenuForSingleCommit(ViewModels.Repository repo,
903903 if ( ! repo . IsBare )
904904 {
905905 var target = commit . GetFriendlyName ( ) ;
906- if ( target . Length > 32 )
906+ if ( target . Length > 40 )
907907 target = commit . SHA . Substring ( 0 , 10 ) ;
908908
909909 if ( ! isHead )
@@ -933,20 +933,55 @@ private ContextMenu CreateContextMenuForSingleCommit(ViewModels.Repository repo,
933933 } ;
934934 menu . Items . Add ( rebase ) ;
935935
936- if ( ! commit . HasDecorators )
936+ var merge = new MenuItem ( ) ;
937+ merge . Header = App . Text ( "BranchCM.Merge" , target , current . Name ) ;
938+ merge . Icon = this . CreateMenuIcon ( "Icons.Merge" ) ;
939+ merge . Click += ( _ , e ) =>
937940 {
938- var merge = new MenuItem ( ) ;
939- merge . Header = App . Text ( "CommitCM.Merge" , current . Name ) ;
940- merge . Icon = this . CreateMenuIcon ( "Icons.Merge" ) ;
941- merge . Click += ( _ , e ) =>
941+ if ( repo . CanCreatePopup ( ) )
942942 {
943- if ( repo . CanCreatePopup ( ) )
943+ var found = false ;
944+ foreach ( var d in commit . Decorators )
945+ {
946+ if ( d . Type == Models . DecoratorType . LocalBranchHead )
947+ {
948+ var b = repo . Branches . Find ( x => x . IsLocal && x . Name . Equals ( d . Name , StringComparison . Ordinal ) ) ;
949+ if ( b != null )
950+ {
951+ found = true ;
952+ repo . ShowPopup ( new ViewModels . Merge ( repo , b , current . Name , false ) ) ;
953+ break ;
954+ }
955+ }
956+ else if ( d . Type == Models . DecoratorType . RemoteBranchHead )
957+ {
958+ var rb = repo . Branches . Find ( x => ! x . IsLocal && x . FriendlyName . Equals ( d . Name , StringComparison . Ordinal ) ) ;
959+ if ( rb != null )
960+ {
961+ found = true ;
962+ repo . ShowPopup ( new ViewModels . Merge ( repo , rb , current . Name , false ) ) ;
963+ break ;
964+ }
965+ }
966+ else if ( d . Type == Models . DecoratorType . Tag )
967+ {
968+ var t = repo . Tags . Find ( x => x . Name . Equals ( d . Name , StringComparison . Ordinal ) ) ;
969+ if ( t != null )
970+ {
971+ found = true ;
972+ repo . ShowPopup ( new ViewModels . Merge ( repo , t , current . Name ) ) ;
973+ break ;
974+ }
975+ }
976+ }
977+
978+ if ( ! found )
944979 repo . ShowPopup ( new ViewModels . Merge ( repo , commit , current . Name ) ) ;
980+ }
945981
946- e . Handled = true ;
947- } ;
948- menu . Items . Add ( merge ) ;
949- }
982+ e . Handled = true ;
983+ } ;
984+ menu . Items . Add ( merge ) ;
950985
951986 var cherryPick = new MenuItem ( ) ;
952987 cherryPick . Header = App . Text ( "CommitCM.CherryPick" ) ;
@@ -1405,18 +1440,6 @@ private void FillOtherLocalBranchMenu(ContextMenu menu, ViewModels.Repository re
14051440 e . Handled = true ;
14061441 } ;
14071442 submenu . Items . Add ( checkout ) ;
1408-
1409- var merge = new MenuItem ( ) ;
1410- merge . Header = App . Text ( "BranchCM.Merge" , branch . Name , current . Name ) ;
1411- merge . Icon = this . CreateMenuIcon ( "Icons.Merge" ) ;
1412- merge . IsEnabled = ! merged ;
1413- merge . Click += ( _ , e ) =>
1414- {
1415- if ( repo . CanCreatePopup ( ) )
1416- repo . ShowPopup ( new ViewModels . Merge ( repo , branch , current . Name , false ) ) ;
1417- e . Handled = true ;
1418- } ;
1419- submenu . Items . Add ( merge ) ;
14201443 }
14211444
14221445 var rename = new MenuItem ( ) ;
@@ -1513,19 +1536,6 @@ private void FillRemoteBranchMenu(ContextMenu menu, ViewModels.Repository repo,
15131536 } ;
15141537 submenu . Items . Add ( checkout ) ;
15151538
1516- var merge = new MenuItem ( ) ;
1517- merge . Header = App . Text ( "BranchCM.Merge" , name , current . Name ) ;
1518- merge . Icon = this . CreateMenuIcon ( "Icons.Merge" ) ;
1519- merge . IsEnabled = ! merged ;
1520- merge . Click += ( _ , e ) =>
1521- {
1522- if ( repo . CanCreatePopup ( ) )
1523- repo . ShowPopup ( new ViewModels . Merge ( repo , branch , current . Name , false ) ) ;
1524- e . Handled = true ;
1525- } ;
1526-
1527- submenu . Items . Add ( merge ) ;
1528-
15291539 var delete = new MenuItem ( ) ;
15301540 delete . Header = App . Text ( "BranchCM.Delete" , name ) ;
15311541 delete . Icon = this . CreateMenuIcon ( "Icons.Clear" ) ;
@@ -1588,20 +1598,6 @@ private void FillTagMenu(ContextMenu menu, ViewModels.Repository repo, Models.Ta
15881598 } ;
15891599 submenu . Items . Add ( push ) ;
15901600
1591- if ( ! repo . IsBare && ! merged )
1592- {
1593- var merge = new MenuItem ( ) ;
1594- merge . Header = App . Text ( "TagCM.Merge" , tag . Name , current . Name ) ;
1595- merge . Icon = this . CreateMenuIcon ( "Icons.Merge" ) ;
1596- merge . Click += ( _ , e ) =>
1597- {
1598- if ( repo . CanCreatePopup ( ) )
1599- repo . ShowPopup ( new ViewModels . Merge ( repo , tag , current . Name ) ) ;
1600- e . Handled = true ;
1601- } ;
1602- submenu . Items . Add ( merge ) ;
1603- }
1604-
16051601 var delete = new MenuItem ( ) ;
16061602 delete . Header = App . Text ( "TagCM.Delete" , tag . Name ) ;
16071603 delete . Icon = this . CreateMenuIcon ( "Icons.Clear" ) ;
0 commit comments