summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Paul Mackerras <paulus@samba.org>2006-04-06 10:18:23 +1000
committerLibravatar Paul Mackerras <paulus@samba.org>2006-04-06 10:18:23 +1000
commitd94f8cd6adc746b850aad421e30d5f90f7f11ee4 (patch)
tree5bce78c3fd2c33ea867afdcd3c21693eb67f6230
parentgitk: Implement multiple views (diff)
downloadtgif-d94f8cd6adc746b850aad421e30d5f90f7f11ee4.tar.xz
gitk: Make File->Update work properly again
If a view is selected it will now just update that view. Also fixed a few other things - if you switch away from a view while gitk is still reading it in, then switch back, gitk will re-read it from scratch. We now re-read the references when switching views. If something was selected before a view change, and we need to read in the new view, we now select the previously-selected commit when we come across it. Fixed a bug in setting of rowrangelist plus a couple of other minor things. Signed-off-by: Paul Mackerras <paulus@samba.org>
-rwxr-xr-xgitk59
1 files changed, 30 insertions, 29 deletions
diff --git a/gitk b/gitk
index 961b582a4d..c6649a56d4 100755
--- a/gitk
+++ b/gitk
@@ -22,8 +22,8 @@ proc parse_args {rargs} {
set parsed_args {}
set cmdline_files {}
if {[catch {
- set parse_args [concat --default HEAD $rargs]
- set args [split [eval exec git-rev-parse $parse_args] "\n"]
+ set args [concat --default HEAD $rargs]
+ set args [split [eval exec git-rev-parse $args] "\n"]
set i 0
foreach arg $args {
if {![regexp {^[0-9a-f]{40}$} $arg]} {
@@ -217,17 +217,13 @@ proc readcommit {id} {
}
proc updatecommits {} {
- global parsed_args
+ global viewdata curview revtreeargs
- unselectline
- stopfindproc
- foreach v {matchinglines treediffs currentid} {
- global $v
- catch {unset $v}
- }
- clear_display
- readrefs
- getcommits $parsed_args
+ set n $curview
+ set curview -1
+ catch {unset viewdata($n)}
+ parse_args $revtreeargs
+ showview $n
}
proc parsecommit {id contents listed} {
@@ -354,7 +350,7 @@ proc error_popup msg {
tkwait window $w
}
-proc makewindow {rargs} {
+proc makewindow {} {
global canv canv2 canv3 linespc charspc ctext cflist textfont
global findtype findtypemenu findloc findstring fstring geometry
global entries sha1entry sha1string sha1but
@@ -817,13 +813,6 @@ proc delview {} {
showview 0
}
-proc saveview {} {
- global curview viewdata
- global displayorder parentlist childlist rowidlist rowoffsets
- global rowrangelist commitlisted
-
-}
-
proc showview {n} {
global curview viewdata viewfiles
global displayorder parentlist childlist rowidlist rowoffsets
@@ -832,6 +821,7 @@ proc showview {n} {
global selectedline currentid canv canvy0
global matchinglines treediffs
global parsed_args
+ global pending_select phase
if {$n == $curview} return
set selid {}
@@ -850,7 +840,7 @@ proc showview {n} {
}
unselectline
stopfindproc
- if {![info exists viewdata($curview)]} {
+ if {$curview >= 0 && $phase eq {} && ![info exists viewdata($curview)]} {
set viewdata($curview) \
[list $displayorder $parentlist $childlist $rowidlist \
$rowoffsets $rowrangelist $commitlisted]
@@ -858,6 +848,7 @@ proc showview {n} {
catch {unset matchinglines}
catch {unset treediffs}
clear_display
+ readrefs
set curview $n
.bar.view entryconf 2 -state [expr {$n == 0? "disabled": "normal"}]
@@ -867,6 +858,7 @@ proc showview {n} {
if {$viewfiles($n) ne {}} {
set args [concat $args "--" $viewfiles($n)]
}
+ set pending_select $selid
getcommits $args
return
}
@@ -1036,7 +1028,7 @@ proc initlayout {} {
set commitlisted {}
set parentlist {}
set childlist {}
- set rowrangelist {{}}
+ set rowrangelist {}
catch {unset children}
set nextcolor 0
set rowidlist {{}}
@@ -1099,7 +1091,7 @@ proc layoutmore {} {
}
proc showstuff {canshow} {
- global numcommits
+ global numcommits commitrow pending_select
global linesegends idrowranges idrangedrawn
if {$numcommits == 0} {
@@ -1113,6 +1105,7 @@ proc showstuff {canshow} {
set rows [visiblerows]
set r0 [lindex $rows 0]
set r1 [lindex $rows 1]
+ set selrow -1
for {set r $row} {$r < $canshow} {incr r} {
if {[info exists linesegends($r)]} {
foreach id $linesegends($r) {
@@ -1135,6 +1128,11 @@ proc showstuff {canshow} {
drawcmitrow $row
incr row
}
+ if {[info exists pending_select] &&
+ [info exists commitrow($pending_select)] &&
+ $commitrow($pending_select) < $numcommits} {
+ selectline $commitrow($pending_select) 1
+ }
}
proc layoutrows {row endrow last} {
@@ -1202,10 +1200,12 @@ proc layoutrows {row endrow last} {
} else {
unset idinlist($id)
}
+ set ranges {}
if {[info exists idrowranges($id)]} {
lappend idrowranges($id) $row
- lappend rowrangelist $idrowranges($id)
+ set ranges $idrowranges($id)
}
+ lappend rowrangelist $ranges
incr row
set offs [ntimes [llength $idlist] 0]
set l [llength $newolds]
@@ -1732,8 +1732,8 @@ proc findcrossings {id} {
foreach {s e} [rowranges $id] {
if {$e >= $numcommits} {
set e [expr {$numcommits - 1}]
- if {$e < $s} continue
}
+ if {$e <= $s} continue
set x [lsearch -exact [lindex $rowidlist $e] $id]
if {$x < 0} {
puts "findcrossings: oops, no [shortids $id] in row $e"
@@ -2360,7 +2360,7 @@ proc donefilediff {} {
}
}
-proc findcont {id} {
+proc findcont {} {
global findid treediffs parentlist
global ffileline findstartline finddidsel
global displayorder numcommits matchinglines findinprogress
@@ -2493,8 +2493,9 @@ proc selectline {l isnew} {
global canvy0 linespc parentlist childlist
global cflist currentid sha1entry
global commentend idtags linknum
- global mergemax numcommits
+ global mergemax numcommits pending_select
+ catch {unset pending_select}
$canv delete hover
normalline
if {$l < 0 || $l >= $numcommits} return
@@ -2784,7 +2785,7 @@ proc getmergediffline {mdf id np} {
incr nextupdate 100
fileevent $mdf readable {}
update
- fileevent $mdf readable [list getmergediffline $mdf $id]
+ fileevent $mdf readable [list getmergediffline $mdf $id $np]
}
}
@@ -4027,7 +4028,7 @@ set stopped 0
set stuffsaved 0
set patchnum 0
setcoords
-makewindow $revtreeargs
+makewindow
readrefs
parse_args $revtreeargs
set args $parsed_args