diff options
Diffstat (limited to 'dist-tools/growthplot')
-rwxr-xr-x | dist-tools/growthplot | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/dist-tools/growthplot b/dist-tools/growthplot new file mode 100755 index 00000000..73f4f4e9 --- /dev/null +++ b/dist-tools/growthplot @@ -0,0 +1,114 @@ +#!/bin/sh +# +# growthplot -- plot the fetchmail project's growth as a function of time +# + +PATH="$PATH:.:./dist-tools"; export PATH + +tmp=/tmp/fetchmail-growthplot.$$ +mkdir $tmp + +# Get data from the NEWS file +timeseries >$tmp/growthplot$$ +grep "^[0-9]" $tmp/growthplot$$ >$tmp/growthnumbers$$ +grep "^[0-9.]*.[05].0 " $tmp/growthplot$$ >$tmp/growthmajors$$ +sed '/^4.2.9/,$d' <$tmp/growthnumbers$$ >$tmp/growthannounce$$ + +# gnuplot line styles. These occasionally change (like beteween 3.5 and 3.7); +# use "echo 'set terminal png; test' | gnuplot | display -" to check. +blue_boxes=3 +green_crosses=2 +cyan_diamonds=37 # Once purple triangles, but we can't do that anymore +brown_triangles=23 + +cat >$tmp/growthimage$$ <<EOF +set title "Fetchmail project growth history" +set xlabel 'Days since baseline' +set ylabel 'Participants' +set y2label 'Lines of code' +set ytics nomirror +set y2tics +set tics out +set autoscale y +set y2range [5000:50000] +set key bottom right box +set terminal png + +EOF + +# OK, now write the event labels +( + count=0 + lastday=0 + breakheight=510 + while read version legend + do + if [ "$version" = '%' ] + then + echo "# Associate $lastday to '$legend'" + count=$((count+1)) + lastday=$(($lastday-5)) + endy=$((breakheight+50+count*50)) + if ((endy>lasttotal)) + then + # Label over curve hanging right, arrow down + arrowhead=$((lasttotal+50)) + echo "set label '$legend' at $lastday-10, $endy+15" + else + # Label under curve hanging left, arrow up + arrowhead=$((lasttotal-5)) + strlen=`python -c "print len('$legend')"` + lablen=$((strlen*22)) + echo "set label '$legend' at $lastday-$lablen+10, $endy-15" + fi + echo set arrow \ + from $lastday, $endy \ + to $lastday, $arrowhead \ + head + else + set -- $legend + size=$1 + friends=$2 + announce=$3 + total=$4 + days=$5 + date=$6 + lastday=$days + lasttotal=$total + fi + done +) <$tmp/growthplot$$ >>$tmp/growthimage$$ + +# OK, now write the major-release labels +( + while read version size friends announce total days date + do + echo "set arrow from $days, $total - 55 to $days, $total - 15 head" + echo "set label '$version' at $days - 5, $total - 65" + done +) <$tmp/growthmajors$$ >>$tmp/growthimage$$ + +cat >>$tmp/growthimage$$ <<EOF +plot [] [0:] '$tmp/growthnumbers$$' using 6:5 \ + title "Both lists" with points $blue_boxes, \ + '$tmp/growthannounce$$' using 6:4 \ + title "fetchmail-announce" with points $cyan_diamonds, \ + '$tmp/growthannounce$$' using 6:3 \ + title "fetchmail-friends" with points $green_crosses, \ + '$tmp/growthnumbers$$' using 6:2 axes x1y2 \ + title "Lines of code" with points $brown_triangles +EOF + +gnuplot $tmp/growthimage$$ >growth.png + +rm -f $tmp/growth* +rmdir $tmp + +# growthplot ends here + + + + + + + |