@@ -17,12 +17,15 @@ public void Open()
1717 var tool = Native . OS . GetDiffMergeTool ( true ) ;
1818 if ( tool == null )
1919 {
20- App . RaiseException ( Context , "Invalid merge tool in preference setting!" ) ;
20+ App . RaiseException ( Context , "Invalid diff/ merge tool in preference setting!" ) ;
2121 return ;
2222 }
2323
2424 if ( string . IsNullOrEmpty ( tool . Cmd ) )
2525 {
26+ if ( ! CheckGitConfiguration ( ) )
27+ return ;
28+
2629 Args = $ "difftool -g --no-prompt { _option } ";
2730 }
2831 else
@@ -41,6 +44,34 @@ public void Open()
4144 }
4245 }
4346
47+ private bool CheckGitConfiguration ( )
48+ {
49+ var config = new Config ( WorkingDirectory ) . ReadAll ( ) ;
50+ if ( config . TryGetValue ( "diff.guitool" , out var guiTool ) )
51+ return CheckCLIBasedTool ( guiTool ) ;
52+ if ( config . TryGetValue ( "merge.guitool" , out var mergeGuiTool ) )
53+ return CheckCLIBasedTool ( mergeGuiTool ) ;
54+ if ( config . TryGetValue ( "diff.tool" , out var diffTool ) )
55+ return CheckCLIBasedTool ( diffTool ) ;
56+ if ( config . TryGetValue ( "merge.tool" , out var mergeTool ) )
57+ return CheckCLIBasedTool ( mergeTool ) ;
58+
59+ App . RaiseException ( Context , "Missing git configuration: diff.guitool" ) ;
60+ return false ;
61+ }
62+
63+ private bool CheckCLIBasedTool ( string tool )
64+ {
65+ if ( tool . StartsWith ( "vimdiff" , StringComparison . Ordinal ) ||
66+ tool . StartsWith ( "nvimdiff" , StringComparison . Ordinal ) )
67+ {
68+ App . RaiseException ( Context , $ "CLI based diff tool \" { tool } \" is not supported by this app!") ;
69+ return false ;
70+ }
71+
72+ return true ;
73+ }
74+
4475 private Models . DiffOption _option ;
4576 }
4677}
0 commit comments