Merge branch 'js/misc-git-gui-stuff' of ../git-gui
authorJunio C Hamano <gitster@pobox.com>
Tue, 9 Jan 2018 19:07:03 +0000 (11:07 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 9 Jan 2018 19:07:03 +0000 (11:07 -0800)
* 'js/misc-git-gui-stuff' of ../git-gui:
git-gui: allow Ctrl+T to toggle multiple paths
git-gui: fix exception when trying to stage with empty file list
git-gui: avoid exception upon Ctrl+T in an empty list
git gui: fix staging a second line to a 1-line file

git-gui/git-gui.sh
git-gui/lib/diff.tcl
index ed24aa9d2f16a4eb600fc3298ebeb931f9fb6c9c..91c00e6489305a56faed6d4e89150709ba7f2aeb 100755 (executable)
@@ -2501,9 +2501,28 @@ proc toggle_or_diff {mode w args} {
                set pos [split [$w index @$x,$y] .]
                foreach {lno col} $pos break
        } else {
+               if {$mode eq "toggle"} {
+                       if {$w eq $ui_workdir} {
+                               do_add_selection
+                               set last_clicked {}
+                               return
+                       }
+                       if {$w eq $ui_index} {
+                               do_unstage_selection
+                               set last_clicked {}
+                               return
+                       }
+               }
+
                if {$last_clicked ne {}} {
                        set lno [lindex $last_clicked 1]
                } else {
+                       if {![info exists file_lists]
+                               || ![info exists file_lists($w)]
+                               || [llength $file_lists($w)] == 0} {
+                               set last_clicked {}
+                               return
+                       }
                        set lno [expr {int([lindex [$w tag ranges in_diff] 0])}]
                }
                if {$mode eq "toggle"} {
@@ -2514,7 +2533,13 @@ proc toggle_or_diff {mode w args} {
                }
        }
 
-       set path [lindex $file_lists($w) [expr {$lno - 1}]]
+       if {![info exists file_lists]
+               || ![info exists file_lists($w)]
+               || [llength $file_lists($w)] < $lno - 1} {
+               set path {}
+       } else {
+               set path [lindex $file_lists($w) [expr {$lno - 1}]]
+       }
        if {$path eq {}} {
                set last_clicked {}
                return
index 4cae10a4c7f197aab9ae0bc145254a8d4a1bae50..68c4a6c7366f864bcfc500483c83b15860a2d185 100644 (file)
@@ -698,6 +698,7 @@ proc apply_range_or_line {x y} {
                set hh [$ui_diff get $i_l "$i_l + 1 lines"]
                set hh [lindex [split $hh ,] 0]
                set hln [lindex [split $hh -] 1]
+               set hln [lindex [split $hln " "] 0]
 
                # There is a special situation to take care of. Consider this
                # hunk: