git-gui: Maintain the same file list for diff during refresh.
[gitweb.git] / git-gui.sh
index 7792eb4d7fdeb9ed646ecc2be87a00f0aeb9f6ee..b0a195ce8a16a4a9868b5f23376af1f44759f7e3 100755 (executable)
@@ -607,16 +607,13 @@ proc show_diff {path w {lno {}}} {
        if {$diff_active || ![lock_index read]} return
 
        clear_diff
-       if {$w eq {} || $lno == {}} {
-               foreach w [array names file_lists] {
-                       set lno [lsearch -sorted $file_lists($w) $path]
-                       if {$lno >= 0} {
-                               incr lno
-                               break
-                       }
+       if {$lno == {}} {
+               set lno [lsearch -sorted $file_lists($w) $path]
+               if {$lno >= 0} {
+                       incr lno
                }
        }
-       if {$w ne {} && $lno >= 1} {
+       if {$lno >= 1} {
                $w tag add in_diff $lno.0 [expr {$lno + 1}].0
        }
 
@@ -2271,6 +2268,13 @@ The rescan will be automatically started now.
                return
        }
 
+       # -- Don't do a pointless switch.
+       #
+       if {$current_branch eq $new_branch} {
+               unlock_index
+               return
+       }
+
        if {$repo_config(gui.trustmtime) eq {true}} {
                switch_branch_stage2 {} $new_branch
        } else {