We display the files where the child differs from the first parent
first in black in the file list window, followed by the second parent
in blue, and so on using different colors for each parent (provided
you don't have more than 6 parents; if you do we cycle around).
$cflist delete 0 end
$cflist insert end "Comments"
$cflist delete 0 end
$cflist insert end "Comments"
- if {$nparents($id) == 1} {
- startdiff [concat $id $parents($id)]
- }
+ startdiff $id $parents($id)
+}
+
+proc startdiff {id vs} {
+ global diffpending diffpindex
+ global diffindex difffilestart seenfile
+ global curdifftag curtagstart
+
+ set diffpending $vs
+ set diffpindex 0
+ set diffindex 0
+ catch {unset difffilestart}
+ set curdifftag Comments
+ set curtagstart 0.0
+ contdiff [list $id [lindex $vs 0]]
global treediffs diffids treepending
if {![info exists treediffs($ids)]} {
global treediffs diffids treepending
if {![info exists treediffs($ids)]} {
}
proc addtocflist {ids} {
}
proc addtocflist {ids} {
- global treediffs cflist
+ global treediffs cflist diffpindex
+
+ set colors {black blue green red cyan magenta}
+ set color [lindex $colors [expr {$diffpindex % [llength $colors]}]]
foreach f $treediffs($ids) {
$cflist insert end $f
foreach f $treediffs($ids) {
$cflist insert end $f
+ $cflist itemconf end -foreground $color
if {$ids != $diffids} {
gettreediffs $diffids
} else {
if {$ids != $diffids} {
gettreediffs $diffids
} else {
}
proc getblobdiffs {ids} {
}
proc getblobdiffs {ids} {
- global diffopts blobdifffd blobdiffids env curdifftag curtagstart
- global diffindex difffilestart nextupdate
+ global diffopts blobdifffd diffids env
+ global nextupdate
set id [lindex $ids 0]
set p [lindex $ids 1]
set id [lindex $ids 0]
set p [lindex $ids 1]
return
}
fconfigure $bdf -blocking 0
return
}
fconfigure $bdf -blocking 0
set blobdifffd($ids) $bdf
set blobdifffd($ids) $bdf
- set curdifftag Comments
- set curtagstart 0.0
- set diffindex 0
- catch {unset difffilestart}
- fileevent $bdf readable "getblobdiffline $bdf {$ids}"
+ fileevent $bdf readable [list getblobdiffline $bdf $ids]
set nextupdate [expr {[clock clicks -milliseconds] + 100}]
}
proc getblobdiffline {bdf ids} {
set nextupdate [expr {[clock clicks -milliseconds] + 100}]
}
proc getblobdiffline {bdf ids} {
- global blobdiffids blobdifffd ctext curdifftag curtagstart seenfile
+ global diffids blobdifffd ctext curdifftag curtagstart seenfile
global diffnexthead diffnextnote diffindex difffilestart
global diffnexthead diffnextnote diffindex difffilestart
+ global nextupdate diffpending diffpindex
set n [gets $bdf line]
if {$n < 0} {
if {[eof $bdf]} {
close $bdf
set n [gets $bdf line]
if {$n < 0} {
if {[eof $bdf]} {
close $bdf
- if {$ids == $blobdiffids && $bdf == $blobdifffd($ids)} {
+ if {$ids == $diffids && $bdf == $blobdifffd($ids)} {
$ctext tag add $curdifftag $curtagstart end
set seenfile($curdifftag) 1
$ctext tag add $curdifftag $curtagstart end
set seenfile($curdifftag) 1
+ if {[incr diffpindex] < [llength $diffpending]} {
+ set id [lindex $ids 0]
+ set p [lindex $diffpending $diffpindex]
+ contdiff [list $id $p]
+ }
- if {$ids != $blobdiffids || $bdf != $blobdifffd($ids)} {
+ if {$ids != $diffids || $bdf != $blobdifffd($ids)} {
return
}
$ctext conf -state normal
return
}
$ctext conf -state normal
- global ctext cflist currentid treediffs seenfile
+ global ctext cflist currentid treediffs
if {![info exists currentid]} return
set sel [lsort [$cflist curselection]]
if {$sel eq {}} return
if {![info exists currentid]} return
set sel [lsort [$cflist curselection]]
if {$sel eq {}} return