@matheusbsbs / matheus-bagliano / commits / de83f8cc4c
Fork 0

git-gui: Catch and display aspell startup failures to the user

If we feed a bad dictionary name to aspell on startup it may appear to start (as Tcl found the executable in our $PATH) but it fails to give us the version string. In such a case the close of the pipe will report the exit status of the process (failure) and that is an error in Tcl. We now trap the subprocess failure and display the stderr message from it, letting the user know why the failure is happening. We then disable the spell checker, but keep our object instance so the user can alter their preferred dictionary through the options dialog, and possibly restart the spell checker. I was also originally wrong to use "error" here for the display of the problem to the user. I meant to use "error_popup", which will open a message box and show the failure in a GUI context, rather than killing git-gui and showing the message on the console. Noticed by Ilari on #git. Signed-off-by: Shawn O. Pearce <spearce@spearce.org>

Shawn O. Pearce committed Feb 20, 2008 at 22:34 UTC de83f8cc4cd97c52a0b8a1b1ff4e949129e3a947
1 file changed +17 -4
lib/spellcheck.tcl
+17 -4
@@ -35,12 +35,25 @@ method _connect {pipe_fd} {
35 -translation lf
36
37 if {[gets $pipe_fd s_version] <= 0} {
38 - close $pipe_fd
39 - error [mc "Spell checker sliently failed on startup"]
38 + if {[catch {close $pipe_fd} err]} {
39 + regsub -nocase {^Error: } $err {} err
40 + if {$s_fd eq {}} {
41 + error_popup [strcat [mc "Spell checking is unavailable"] ":\n\n$err"]
42 + } else {
43 + error_popup [strcat \
44 + [mc "Invalid spell checking configuration"] \
45 + ":\n\n$err\n\n" \
46 + [mc "Reverting dictionary to %s." $s_lang]]
47 + }
48 + } else {
49 + error_popup [mc "Spell checker sliently failed on startup"]
50 + }
51 + return
52 }
53 if {{@(#) } ne [string range $s_version 0 4]} {
42 - close $pipe_fd
43 - error [strcat [mc "Unrecognized spell checker"] ": $s_version"]
54 + catch {close $pipe_fd}
55 + error_popup [strcat [mc "Unrecognized spell checker"] ":\n\n$s_version"]
56 + return
57 }
58 set s_version [string range $s_version 5 end]
59