On 23 March 2011 20:31, Heiko Voigt <hvoigt@xxxxxxxxxx> wrote: > Make use of the new environment variable GIT_ASK_YESNO to support the > recently implemented fallback in case unlink, rename or rmdir fail for > files in use on Windows. The added dialog will present a yes/no question > to the the user which will currently be used by the windows compat layer > to let the user retry a failed file operation. > > Signed-off-by: Heiko Voigt <hvoigt@xxxxxxxxxx> > --- > > Since the infrastructure for this is now in Junio's master lets also add > it to git-gui. This patch contains a fix of the question helper which > correctly wraps long lines in questions. I also disabled the > resizeability of the dialog because the text would not be rewrapped > anyway. > > Cheers Heiko > > ÂMakefile         Â|  Â2 + > Âgit-gui.sh        Â|  Â3 ++ > Âgit-gui/git-gui--askyesno |  52 +++++++++++++++++++++++++++++++++++++++++++++ > Â3 files changed, 57 insertions(+), 0 deletions(-) > Âcreate mode 100755 git-gui/git-gui--askyesno > > diff --git a/Makefile b/Makefile > index e22ba5c..d50b455 100644 > --- a/Makefile > +++ b/Makefile > @@ -290,6 +290,7 @@ install: all >    Â$(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL_D1) >    Â$(QUIET)$(INSTALL_X0)git-gui $(INSTALL_X1) '$(DESTDIR_SQ)$(gitexecdir_SQ)' >    Â$(QUIET)$(INSTALL_X0)git-gui--askpass $(INSTALL_X1) '$(DESTDIR_SQ)$(gitexecdir_SQ)' > +    $(QUIET)$(INSTALL_X0)git-gui--askyesno $(INSTALL_X1) '$(DESTDIR_SQ)$(gitexecdir_SQ)' >    Â$(QUIET)$(foreach p,$(GITGUI_BUILT_INS), $(INSTALL_L0)'$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' $(INSTALL_L1)'$(DESTDIR_SQ)$(gitexecdir_SQ)/git-gui' $(INSTALL_L2)'$(DESTDIR_SQ)$(gitexecdir_SQ)/$p' $(INSTALL_L3) &&) true > Âifdef GITGUI_WINDOWS_WRAPPER >    Â$(QUIET)$(INSTALL_R0)git-gui.tcl $(INSTALL_R1) '$(DESTDIR_SQ)$(gitexecdir_SQ)' > @@ -308,6 +309,7 @@ uninstall: >    Â$(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(gitexecdir_SQ)' >    Â$(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(gitexecdir_SQ)'/git-gui $(REMOVE_F1) >    Â$(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(gitexecdir_SQ)'/git-gui--askpass $(REMOVE_F1) > +    $(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(gitexecdir_SQ)'/git-gui--askyesno $(REMOVE_F1) >    Â$(QUIET)$(foreach p,$(GITGUI_BUILT_INS), $(REMOVE_F0)'$(DESTDIR_SQ)$(gitexecdir_SQ)'/$p $(REMOVE_F1) &&) true > Âifdef GITGUI_WINDOWS_WRAPPER >    Â$(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(gitexecdir_SQ)'/git-gui.tcl $(REMOVE_F1) > diff --git a/git-gui.sh b/git-gui.sh > index d96df63..049bc70 100755 > --- a/git-gui.sh > +++ b/git-gui.sh > @@ -1158,6 +1158,9 @@ set have_tk85 [expr {[package vcompare $tk_version "8.5"] >= 0}] > Âif {![info exists env(SSH_ASKPASS)]} { >    Âset env(SSH_ASKPASS) [gitexec git-gui--askpass] > Â} > +if {![info exists env(GIT_ASK_YESNO)]} { > +    set env(GIT_ASK_YESNO) [gitexec git-gui--askyesno] > +} > > Â###################################################################### > Â## > diff --git a/git-gui/git-gui--askyesno b/git-gui/git-gui--askyesno > new file mode 100755 > index 0000000..7604610 > --- /dev/null > +++ b/git-gui/git-gui--askyesno > @@ -0,0 +1,52 @@ > +#!/bin/sh > +# Tcl ignores the next line -*- tcl -*- \ > +exec wish "$0" -- "$@" > + > +# This is an implementation of a simple yes no dialog > +# which is injected into the git commandline by git gui > +# in case a yesno question needs to be answered. > + > +set NS {} > +set use_ttk [package vsatisfies [package provide Tk] 8.5] > +if {$use_ttk} { > +    set NS ttk > +} > + > +if {$argc < 1} { > +    puts stderr "Usage: $argv0 <question>" > +    exit 1 > +} else { > +    set prompt [join $argv " "] > +} > + > +${NS}::frame .t > +${NS}::label .t.m -text $prompt -justify left -width 40 > +pack .t.m -side top -fill x -padx 20 -pady 20 -expand 1 > +pack .t -side top -fill x -ipadx 20 -ipady 20 -expand 1 > +bind .t.m <Map> {.t.m configure -wraplength [winfo width .t.m]} > + > +${NS}::frame .b > +${NS}::frame .b.left -width 200 > +${NS}::button .b.yes -text Yes -command yes > +${NS}::button .b.no Â-text No Â-command no > + > + > +pack .b.left -side left -expand 1 -fill x > +pack .b.yes -side left -expand 1 > +pack .b.no -side right -expand 1 -ipadx 5 > +pack .b -side bottom -fill x -ipadx 20 -ipady 15 > + > +bind . <Key-Return> {exit 0} > +bind . <Key-Escape> {exit 1} > + > +proc no {} { > +    exit 1 > +} > + > +proc yes {} { > +    exit 0 > +} > + > +wm title . "Question?" > +wm resizable . 0 0 > +tk::PlaceWindow . > -- > 1.7.4.rc3.9.gbf3bd > > Why not use the built-in message box function? This will then provide the correct system defined look (or a suitable dialog on unix). package require Tk proc main {message {title "Question?"}} { wm withdraw . set r [tk_messageBox -icon question -type yesno -title $title \ -message $message] exit [expr {$r eq "yes" ? 0 : 1}] } eval [linsert $argv 0 main] would seem to be equivalent. I put up an image of the two (standard messagebox on top) at http://www.patthoyts.tk/screenshots/happy.png Pat. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html