gitk: Fix a couple of bugs in the find function
authorPaul Mackerras <paulus@samba.org>
Wed, 2 Jan 2008 10:44:06 +0000 (21:44 +1100)
committerPaul Mackerras <paulus@samba.org>
Wed, 2 Jan 2008 10:44:06 +0000 (21:44 +1100)
First, findmore would sometimes get a Tcl error due to relying on
varcorder and vrownum having valid values for the rows being searched,
but they may not be valid unless update_arcrows is called, so this
makes findmore call update_arcrows if necessary.

Secondly, in the "touching paths" and "adding/removing string" modes,
findmore was treating fhighlights($row) == -1 as meaning the row
matches, whereas it only means that we haven't received an answer from
the external git diff-tree process about it yet.  This fixes it.

Signed-off-by: Paul Mackerras <paulus@samba.org>
gitk

diff --git a/gitk b/gitk
index bae6604292e8f49f13d8a606fa3e5922d6ed6ffb..cddd2189e507068e0d53d12624e0636f2a1efeeb 100755 (executable)
--- a/gitk
+++ b/gitk
@@ -4950,7 +4950,7 @@ proc findmore {} {
     global commitdata commitinfo numcommits findpattern findloc
     global findstartline findcurline findallowwrap
     global find_dirn gdttype fhighlights fprogcoord
-    global curview varcorder vrownum varccommits
+    global curview varcorder vrownum varccommits vrowmod
 
     if {![info exists find_dirn]} {
        return 0
@@ -4986,6 +4986,9 @@ proc findmore {} {
        set n 500
        set moretodo 1
     }
+    if {$l + ($find_dirn > 0? $n: 1) > $vrowmod($curview)} {
+       update_arcrows $curview
+    }
     set found 0
     set domore 1
     set ai [bsearch $vrownum($curview) $l]
@@ -5032,14 +5035,18 @@ proc findmore {} {
            }
            set id [lindex $ids [expr {$l - $arow}]]
            if {![info exists fhighlights($l)]} {
+               # this sets fhighlights($l) to -1
                askfilehighlight $l $id
+           }
+           if {$fhighlights($l) > 0} {
+               set found $domore
+               break
+           }
+           if {$fhighlights($l) < 0} {
                if {$domore} {
                    set domore 0
                    set findcurline [expr {$l - $find_dirn}]
                }
-           } elseif {$fhighlights($l)} {
-               set found $domore
-               break
            }
        }
     }