This rearranges the code a little to eliminate some procedure calls
and reduce the number of globals accessed. It makes rowidlist and
rowoffsets lists rather than arrays, and removes the lineid array,
since $lineid($l) was the same as [lindex $displayorder $l], and the
latter is a little faster.
Signed-off-by: Paul Mackerras <paulus@samba.org>
set startmsecs [clock clicks -milliseconds]
set nextupdate [expr {$startmsecs + 100}]
set ncmupdate 1
set startmsecs [clock clicks -milliseconds]
set nextupdate [expr {$startmsecs + 100}]
set ncmupdate 1
set order "--topo-order"
if {$datemode} {
set order "--date-order"
set order "--topo-order"
if {$datemode} {
set order "--date-order"
proc getcommitlines {commfd} {
global parents cdate children nchildren
proc getcommitlines {commfd} {
global parents cdate children nchildren
- global commitlisted nextupdate
+ global commitlisted commitinfo phase nextupdate
global stopped leftover
global canv
global stopped leftover
global canv
+ global displayorder commitidx commitrow
set stuff [read $commfd]
if {$stuff == {}} {
set stuff [read $commfd]
if {$stuff == {}} {
while 1 {
set i [string first "\0" $stuff $start]
if {$i < 0} {
append leftover [string range $stuff $start end]
break
}
while 1 {
set i [string first "\0" $stuff $start]
if {$i < 0} {
append leftover [string range $stuff $start end]
break
}
- set cmit [string range $stuff $start [expr {$i - 1}]]
- set cmit "$leftover$cmit"
+ set cmit $leftover
+ append cmit [string range $stuff 0 [expr {$i - 1}]]
+ } else {
+ set cmit [string range $stuff $start [expr {$i - 1}]]
}
set start [expr {$i + 1}]
set j [string first "\n" $cmit]
}
set start [expr {$i + 1}]
set j [string first "\n" $cmit]
set ids [string range $cmit 0 [expr {$j - 1}]]
set ok 1
foreach id $ids {
set ids [string range $cmit 0 [expr {$j - 1}]]
set ok 1
foreach id $ids {
- if {![regexp {^[0-9a-f]{40}$} $id]} {
+ if {[string length $id] != 40} {
set olds [lrange $ids 1 end]
set cmit [string range $cmit [expr {$j + 1}] end]
set commitlisted($id) 1
set olds [lrange $ids 1 end]
set cmit [string range $cmit [expr {$j + 1}] end]
set commitlisted($id) 1
- parsecommit $id $cmit 1 [lrange $ids 1 end]
- drawcommit $id 1
+ updatechildren $id [lrange $ids 1 end]
+ if {![info exists commitinfo($id)]} {
+ parsecommit $id $cmit 1
+ }
+ set commitrow($id) $commitidx
+ incr commitidx
+ lappend displayorder $id
+ set gotsome 1
+ }
+ if {$gotsome} {
+ layoutmore
if {[clock clicks -milliseconds] >= $nextupdate} {
doupdate 1
}
if {[clock clicks -milliseconds] >= $nextupdate} {
doupdate 1
}
proc readcommit {id} {
if {[catch {set contents [exec git-cat-file commit $id]}]} return
proc readcommit {id} {
if {[catch {set contents [exec git-cat-file commit $id]}]} return
- parsecommit $id $contents 0 {}
+ updatechildren $id {}
+ parsecommit $id $contents 0
}
proc updatecommits {rargs} {
stopfindproc
foreach v {children nchildren parents nparents commitlisted
}
proc updatecommits {rargs} {
stopfindproc
foreach v {children nchildren parents nparents commitlisted
- commitinfo colormap selectedline matchinglines treediffs
- mergefilelist currentid rowtextx commitrow lineid
+ colormap selectedline matchinglines treediffs
+ mergefilelist currentid rowtextx commitrow
rowidlist rowoffsets idrowranges idrangedrawn iddrawn
linesegends crossings cornercrossings} {
global $v
rowidlist rowoffsets idrowranges idrangedrawn iddrawn
linesegends crossings cornercrossings} {
global $v
-proc parsecommit {id contents listed olds} {
+proc parsecommit {id contents listed} {
global commitinfo cdate
set inhdr 1
global commitinfo cdate
set inhdr 1
set audate {}
set comname {}
set comdate {}
set audate {}
set comname {}
set comdate {}
- updatechildren $id $olds
set hdrend [string first "\n\n" $contents]
if {$hdrend < 0} {
# should never happen...
set hdrend [string first "\n\n" $contents]
if {$hdrend < 0} {
# should never happen...
global rowidlist rowoffsets
set col -1
global rowidlist rowoffsets
set col -1
- set ids $rowidlist($row)
+ set ids [lindex $rowidlist $row]
foreach id $ids {
incr col
if {$id eq {}} continue
if {$col < [llength $ids] - 1 &&
[lsearch -exact -start [expr {$col+1}] $ids $id] >= 0} {
foreach id $ids {
incr col
if {$id eq {}} continue
if {$col < [llength $ids] - 1 &&
[lsearch -exact -start [expr {$col+1}] $ids $id] >= 0} {
- puts "oops: [shortids $id] repeated in row $row col $col: {[shortids $rowidlist($row)]}"
+ puts "oops: [shortids $id] repeated in row $row col $col: {[shortids [lindex $rowidlist $row]]}"
- set o [lindex $rowoffsets($row) $col]
+ set o [lindex $rowoffsets $row $col]
set y $row
set x $col
while {$o ne {}} {
incr y -1
incr x $o
set y $row
set x $col
while {$o ne {}} {
incr y -1
incr x $o
- if {[lindex $rowidlist($y) $x] != $id} {
+ if {[lindex $rowidlist $y $x] != $id} {
puts "oops: rowoffsets wrong at row [expr {$y+1}] col [expr {$x-$o}]"
puts " id=[shortids $id] check started at row $row"
for {set i $row} {$i >= $y} {incr i -1} {
puts "oops: rowoffsets wrong at row [expr {$y+1}] col [expr {$x-$o}]"
puts " id=[shortids $id] check started at row $row"
for {set i $row} {$i >= $y} {incr i -1} {
- puts " row $i ids={[shortids $rowidlist($i)]} offs={$rowoffsets($i)}"
+ puts " row $i ids={[shortids [lindex $rowidlist $i]]} offs={[lindex $rowoffsets $i]}"
}
break
}
if {!$full} break
}
break
}
if {!$full} break
- set o [lindex $rowoffsets($y) $x]
+ set o [lindex $rowoffsets $y $x]
for {set i 1} {$i < $uparrowlen && $y > 1} {incr i} {
incr y -1
incr x $z
for {set i 1} {$i < $uparrowlen && $y > 1} {incr i} {
incr y -1
incr x $z
- set off0 $rowoffsets($y)
+ set off0 [lindex $rowoffsets $y]
for {set x0 $x} {1} {incr x0} {
if {$x0 >= [llength $off0]} {
for {set x0 $x} {1} {incr x0} {
if {$x0 >= [llength $off0]} {
- set x0 [llength $rowoffsets([expr {$y-1}])]
+ set x0 [llength [lindex $rowoffsets [expr {$y-1}]]]
break
}
set z [lindex $off0 $x0]
break
}
set z [lindex $off0 $x0]
}
}
set z [expr {$x0 - $x}]
}
}
set z [expr {$x0 - $x}]
- set rowidlist($y) [linsert $rowidlist($y) $x $oid]
- set rowoffsets($y) [linsert $rowoffsets($y) $x $z]
+ lset rowidlist $y [linsert [lindex $rowidlist $y] $x $oid]
+ lset rowoffsets $y [linsert [lindex $rowoffsets $y] $x $z]
- set tmp [lreplace $rowoffsets($y) $x $x {}]
- set rowoffsets($y) [incrange $tmp [expr {$x+1}] -1]
+ set tmp [lreplace [lindex $rowoffsets $y] $x $x {}]
+ lset rowoffsets $y [incrange $tmp [expr {$x+1}] -1]
lappend idrowranges($oid) $y
}
lappend idrowranges($oid) $y
}
global rowidlist rowoffsets displayorder
global rowlaidout rowoptim
global idinlist rowchk
global rowidlist rowoffsets displayorder
global rowlaidout rowoptim
global idinlist rowchk
+ global commitidx numcommits
+ global nextcolor
- set rowidlist(0) {}
- set rowoffsets(0) {}
+ set commitidx 0
+ set numcommits 0
+ set displayorder {}
+ set nextcolor 0
+ set rowidlist {{}}
+ set rowoffsets {{}}
catch {unset idinlist}
catch {unset rowchk}
set rowlaidout 0
catch {unset idinlist}
catch {unset rowchk}
set rowlaidout 0
global canvy0 linespc
global linesegends idrowranges idrangedrawn
global canvy0 linespc
global linesegends idrowranges idrangedrawn
+ if {$numcommits == 0} {
+ global phase
+ set phase "incrdraw"
+ allcanvs delete all
+ }
set row $numcommits
set numcommits $canshow
allcanvs conf -scrollregion \
set row $numcommits
set numcommits $canshow
allcanvs conf -scrollregion \
global commitidx
global idinlist rowchk
global commitidx
global idinlist rowchk
- set idlist $rowidlist($row)
- set offs $rowoffsets($row)
+ set idlist [lindex $rowidlist $row]
+ set offs [lindex $rowoffsets $row]
while {$row < $endrow} {
set id [lindex $displayorder $row]
set oldolds {}
while {$row < $endrow} {
set id [lindex $displayorder $row]
set oldolds {}
set rowchk($id) [expr {$row + $r}]
}
}
set rowchk($id) [expr {$row + $r}]
}
}
- set rowidlist($row) $idlist
- set rowoffsets($row) $offs
+ lset rowidlist $row $idlist
+ lset rowoffsets $row $offs
}
set col [lsearch -exact $idlist $id]
if {$col < 0} {
set col [llength $idlist]
lappend idlist $id
}
set col [lsearch -exact $idlist $id]
if {$col < 0} {
set col [llength $idlist]
lappend idlist $id
- set rowidlist($row) $idlist
+ lset rowidlist $row $idlist
set z {}
if {$nchildren($id) > 0} {
set z {}
if {$nchildren($id) > 0} {
- set z [expr {[llength $rowidlist([expr {$row-1}])] - $col}]
+ set z [expr {[llength [lindex $rowidlist [expr {$row-1}]]] - $col}]
unset idinlist($id)
}
lappend offs $z
unset idinlist($id)
}
lappend offs $z
- set rowoffsets($row) $offs
+ lset rowoffsets $row $offs
if {$z ne {}} {
makeuparrow $id $col $row $z
}
if {$z ne {}} {
makeuparrow $id $col $row $z
}
makeuparrow $oid $col $row $o
incr col
}
makeuparrow $oid $col $row $o
incr col
}
- set rowidlist($row) $idlist
- set rowoffsets($row) $offs
+ lappend rowidlist $idlist
+ lappend rowoffsets $offs
}
return $row
}
proc addextraid {id row} {
}
return $row
}
proc addextraid {id row} {
- global displayorder commitrow lineid commitinfo nparents
+ global displayorder commitrow commitinfo nparents
global commitidx
incr commitidx
lappend displayorder $id
set commitrow($id) $row
global commitidx
incr commitidx
lappend displayorder $id
set commitrow($id) $row
readcommit $id
if {![info exists commitinfo($id)]} {
set commitinfo($id) {"No commit information available"}
readcommit $id
if {![info exists commitinfo($id)]} {
set commitinfo($id) {"No commit information available"}
global idrowranges linesegends
set row $commitidx
global idrowranges linesegends
set row $commitidx
- set idlist $rowidlist($row)
+ set idlist [lindex $rowidlist $row]
while {$idlist ne {}} {
set col [expr {[llength $idlist] - 1}]
set id [lindex $idlist $col]
while {$idlist ne {}} {
set col [expr {[llength $idlist] - 1}]
set id [lindex $idlist $col]
incr row
set offs [ntimes $col 0]
set idlist [lreplace $idlist $col $col]
incr row
set offs [ntimes $col 0]
set idlist [lreplace $idlist $col $col]
- set rowidlist($row) $idlist
- set rowoffsets($row) $offs
+ lappend rowidlist $idlist
+ lappend rowoffsets $offs
}
foreach id [array names idinlist] {
addextraid $id $row
}
foreach id [array names idinlist] {
addextraid $id $row
- set rowidlist($row) [list $id]
- set rowoffsets($row) 0
+ lset rowidlist $row [list $id]
+ lset rowoffsets $row 0
makeuparrow $id 0 $row 0
lappend linesegends($row) $id
lappend idrowranges($id) $row
incr row
makeuparrow $id 0 $row 0
lappend linesegends($row) $id
lappend idrowranges($id) $row
incr row
+ lappend rowidlist {}
+ lappend rowoffsets {}
global rowidlist rowoffsets
set pad [ntimes $npad {}]
global rowidlist rowoffsets
set pad [ntimes $npad {}]
- set rowidlist($row) [eval linsert \$rowidlist($row) $col $pad]
- set tmp [eval linsert \$rowoffsets($row) $col $pad]
- set rowoffsets($row) [incrange $tmp [expr {$col + $npad}] [expr {-$npad}]]
+ lset rowidlist $row [eval linsert [list [lindex $rowidlist $row]] $col $pad]
+ set tmp [eval linsert [list [lindex $rowoffsets $row]] $col $pad]
+ lset rowoffsets $row [incrange $tmp [expr {$col + $npad}] [expr {-$npad}]]
}
proc optimize_rows {row col endrow} {
global rowidlist rowoffsets idrowranges
for {} {$row < $endrow} {incr row} {
}
proc optimize_rows {row col endrow} {
global rowidlist rowoffsets idrowranges
for {} {$row < $endrow} {incr row} {
- set idlist $rowidlist($row)
- set offs $rowoffsets($row)
+ set idlist [lindex $rowidlist $row]
+ set offs [lindex $rowoffsets $row]
set haspad 0
for {} {$col < [llength $offs]} {incr col} {
if {[lindex $idlist $col] eq {}} {
set haspad 0
for {} {$col < [llength $offs]} {incr col} {
if {[lindex $idlist $col] eq {}} {
set isarrow 0
set x0 [expr {$col + $z}]
set y0 [expr {$row - 1}]
set isarrow 0
set x0 [expr {$col + $z}]
set y0 [expr {$row - 1}]
- set z0 [lindex $rowoffsets($y0) $x0]
+ set z0 [lindex $rowoffsets $y0 $x0]
if {$z0 eq {}} {
set id [lindex $idlist $col]
if {[info exists idrowranges($id)] &&
if {$z0 eq {}} {
set id [lindex $idlist $col]
if {[info exists idrowranges($id)] &&
}
set z [lindex $offs $col]
set x0 [expr {$col + $z}]
}
set z [lindex $offs $col]
set x0 [expr {$col + $z}]
- set z0 [lindex $rowoffsets($y0) $x0]
+ set z0 [lindex $rowoffsets $y0 $x0]
} elseif {$z > 1 || ($z > 0 && $isarrow)} {
set npad [expr {$z - 1 + $isarrow}]
set y1 [expr {$row + 1}]
} elseif {$z > 1 || ($z > 0 && $isarrow)} {
set npad [expr {$z - 1 + $isarrow}]
set y1 [expr {$row + 1}]
- set offs2 $rowoffsets($y1)
+ set offs2 [lindex $rowoffsets $y1]
set x1 -1
foreach z $offs2 {
incr x1
set x1 -1
foreach z $offs2 {
incr x1
if {$x1 + $z > $col} {
incr npad
}
if {$x1 + $z > $col} {
incr npad
}
- set rowoffsets($y1) [incrange $offs2 $x1 $npad]
+ lset rowoffsets $y1 [incrange $offs2 $x1 $npad]
break
}
set pad [ntimes $npad {}]
break
}
set pad [ntimes $npad {}]
}
if {[incr col] < [llength $idlist]} {
set y1 [expr {$row + 1}]
}
if {[incr col] < [llength $idlist]} {
set y1 [expr {$row + 1}]
- set offs2 $rowoffsets($y1)
+ set offs2 [lindex $rowoffsets $y1]
set x1 -1
foreach z $offs2 {
incr x1
if {$z eq {} || $x1 + $z < $col} continue
set x1 -1
foreach z $offs2 {
incr x1
if {$z eq {} || $x1 + $z < $col} continue
- set rowoffsets($y1) [incrange $offs2 $x1 1]
+ lset rowoffsets $y1 [incrange $offs2 $x1 1]
break
}
set idlist [linsert $idlist $col {}]
break
}
set idlist [linsert $idlist $col {}]
set offs [incrange $tmp $col -1]
}
}
set offs [incrange $tmp $col -1]
}
}
- set rowidlist($row) $idlist
- set rowoffsets($row) $offs
+ lset rowidlist $row $idlist
+ lset rowoffsets $row $offs
if {$startrow == $row} return
assigncolor $id
set coords {}
if {$startrow == $row} return
assigncolor $id
set coords {}
- set col [lsearch -exact $rowidlist($row) $id]
+ set col [lsearch -exact [lindex $rowidlist $row] $id]
if {$col < 0} {
puts "oops: drawline: id $id not on row $row"
return
if {$col < 0} {
puts "oops: drawline: id $id not on row $row"
return
set lasto {}
set ns 0
while {1} {
set lasto {}
set ns 0
while {1} {
- set o [lindex $rowoffsets($row) $col]
+ set o [lindex $rowoffsets $row $col]
if {$o eq {}} break
if {$o ne $lasto} {
# changing direction
if {$o eq {}} break
if {$o ne $lasto} {
# changing direction
}
proc drawparentlinks {id row col olds wid} {
}
proc drawparentlinks {id row col olds wid} {
- global rowoffsets rowidlist canv colormap lthickness
+ global rowidlist canv colormap lthickness
set row2 [expr {$row + 1}]
set x [xc $row $col]
set y [yc $row]
set y2 [yc $row2]
set row2 [expr {$row + 1}]
set x [xc $row $col]
set y [yc $row]
set y2 [yc $row2]
- set ids $rowidlist($row2)
- set offs $rowidlist($row2)
+ set ids [lindex $rowidlist $row2]
# rmx = right-most X coord used
set rmx 0
set wid [expr {$wid * $lthickness}]
# rmx = right-most X coord used
set rmx 0
set wid [expr {$wid * $lthickness}]
foreach child $children($id) {
if {[info exists iddrawn($child)]} {
set row $commitrow($child)
foreach child $children($id) {
if {[info exists iddrawn($child)]} {
set row $commitrow($child)
- set col [lsearch -exact $rowidlist($row) $child]
+ set col [lsearch -exact [lindex $rowidlist $row] $child]
if {$col >= 0} {
drawparentlinks $child $row $col [list $id] $wid
}
if {$col >= 0} {
drawparentlinks $child $row $col [list $id] $wid
}
-fill $ofill -outline black -width 1]
$canv raise $t
$canv bind $t <1> {selcanvline {} %x %y}
-fill $ofill -outline black -width 1]
$canv raise $t
$canv bind $t <1> {selcanvline {} %x %y}
- set xt [xc $row [llength $rowidlist($row)]]
+ set xt [xc $row [llength [lindex $rowidlist $row]]]
if {$xt < $rmx} {
set xt $rmx
}
if {$xt < $rmx} {
set xt $rmx
}
}
proc drawcmitrow {row} {
}
proc drawcmitrow {row} {
- global displayorder rowidlist rowoffsets
+ global displayorder rowidlist
global idrowranges idrangedrawn iddrawn
global commitinfo commitlisted parents numcommits
global idrowranges idrangedrawn iddrawn
global commitinfo commitlisted parents numcommits
- if {![info exists rowidlist($row)]} return
- foreach id $rowidlist($row) {
+ if {$row >= $numcommits} return
+ foreach id [lindex $rowidlist $row] {
if {![info exists idrowranges($id)]} continue
set i -1
foreach {s e} $idrowranges($id) {
if {![info exists idrowranges($id)]} continue
set i -1
foreach {s e} $idrowranges($id) {
set id [lindex $displayorder $row]
if {[info exists iddrawn($id)]} return
set id [lindex $displayorder $row]
if {[info exists iddrawn($id)]} return
- set col [lsearch -exact $rowidlist($row) $id]
+ set col [lsearch -exact [lindex $rowidlist $row] $id]
if {$col < 0} {
puts "oops, row $row id $id not in list"
return
if {$col < 0} {
puts "oops, row $row id $id not in list"
return
-proc initgraph {} {
- global numcommits nextcolor linespc
- global nchildren
-
- allcanvs delete all
- set nextcolor 0
- set numcommits 0
-}
-
proc bindline {t id} {
global canv
proc bindline {t id} {
global canv
for {} {$row < $endrow} {incr row} {
set id [lindex $displayorder $row]
for {} {$row < $endrow} {incr row} {
set id [lindex $displayorder $row]
- set i [lsearch -exact $rowidlist($row) $id]
+ set i [lsearch -exact [lindex $rowidlist $row] $id]
- set idlist $rowidlist([expr {$row+1}])
+ set idlist [lindex $rowidlist [expr {$row+1}]]
foreach p $parents($id) {
set j [lsearch -exact $idlist $p]
if {$j > 0} {
foreach p $parents($id) {
set j [lsearch -exact $idlist $p]
if {$j > 0} {
global rowidlist crossings cornercrossings
for {set i $lo} {[incr i] < $hi} {} {
global rowidlist crossings cornercrossings
for {set i $lo} {[incr i] < $hi} {} {
- set p [lindex $rowidlist($row) $i]
+ set p [lindex [lindex $rowidlist $row] $i]
if {$p == {}} continue
if {$i == $corner} {
if {![info exists cornercrossings($id)]
if {$p == {}} continue
if {$i == $corner} {
if {![info exists cornercrossings($id)]
-proc drawcommit {id reading} {
- global phase todo nchildren nextupdate
- global displayorder parents
- global commitrow commitidx lineid
-
- if {$phase != "incrdraw"} {
- set phase incrdraw
- set displayorder {}
- set todo {}
- set commitidx 0
- initlayout
- initgraph
- }
- set commitrow($id) $commitidx
- set lineid($commitidx) $id
- incr commitidx
- lappend displayorder $id
-}
-
proc finishcommits {} {
global phase
global canv mainfont ctext maincursor textcursor
proc finishcommits {} {
global phase
global canv mainfont ctext maincursor textcursor
proc dofind {} {
global findtype findloc findstring markedmatches commitinfo
proc dofind {} {
global findtype findloc findstring markedmatches commitinfo
- global numcommits lineid linehtag linentag linedtag
+ global numcommits displayorder linehtag linentag linedtag
global mainfont namefont canv canv2 canv3 selectedline
global matchinglines foundstring foundstrlen
global mainfont namefont canv canv2 canv3 selectedline
global matchinglines foundstring foundstrlen
set didsel 0
set fldtypes {Headline Author Date Committer CDate Comment}
for {set l 0} {$l < $numcommits} {incr l} {
set didsel 0
set fldtypes {Headline Author Date Committer CDate Comment}
for {set l 0} {$l < $numcommits} {incr l} {
+ set id [lindex $displayorder $l]
set info $commitinfo($id)
set doesmatch 0
foreach f $info ty $fldtypes {
set info $commitinfo($id)
set doesmatch 0
foreach f $info ty $fldtypes {
proc findpatches {} {
global findstring selectedline numcommits
global findprocpid findprocfile
proc findpatches {} {
global findstring selectedline numcommits
global findprocpid findprocfile
- global finddidsel ctext lineid findinprogress
+ global finddidsel ctext displayorder findinprogress
global findinsertpos
if {$numcommits == 0} return
global findinsertpos
if {$numcommits == 0} return
if {[incr l] >= $numcommits} {
set l 0
}
if {[incr l] >= $numcommits} {
set l 0
}
- append inputids $lineid($l) "\n"
+ append inputids [lindex $displayorder $l] "\n"
- global selectedline numcommits lineid ctext
+ global selectedline numcommits displayorder ctext
global ffileline finddidsel parents nparents
global findinprogress findstartline findinsertpos
global treediffs fdiffid fdiffsneeded fdiffpos
global ffileline finddidsel parents nparents
global findinprogress findstartline findinsertpos
global treediffs fdiffid fdiffsneeded fdiffpos
set diffsneeded {}
set fdiffsneeded {}
while 1 {
set diffsneeded {}
set fdiffsneeded {}
while 1 {
+ set id [lindex $displayorder $l]
if {$findmergefiles || $nparents($id) == 1} {
if {![info exists treediffs($id)]} {
append diffsneeded "$id\n"
if {$findmergefiles || $nparents($id) == 1} {
if {![info exists treediffs($id)]} {
append diffsneeded "$id\n"
set finddidsel 0
set findinsertpos end
set finddidsel 0
set findinsertpos end
+ set id [lindex $displayorder $l]
. config -cursor watch
settextcursor watch
set findinprogress 1
. config -cursor watch
settextcursor watch
set findinprogress 1
proc findcont {id} {
global findid treediffs parents nparents
global ffileline findstartline finddidsel
proc findcont {id} {
global findid treediffs parents nparents
global ffileline findstartline finddidsel
- global lineid numcommits matchinglines findinprogress
+ global displayorder numcommits matchinglines findinprogress
global findmergefiles
set l $ffileline
global findmergefiles
set l $ffileline
set l 0
}
if {$l == $findstartline} break
set l 0
}
if {$l == $findstartline} break
+ set id [lindex $displayorder $l]
}
stopfindproc
if {!$finddidsel} {
}
stopfindproc
if {!$finddidsel} {
proc selectline {l isnew} {
global canv canv2 canv3 ctext commitinfo selectedline
proc selectline {l isnew} {
global canv canv2 canv3 ctext commitinfo selectedline
- global lineid linehtag linentag linedtag
+ global displayorder linehtag linentag linedtag
global canvy0 linespc parents nparents children
global cflist currentid sha1entry
global commentend idtags linknum
global canvy0 linespc parents nparents children
global cflist currentid sha1entry
global commentend idtags linknum
+ global mergemax numcommits
$canv delete hover
normalline
$canv delete hover
normalline
- if {![info exists lineid($l)]} return
+ if {$l < 0 || $l >= $numcommits} return
set y [expr {$canvy0 + $l * $linespc}]
set ymax [lindex [$canv cget -scrollregion] 3]
set ytop [expr {$y - $linespc - 1}]
set y [expr {$canvy0 + $l * $linespc}]
set ymax [lindex [$canv cget -scrollregion] 3]
set ytop [expr {$y - $linespc - 1}]
+ set id [lindex $displayorder $l]
set currentid $id
$sha1entry delete 0 end
$sha1entry insert 0 $id
set currentid $id
$sha1entry delete 0 end
$sha1entry insert 0 $id
proc gotocommit {} {
global sha1string currentid commitrow tagids
proc gotocommit {} {
global sha1string currentid commitrow tagids
- global lineid numcommits
+ global displayorder numcommits
if {$sha1string == {}
|| ([info exists currentid] && $sha1string == $currentid)} return
if {$sha1string == {}
|| ([info exists currentid] && $sha1string == $currentid)} return
if {[regexp {^[0-9a-f]{4,39}$} $id]} {
set matches {}
for {set l 0} {$l < $numcommits} {incr l} {
if {[regexp {^[0-9a-f]{4,39}$} $id]} {
set matches {}
for {set l 0} {$l < $numcommits} {incr l} {
- if {[string match $id* $lineid($l)]} {
- lappend matches $lineid($l)
+ if {[string match $id* [lindex $displayorder $l]]} {
+ lappend matches [lindex $displayorder $l]
}
}
if {$matches ne {}} {
}
}
if {$matches ne {}} {
}
proc diffvssel {dirn} {
}
proc diffvssel {dirn} {
- global rowmenuid selectedline lineid
+ global rowmenuid selectedline displayorder
if {![info exists selectedline]} return
if {$dirn} {
if {![info exists selectedline]} return
if {$dirn} {
- set oldid $lineid($selectedline)
+ set oldid [lindex $displayorder $selectedline]
set newid $rowmenuid
} else {
set oldid $rowmenuid
set newid $rowmenuid
} else {
set oldid $rowmenuid
- set newid $lineid($selectedline)
+ set newid [lindex $displayorder $selectedline]
}
addtohistory [list doseldiff $oldid $newid]
doseldiff $oldid $newid
}
addtohistory [list doseldiff $oldid $newid]
doseldiff $oldid $newid