Changes

Jump to: navigation, search

File:Kernel patches stats.png

1,402 bytes added, 05:47, 28 March 2022
Vvs uploaded a new version of File:Kernel patches stats.png
== Source code ==
 
=== Collect data ===
Here is the script to produce the data for the graph, called <code>count</code>:
<small><source lang="bash">
#!/bin/sh
latest# Whose patches to count#PAT=$(git tag '@openvz.org|@parallels.com| grep -v -- -rc @sw.ru| tail -n1 @swsoft.com|@sw.com.sg| sed -e kuznet@'s/^#PAT='@openvz.org|@parallels.com|@sw.*\ru|@swsoft.com|@sw.\(com.*\)$/\1/sg|adobriyan@|kuznet@|gorcunov@')((latest++))PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|@virtuozzo.com|kuznet@|gorcunov@'
# Return the date of the given tag, in a format usable by gnuplot
get_tag_date() {
echo $(git show $1 | egrep ^Date: | head -n1) | sed 's/^Date: ... \(.*\) [-+]....$/\1/' | sed 's/ ..:..:..//' | sed 's/ /-/g'} # Count the number of patches whose authors match $PAT,# for the period between two given git tagscount_patches() { git log --pretty=short --no-merges $1..$2 | egrep '^Author: ' | egrep $PAT | wc -l} count_total_patches() { git log --pretty=short --no-merges $1..$2 | grep -c '^commit '
}
for f in # Latest 3.x kernel#latest3=$(seq 13 git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$latest/\1/'); do v1latest3=v2$(git tag | grep -v -- -rc | grep -F 'v3.' | \ awk -F . '{print $2}' | sort -n | tail -n1)# Latest 2.6.x kernellatest26=39 # Find out if number of patches for HEAD is much more# than for latest -rc. If yes, use HEAD, otherwise -rc.:last_rc=$((fgit describe --1abbrev=0)HEAD=$last_rcif ! test -z "$last_rc"; then much_more=10 count_head=$(count_patches v3.$latest3 HEAD) d1 count_rc=$(get_tag_date count_patches v3.$latest3 $v1last_rc) if [ test $f = count_head -gt $latest ]((count_rc+much_more)); then v2 HEAD="HEAD " else fifi v2pv=''for v in $(git for-each-ref --sort='*authordate' --format='%(tag)' refs/tags |\ grep -v -E -- '-rc|-tree|v2.6.11') HEAD; do if [ -z "$fpv" ]; then pv=$v continue fi d2 pd=$(get_tag_date $v2pv) d=$(get_tag_date $v) count_ours=$(count_patches $pv $v) count_total=$(count_total_patches $pv $v) if test "$count_ours" -gt 0; then echo -n $d2 d $v2 v " "$count_ours $count_total fi git log --pretty pv=short --no-merges $v1..$v2 | grep 'Author:' | egrep \ '@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@' | wc -lv
done | sed 's/ /\t/g'
 
</source></small>
<small><source lang="bash">
#!/bin/sh
 
REPO=~/git/linux/.git
COUNT=$(pwd)/count
OUT=$(pwd)/time.dat
export GDFONTPATH=/usr/share/fonts/microsoft
export GIT_DIR=$REPO
if test "$1" != "-f"; then
echo "== Previous (old) stats ==" tail -n 2 $OUT # Update the repo and count new stats (cd $REPO && cd .. && git pull) && sh $COUNT > $OUT echo "== New stats ==" sh count > time.dattail -n 2 $OUT
fi
DATE=$(date tail -n 1 $OUT | cut -f 1 | awk -F- '+%d %b %Y{print $2,$1,$3}')MAXY=$(awk 'BEGIN {max=0}; ($3 > max) {max=$3}; END {print max+5080}' < time.dat)
# GNU date is powerful!
MAXX=$(date +%b-1-%Y --date='+2 months')
export GDFONTPATH=/usr/share/fonts/msttcorefonts/
cat << EOF | gnuplot > plot.png
set terminal png enhanced font "verdanabverdana,2013" size 1600,1200 
set title "OpenVZ team kernel patches progress as of ${DATE}"
set xrange [ : "${MAXX}" ]
set yrange [ 0 : ${MAXY} ]
set ylabel "Number of patchesfrom OpenVZ team, \n per kernel release,\naccepted accepted into mainstream"
set border 3 # no lines at right and top
set ytics nomirror # no tics at right
plot 'time.dat${OUT}' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \ '' using 1:3:2 with labels left offset 0,1 5.5 rotate notitle, \
'' using 1:3:3 with labels left offset 0.7,0 notitle
EOF
</source></small>

Navigation menu