@@ -17,12 +17,15 @@ public void Open()
17
17
var tool = Native . OS . GetDiffMergeTool ( true ) ;
18
18
if ( tool == null )
19
19
{
20
- App . RaiseException ( Context , "Invalid merge tool in preference setting!" ) ;
20
+ App . RaiseException ( Context , "Invalid diff/ merge tool in preference setting!" ) ;
21
21
return ;
22
22
}
23
23
24
24
if ( string . IsNullOrEmpty ( tool . Cmd ) )
25
25
{
26
+ if ( ! CheckGitConfiguration ( ) )
27
+ return ;
28
+
26
29
Args = $ "difftool -g --no-prompt { _option } ";
27
30
}
28
31
else
@@ -41,6 +44,34 @@ public void Open()
41
44
}
42
45
}
43
46
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
+
44
75
private Models . DiffOption _option ;
45
76
}
46
77
}
0 commit comments