aboutsummaryrefslogtreecommitdiffstats
path: root/dist-tools/growthplot
diff options
context:
space:
mode:
Diffstat (limited to 'dist-tools/growthplot')
-rwxr-xr-xdist-tools/growthplot114
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
+
+
+
+
+
+
+