This commit is contained in:
168
gitk
168
gitk
@ -60,7 +60,7 @@ proc getcommits {rargs} {
|
|||||||
|
|
||||||
proc getcommitlines {commfd} {
|
proc getcommitlines {commfd} {
|
||||||
global commits parents cdate children
|
global commits parents cdate children
|
||||||
global commitlisted phase commitinfo nextupdate
|
global commitlisted phase nextupdate
|
||||||
global stopped redisplaying leftover
|
global stopped redisplaying leftover
|
||||||
|
|
||||||
set stuff [read $commfd]
|
set stuff [read $commfd]
|
||||||
@ -196,42 +196,41 @@ proc parsecommit {id contents listed olds} {
|
|||||||
incr ncleft($p)
|
incr ncleft($p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
foreach line [split $contents "\n"] {
|
set hdrend [string first "\n\n" $contents]
|
||||||
if {$inhdr} {
|
if {$hdrend < 0} {
|
||||||
if {$line == {}} {
|
# should never happen...
|
||||||
set inhdr 0
|
set hdrend [string length $contents]
|
||||||
} else {
|
}
|
||||||
set tag [lindex $line 0]
|
set header [string range $contents 0 [expr {$hdrend - 1}]]
|
||||||
if {$tag == "author"} {
|
set comment [string range $contents [expr {$hdrend + 2}] end]
|
||||||
set x [expr {[llength $line] - 2}]
|
foreach line [split $header "\n"] {
|
||||||
set audate [lindex $line $x]
|
set tag [lindex $line 0]
|
||||||
set auname [lrange $line 1 [expr {$x - 1}]]
|
if {$tag == "author"} {
|
||||||
} elseif {$tag == "committer"} {
|
set audate [lindex $line end-1]
|
||||||
set x [expr {[llength $line] - 2}]
|
set auname [lrange $line 1 end-2]
|
||||||
set comdate [lindex $line $x]
|
} elseif {$tag == "committer"} {
|
||||||
set comname [lrange $line 1 [expr {$x - 1}]]
|
set comdate [lindex $line end-1]
|
||||||
}
|
set comname [lrange $line 1 end-2]
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if {$comment == {}} {
|
|
||||||
set headline [string trim $line]
|
|
||||||
} else {
|
|
||||||
append comment "\n"
|
|
||||||
}
|
|
||||||
if {!$listed} {
|
|
||||||
# git-rev-list indents the comment by 4 spaces;
|
|
||||||
# if we got this via git-cat-file, add the indentation
|
|
||||||
append comment " "
|
|
||||||
}
|
|
||||||
append comment $line
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if {$audate != {}} {
|
set headline {}
|
||||||
set audate [clock format $audate -format "%Y-%m-%d %H:%M:%S"]
|
# take the first line of the comment as the headline
|
||||||
|
set i [string first "\n" $comment]
|
||||||
|
if {$i >= 0} {
|
||||||
|
set headline [string trim [string range $comment 0 $i]]
|
||||||
|
}
|
||||||
|
if {!$listed} {
|
||||||
|
# git-rev-list indents the comment by 4 spaces;
|
||||||
|
# if we got this via git-cat-file, add the indentation
|
||||||
|
set newcomment {}
|
||||||
|
foreach line [split $comment "\n"] {
|
||||||
|
append newcomment " "
|
||||||
|
append newcomment $line
|
||||||
|
}
|
||||||
|
set comment $newcomment
|
||||||
}
|
}
|
||||||
if {$comdate != {}} {
|
if {$comdate != {}} {
|
||||||
set cdate($id) $comdate
|
set cdate($id) $comdate
|
||||||
set comdate [clock format $comdate -format "%Y-%m-%d %H:%M:%S"]
|
|
||||||
}
|
}
|
||||||
set commitinfo($id) [list $headline $auname $audate \
|
set commitinfo($id) [list $headline $auname $audate \
|
||||||
$comname $comdate $comment]
|
$comname $comdate $comment]
|
||||||
@ -683,7 +682,7 @@ Use and redistribute under the terms of the GNU General Public License} \
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc assigncolor {id} {
|
proc assigncolor {id} {
|
||||||
global commitinfo colormap commcolors colors nextcolor
|
global colormap commcolors colors nextcolor
|
||||||
global parents nparents children nchildren
|
global parents nparents children nchildren
|
||||||
global cornercrossings crossings
|
global cornercrossings crossings
|
||||||
|
|
||||||
@ -783,10 +782,12 @@ proc bindline {t id} {
|
|||||||
$canv bind $t <Button-1> "lineclick %x %y $id 1"
|
$canv bind $t <Button-1> "lineclick %x %y $id 1"
|
||||||
}
|
}
|
||||||
|
|
||||||
proc drawlines {id xtra} {
|
proc drawlines {id xtra delold} {
|
||||||
global mainline mainlinearrow sidelines lthickness colormap canv
|
global mainline mainlinearrow sidelines lthickness colormap canv
|
||||||
|
|
||||||
$canv delete lines.$id
|
if {$delold} {
|
||||||
|
$canv delete lines.$id
|
||||||
|
}
|
||||||
if {[info exists mainline($id)]} {
|
if {[info exists mainline($id)]} {
|
||||||
set t [$canv create line $mainline($id) \
|
set t [$canv create line $mainline($id) \
|
||||||
-width [expr {($xtra + 1) * $lthickness}] \
|
-width [expr {($xtra + 1) * $lthickness}] \
|
||||||
@ -858,7 +859,7 @@ proc drawcommitline {level} {
|
|||||||
set mainline($id) [trimdiagstart $mainline($id)]
|
set mainline($id) [trimdiagstart $mainline($id)]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
drawlines $id 0
|
drawlines $id 0 0
|
||||||
set orad [expr {$linespc / 3}]
|
set orad [expr {$linespc / 3}]
|
||||||
set t [$canv create oval [expr $x - $orad] [expr $y1 - $orad] \
|
set t [$canv create oval [expr $x - $orad] [expr $y1 - $orad] \
|
||||||
[expr $x + $orad - 1] [expr $y1 + $orad - 1] \
|
[expr $x + $orad - 1] [expr $y1 + $orad - 1] \
|
||||||
@ -878,6 +879,7 @@ proc drawcommitline {level} {
|
|||||||
set headline [lindex $commitinfo($id) 0]
|
set headline [lindex $commitinfo($id) 0]
|
||||||
set name [lindex $commitinfo($id) 1]
|
set name [lindex $commitinfo($id) 1]
|
||||||
set date [lindex $commitinfo($id) 2]
|
set date [lindex $commitinfo($id) 2]
|
||||||
|
set date [formatdate $date]
|
||||||
set linehtag($lineno) [$canv create text $xt $y1 -anchor w \
|
set linehtag($lineno) [$canv create text $xt $y1 -anchor w \
|
||||||
-text $headline -font $mainfont ]
|
-text $headline -font $mainfont ]
|
||||||
$canv bind $linehtag($lineno) <Button-3> "rowmenu %X %Y $id"
|
$canv bind $linehtag($lineno) <Button-3> "rowmenu %X %Y $id"
|
||||||
@ -1446,8 +1448,8 @@ proc decidenext {{noread 0}} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc drawcommit {id} {
|
proc drawcommit {id} {
|
||||||
global phase todo nchildren datemode nextupdate
|
global phase todo nchildren datemode nextupdate revlistorder
|
||||||
global numcommits ncmupdate displayorder todo onscreen
|
global numcommits ncmupdate displayorder todo onscreen parents
|
||||||
|
|
||||||
if {$phase != "incrdraw"} {
|
if {$phase != "incrdraw"} {
|
||||||
set phase incrdraw
|
set phase incrdraw
|
||||||
@ -1459,19 +1461,29 @@ proc drawcommit {id} {
|
|||||||
lappend todo $id
|
lappend todo $id
|
||||||
set onscreen($id) 0
|
set onscreen($id) 0
|
||||||
}
|
}
|
||||||
set level [decidenext 1]
|
if {$revlistorder} {
|
||||||
if {$level == {} || $id != [lindex $todo $level]} {
|
set level [lsearch -exact $todo $id]
|
||||||
return
|
if {$level < 0} {
|
||||||
}
|
error_popup "oops, $id isn't in todo"
|
||||||
while 1 {
|
return
|
||||||
lappend displayorder [lindex $todo $level]
|
|
||||||
if {[updatetodo $level $datemode]} {
|
|
||||||
set level [decidenext 1]
|
|
||||||
if {$level == {}} break
|
|
||||||
}
|
}
|
||||||
set id [lindex $todo $level]
|
lappend displayorder $id
|
||||||
if {![info exists commitlisted($id)]} {
|
updatetodo $level 0
|
||||||
break
|
} else {
|
||||||
|
set level [decidenext 1]
|
||||||
|
if {$level == {} || $id != [lindex $todo $level]} {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
while 1 {
|
||||||
|
lappend displayorder [lindex $todo $level]
|
||||||
|
if {[updatetodo $level $datemode]} {
|
||||||
|
set level [decidenext 1]
|
||||||
|
if {$level == {}} break
|
||||||
|
}
|
||||||
|
set id [lindex $todo $level]
|
||||||
|
if {![info exists commitlisted($id)]} {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
drawmore 1
|
drawmore 1
|
||||||
@ -1523,21 +1535,23 @@ proc drawrest {} {
|
|||||||
global phase stopped redisplaying selectedline
|
global phase stopped redisplaying selectedline
|
||||||
global datemode todo displayorder
|
global datemode todo displayorder
|
||||||
global numcommits ncmupdate
|
global numcommits ncmupdate
|
||||||
global nextupdate startmsecs
|
global nextupdate startmsecs revlistorder
|
||||||
|
|
||||||
set level [decidenext]
|
if {!$revlistorder} {
|
||||||
if {$level >= 0} {
|
set level [decidenext]
|
||||||
set phase drawgraph
|
if {$level >= 0} {
|
||||||
while 1 {
|
set phase drawgraph
|
||||||
lappend displayorder [lindex $todo $level]
|
while 1 {
|
||||||
set hard [updatetodo $level $datemode]
|
lappend displayorder [lindex $todo $level]
|
||||||
if {$hard} {
|
set hard [updatetodo $level $datemode]
|
||||||
set level [decidenext]
|
if {$hard} {
|
||||||
if {$level < 0} break
|
set level [decidenext]
|
||||||
|
if {$level < 0} break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
drawmore 0
|
|
||||||
}
|
}
|
||||||
|
drawmore 0
|
||||||
set phase {}
|
set phase {}
|
||||||
set drawmsecs [expr [clock clicks -milliseconds] - $startmsecs]
|
set drawmsecs [expr [clock clicks -milliseconds] - $startmsecs]
|
||||||
#puts "overall $drawmsecs ms for $numcommits commits"
|
#puts "overall $drawmsecs ms for $numcommits commits"
|
||||||
@ -2146,8 +2160,10 @@ proc selectline {l isnew} {
|
|||||||
$ctext mark set fmark.0 0.0
|
$ctext mark set fmark.0 0.0
|
||||||
$ctext mark gravity fmark.0 left
|
$ctext mark gravity fmark.0 left
|
||||||
set info $commitinfo($id)
|
set info $commitinfo($id)
|
||||||
$ctext insert end "Author: [lindex $info 1] [lindex $info 2]\n"
|
set date [formatdate [lindex $info 2]]
|
||||||
$ctext insert end "Committer: [lindex $info 3] [lindex $info 4]\n"
|
$ctext insert end "Author: [lindex $info 1] $date\n"
|
||||||
|
set date [formatdate [lindex $info 4]]
|
||||||
|
$ctext insert end "Committer: [lindex $info 3] $date\n"
|
||||||
if {[info exists idtags($id)]} {
|
if {[info exists idtags($id)]} {
|
||||||
$ctext insert end "Tags:"
|
$ctext insert end "Tags:"
|
||||||
foreach tag $idtags($id) {
|
foreach tag $idtags($id) {
|
||||||
@ -3226,7 +3242,7 @@ proc lineclick {x y id isnew} {
|
|||||||
normalline
|
normalline
|
||||||
$canv delete hover
|
$canv delete hover
|
||||||
# draw this line thicker than normal
|
# draw this line thicker than normal
|
||||||
drawlines $id 1
|
drawlines $id 1 1
|
||||||
set thickerline $id
|
set thickerline $id
|
||||||
if {$isnew} {
|
if {$isnew} {
|
||||||
set ymax [lindex [$canv cget -scrollregion] 3]
|
set ymax [lindex [$canv cget -scrollregion] 3]
|
||||||
@ -3255,7 +3271,8 @@ proc lineclick {x y id isnew} {
|
|||||||
set info $commitinfo($id)
|
set info $commitinfo($id)
|
||||||
$ctext insert end "\n\t[lindex $info 0]\n"
|
$ctext insert end "\n\t[lindex $info 0]\n"
|
||||||
$ctext insert end "\tAuthor:\t[lindex $info 1]\n"
|
$ctext insert end "\tAuthor:\t[lindex $info 1]\n"
|
||||||
$ctext insert end "\tDate:\t[lindex $info 2]\n"
|
set date [formatdate [lindex $info 2]]
|
||||||
|
$ctext insert end "\tDate:\t$date\n"
|
||||||
if {[info exists children($id)]} {
|
if {[info exists children($id)]} {
|
||||||
$ctext insert end "\nChildren:"
|
$ctext insert end "\nChildren:"
|
||||||
set i 0
|
set i 0
|
||||||
@ -3267,7 +3284,8 @@ proc lineclick {x y id isnew} {
|
|||||||
$ctext tag bind link$i <1> [list selbyid $child]
|
$ctext tag bind link$i <1> [list selbyid $child]
|
||||||
$ctext insert end "\n\t[lindex $info 0]"
|
$ctext insert end "\n\t[lindex $info 0]"
|
||||||
$ctext insert end "\n\tAuthor:\t[lindex $info 1]"
|
$ctext insert end "\n\tAuthor:\t[lindex $info 1]"
|
||||||
$ctext insert end "\n\tDate:\t[lindex $info 2]\n"
|
set date [formatdate [lindex $info 2]]
|
||||||
|
$ctext insert end "\n\tDate:\t$date\n"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$ctext conf -state disabled
|
$ctext conf -state disabled
|
||||||
@ -3278,7 +3296,7 @@ proc lineclick {x y id isnew} {
|
|||||||
proc normalline {} {
|
proc normalline {} {
|
||||||
global thickerline
|
global thickerline
|
||||||
if {[info exists thickerline]} {
|
if {[info exists thickerline]} {
|
||||||
drawlines $thickerline 0
|
drawlines $thickerline 0 1
|
||||||
unset thickerline
|
unset thickerline
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3650,6 +3668,20 @@ proc doquit {} {
|
|||||||
destroy .
|
destroy .
|
||||||
}
|
}
|
||||||
|
|
||||||
|
proc formatdate {d} {
|
||||||
|
global hours nhours tfd
|
||||||
|
|
||||||
|
set hr [expr {$d / 3600}]
|
||||||
|
set ms [expr {$d % 3600}]
|
||||||
|
if {![info exists hours($hr)]} {
|
||||||
|
set hours($hr) [clock format $d -format "%Y-%m-%d %H"]
|
||||||
|
set nhours($hr) 0
|
||||||
|
}
|
||||||
|
incr nhours($hr)
|
||||||
|
set minsec [format "%.2d:%.2d" [expr {$ms/60}] [expr {$ms%60}]]
|
||||||
|
return "$hours($hr):$minsec"
|
||||||
|
}
|
||||||
|
|
||||||
# defaults...
|
# defaults...
|
||||||
set datemode 0
|
set datemode 0
|
||||||
set boldnames 0
|
set boldnames 0
|
||||||
@ -3662,6 +3694,7 @@ set findmergefiles 0
|
|||||||
set gaudydiff 0
|
set gaudydiff 0
|
||||||
set maxgraphpct 50
|
set maxgraphpct 50
|
||||||
set maxwidth 16
|
set maxwidth 16
|
||||||
|
set revlistorder 0
|
||||||
|
|
||||||
set colors {green red blue magenta darkgrey brown orange}
|
set colors {green red blue magenta darkgrey brown orange}
|
||||||
|
|
||||||
@ -3678,6 +3711,7 @@ foreach arg $argv {
|
|||||||
"^$" { }
|
"^$" { }
|
||||||
"^-b" { set boldnames 1 }
|
"^-b" { set boldnames 1 }
|
||||||
"^-d" { set datemode 1 }
|
"^-d" { set datemode 1 }
|
||||||
|
"^-r" { set revlistorder 1 }
|
||||||
default {
|
default {
|
||||||
lappend revtreeargs $arg
|
lappend revtreeargs $arg
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user