summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPat Thoyts <patthoyts@users.sourceforge.net>2010-08-18 23:19:24 +0100
committerPat Thoyts <patthoyts@users.sourceforge.net>2010-08-18 23:19:24 +0100
commitaef0b48ef05b5980d2f3a1e4bc14b70d9688d59b (patch)
treea5c1de6b71fda426ac7e2cd220a8364e99ac8d92
parentd5257fb3c1decc1eff296a0ae2afbcaee28d0f2c (diff)
downloadgit-aef0b48ef05b5980d2f3a1e4bc14b70d9688d59b.tar.gz
git-gui: ensure correct application termination in git-gui--askpass
With Tk 8.5 the askpass utility can hang waiting for the wish shell implicit event loop to exit. This patch uses an explicit event loop to ensure correct application termination. Reported-by: Anders Kaseorg <andersk@mit.edu> Tested-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Pat Thoyts <patthoyts@users.sourceforge.net>
-rwxr-xr-xgit-gui--askpass19
1 files changed, 13 insertions, 6 deletions
diff --git a/git-gui--askpass b/git-gui--askpass
index 12e117ecb1..4277f30c41 100755
--- a/git-gui--askpass
+++ b/git-gui--askpass
@@ -5,6 +5,8 @@ exec wish "$0" -- "$@"
# This is a trivial implementation of an SSH_ASKPASS handler.
# Git-gui uses this script if none are already configured.
+package require Tk
+
set answer {}
set yesno 0
set rc 255
@@ -30,16 +32,20 @@ if {!$yesno} {
frame .b
button .b.ok -text OK -command finish
-button .b.cancel -text Cancel -command {destroy .}
+button .b.cancel -text Cancel -command cancel
pack .b.ok -side left -expand 1
pack .b.cancel -side right -expand 1
pack .b -side bottom -fill x -padx 10 -pady 10
bind . <Visibility> {focus -force .e}
-bind . <Key-Return> finish
-bind . <Key-Escape> {destroy .}
-bind . <Destroy> {exit $rc}
+bind . <Key-Return> [list .b.ok invoke]
+bind . <Key-Escape> [list .b.cancel invoke]
+bind . <Destroy> {set rc $rc}
+
+proc cancel {} {
+ set ::rc 255
+}
proc finish {} {
if {$::yesno} {
@@ -50,10 +56,11 @@ proc finish {} {
}
}
- set ::rc 0
puts $::answer
- destroy .
+ set ::rc 0
}
wm title . "OpenSSH"
tk::PlaceWindow .
+vwait rc
+exit $rc