From 615b865358f32537bd4a7065a042de435e9413f3 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 11 Jun 2007 19:06:10 -0400 Subject: git-gui: Include 'war on whitespace' fixes from git.git Earlier git.git applied a large "war on whitespace" patch that was created using 'apply --whitespace=strip'. Unfortunately a few of git-gui's own files got caught in the mix and were also cleaned up. That was a6080a0a44d5ead84db3dabbbc80e82df838533d. This patch is needed in git-gui.git to reapply those exact same changes here, otherwise our version generator script is unable to obtain our version number from git-describe when we are hosted in the git.git repository. Signed-off-by: Shawn O. Pearce diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 25647c8..eee495a 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -78,5 +78,3 @@ test "$VN" = "$VC" || { echo >&2 "GITGUI_VERSION = $VN" echo "GITGUI_VERSION = $VN" >$GVF } - - diff --git a/lib/class.tcl b/lib/class.tcl index 88b0565..72494c1 100644 --- a/lib/class.tcl +++ b/lib/class.tcl @@ -151,4 +151,3 @@ auto_mkindex_parser::command constructor {name args} { [format { [list source [file join $dir %s]]} \ [file split $scriptFile]] "\n" } - -- cgit v0.10.2-6-g49f6 From b2f3bb1b66d9422aa5049f994c6e370a18d89759 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 11 Jun 2007 19:39:55 -0400 Subject: git-gui: Give amend precedence to HEAD over MERGE_MSG Apparently git-commit.sh (the command line commit user interface in core Git) always gives precedence to the prior commit's message if `commit --amend` is used and a $GIT_DIR/MERGE_MSG file also exists. We actually were doing the same here in git-gui, but the amended message got lost if $GIT_DIR/MERGE_MSG already existed because we started a rescan immediately after loading the prior commit's body into the edit buffer. When that happened the rescan found MERGE_MSG existed and replaced the commit message buffer with the contents of that file. This meant the user never saw us pick up the commit message of the prior commit we are about to replace. Johannes Sixt found this bug in git-gui by running `git cherry-pick -n $someid` and then trying to amend the prior commit in git-gui, thus combining the contents of $someid with the contents of HEAD, and reusing the commit message of HEAD, not $someid. With the recent changes to make cherry-pick use the $GIT_DIR/MERGE_MSG file Johannes saw git-gui pick up the message of $someid, not HEAD. Now we always use HEAD if we are amending. Signed-off-by: Shawn O. Pearce diff --git a/git-gui.sh b/git-gui.sh index dfb4b95..0aecf41 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -471,7 +471,8 @@ proc rescan {after {honor_trustmtime 1}} { if {![$ui_comm edit modified] || [string trim [$ui_comm get 0.0 end]] eq {}} { - if {[load_message GITGUI_MSG]} { + if {[string match amend* $commit_type]} { + } elseif {[load_message GITGUI_MSG]} { } elseif {[load_message MERGE_MSG]} { } elseif {[load_message SQUASH_MSG]} { } -- cgit v0.10.2-6-g49f6 From 39fa2a983d55b37759b99e67f9f1892879efb775 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Mon, 11 Jun 2007 23:52:43 -0400 Subject: git-gui: Save geometry before the window layout is damaged Because Tk does not assure us the order that it will process children in before it destroys the main toplevel we cannot safely save our geometry data during a "bind . " event binding. The geometry may have already changed as a result of a one or more children being removed from the layout. This was pointed out in gitk by Mark Levedahl, and patched over there by commit b6047c5a8166a71e01c6b63ebbb67c6894d95114. So we now also use "wm protocol . WM_DELETE_WINDOW" to detect when the window is closed by the user, and forward that close event to our main do_quit routine. Signed-off-by: Shawn O. Pearce diff --git a/git-gui.sh b/git-gui.sh index 0aecf41..97de595 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -1622,7 +1622,7 @@ unset browser doc_path doc_url # -- Standard bindings # -bind . {if {{%W} eq {.}} do_quit} +wm protocol . WM_DELETE_WINDOW do_quit bind all <$M1B-Key-q> do_quit bind all <$M1B-Key-Q> do_quit bind all <$M1B-Key-w> {destroy [winfo toplevel %W]} diff --git a/lib/blame.tcl b/lib/blame.tcl index 98687c7..139171d 100644 --- a/lib/blame.tcl +++ b/lib/blame.tcl @@ -289,7 +289,6 @@ constructor new {i_commit i_path} { bind $w_cviewer [list focus $w_cviewer] bind $top [list focus $top] - bind $w_file [list delete_this $this] grid configure $w.header -sticky ew grid configure $w.file_pane -sticky nsew diff --git a/lib/browser.tcl b/lib/browser.tcl index fd86b11..3d6341b 100644 --- a/lib/browser.tcl +++ b/lib/browser.tcl @@ -70,7 +70,6 @@ constructor new {commit} { bind $w_list break bind $w_list [list focus $w_list] - bind $w_list [list delete_this $this] set w $w_list _ls $this $browser_commit return $this diff --git a/lib/class.tcl b/lib/class.tcl index 72494c1..9d298d0 100644 --- a/lib/class.tcl +++ b/lib/class.tcl @@ -120,10 +120,21 @@ proc delete_this {{t {}}} { if {[namespace exists $t]} {namespace delete $t} } -proc make_toplevel {t w} { - upvar $t top $w pfx +proc make_toplevel {t w args} { + upvar $t top $w pfx this this + + if {[llength $args] % 2} { + error "make_toplevel topvar winvar {options}" + } + set autodelete 1 + foreach {name value} $args { + switch -exact -- $name { + -autodelete {set autodelete $value} + default {error "unsupported option $name"} + } + } + if {[winfo ismapped .]} { - upvar this this regsub -all {::} $this {__} w set top .$w set pfx $top @@ -132,6 +143,13 @@ proc make_toplevel {t w} { set top . set pfx {} } + + if {$autodelete} { + wm protocol $top WM_DELETE_WINDOW " + [list delete_this $this] + [list destroy $top] + " + } } diff --git a/lib/console.tcl b/lib/console.tcl index 8c112f3..ce25d92 100644 --- a/lib/console.tcl +++ b/lib/console.tcl @@ -17,7 +17,7 @@ constructor new {short_title long_title} { method _init {} { global M1B - make_toplevel top w + make_toplevel top w -autodelete 0 wm title $top "[appname] ([reponame]): $t_short" set console_cr 1.0 diff --git a/lib/merge.tcl b/lib/merge.tcl index 24ed24b..ae0389d 100644 --- a/lib/merge.tcl +++ b/lib/merge.tcl @@ -125,7 +125,8 @@ Please select fewer branches. To merge more than 15 branches, merge the branche set cons [console::new "Merge" $msg] console::exec $cons $cmd \ [namespace code [list _finish $revcnt $cons]] - bind $w {} + + wm protocol $w WM_DELETE_WINDOW {} destroy $w } @@ -250,7 +251,7 @@ proc dialog {} { bind $w <$M1B-Key-Return> $_start bind $w "grab $w; focus $w.source.l" bind $w "unlock_index;destroy $w" - bind $w unlock_index + wm protocol $w WM_DELETE_WINDOW "unlock_index;destroy $w" wm title $w "[appname] ([reponame]): Merge" tkwait window $w } -- cgit v0.10.2-6-g49f6