123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #!/usr/bin/env tclsh
- # Load commits history as "sha1 unixtime".
- set commits [exec git log unstable {--pretty="%H %at"}]
- set raw_tags [exec git tag]
- # Load all the tags that are about stable releases.
- foreach tag $raw_tags {
- if {[string match v*-stable $tag]} {
- set tag [string range $tag 1 end-7]
- puts $tag
- }
- if {[regexp {^[0-9]+.[0-9]+.[0-9]+$} $tag]} {
- lappend tags $tag
- }
- }
- # For each tag, create a list of "name unixtime"
- foreach tag $tags {
- set taginfo [exec git log $tag -n 1 "--pretty=\"$tag %at\""]
- set taginfo [string trim $taginfo {"}]
- lappend labels $taginfo
- }
- # For each commit, check the amount of code changed and create an array
- # mapping the commit to the number of lines affected.
- foreach c $commits {
- set stat [exec git show --oneline --numstat [lindex $c 0]]
- set linenum 0
- set affected 0
- foreach line [split $stat "\n"] {
- incr linenum
- if {$linenum == 1 || [string match *deps/* $line]} continue
- if {[catch {llength $line} numfields]} continue
- if {$numfields == 0} continue
- catch {
- incr affected [lindex $line 0]
- incr affected [lindex $line 1]
- }
- }
- set commit_to_affected([lindex $c 0]) $affected
- }
- set base_time [lindex [lindex $commits end] 1]
- puts [clock format $base_time]
- # Generate a graph made of HTML DIVs.
- puts {<html>
- <style>
- .box {
- position:absolute;
- width:10px;
- height:5px;
- border:1px black solid;
- background-color:#44aa33;
- opacity: 0.04;
- }
- .label {
- position:absolute;
- background-color:#dddddd;
- font-family:helvetica;
- font-size:12px;
- padding:2px;
- color:#666;
- border:1px #aaa solid;
- border-radius: 5px;
- }
- #outer {
- position:relative;
- width:1500;
- height:500;
- border:1px #aaa solid;
- }
- </style>
- <div id="outer">
- }
- foreach c $commits {
- set sha [lindex $c 0]
- set t [expr {([lindex $c 1]-$base_time)/(3600*24*2)}]
- set affected [expr $commit_to_affected($sha)]
- set left $t
- set height [expr {log($affected)*20}]
- puts "<div class=\"box\" style=\"left:$left; bottom:0; height:$height\"></div>"
- }
- set bottom -30
- foreach l $labels {
- set name [lindex $l 0]
- set t [expr {([lindex $l 1]-$base_time)/(3600*24*2)}]
- set left $t
- if {$left < 0} continue
- incr bottom -20
- if {$bottom == -210} {set bottom -30}
- puts "<div class=\"label\" style=\"left:$left; bottom:$bottom\">$name</div>"
- }
- puts {</div></html>}
|