<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Glic3rinu</id>
	<title>OpenVZ Virtuozzo Containers Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openvz.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Glic3rinu"/>
	<link rel="alternate" type="text/html" href="https://wiki.openvz.org/Special:Contributions/Glic3rinu"/>
	<updated>2026-06-14T03:01:16Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.1</generator>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=13339</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=13339"/>
		<updated>2013-01-19T23:05:59Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: /* Source code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
 &lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Old 2.6 kernel branch&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
# and end on 2.6.39 -- the last kernel on 2.6 branch&lt;br /&gt;
for f in $(seq 13 39); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt 39 ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
 &lt;br /&gt;
# New 3.x kernel branch&lt;br /&gt;
# Transition: patches from 2.6.39 to 3.0&lt;br /&gt;
d2=$(get_tag_date v3.0)&lt;br /&gt;
count=$(count_patches v2.6.39 v3.0)&lt;br /&gt;
echo $d2 &amp;quot;v3.0&amp;quot; &amp;quot; &amp;quot; $count | sed 's/ /\t/g'&lt;br /&gt;
 &lt;br /&gt;
# What is the latest kernel patch number in 3.x&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
 &lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v3.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v3.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
 &lt;br /&gt;
# We start from 3.0&lt;br /&gt;
for f in $(seq 1 $((latest+1))); do&lt;br /&gt;
	v1=v3.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v3.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=13338</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=13338"/>
		<updated>2013-01-19T23:03:49Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: /* Collect data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
 &lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Old 2.6 kernel branch&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
# and end on 2.6.39 -- the last kernel on 2.6 branch&lt;br /&gt;
for f in $(seq 13 39); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt 39 ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
 &lt;br /&gt;
# New 3.x kernel branch&lt;br /&gt;
# Transition: patches from 2.6.39 to 3.0&lt;br /&gt;
d2=$(get_tag_date v3.0)&lt;br /&gt;
count=$(count_patches v2.6.39 v3.0)&lt;br /&gt;
echo $d2 &amp;quot;v3.0&amp;quot; &amp;quot; &amp;quot; $count | sed 's/ /\t/g'&lt;br /&gt;
 &lt;br /&gt;
# What is the latest kernel patch number in 3.x&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
 &lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v3.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v3.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
 &lt;br /&gt;
# We start from 3.0&lt;br /&gt;
for f in $(seq 1 $((latest+1))); do&lt;br /&gt;
	v1=v3.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v3.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=13337</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=13337"/>
		<updated>2013-01-19T22:46:05Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: Glic3rinu uploaded a new version of &amp;amp;quot;File:Kernel patches stats.png&amp;amp;quot;: 3.8-rc4, good work guys!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
 &lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Old 2.6 kernel branch&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
# and end on 2.6.39 -- the last kernel on 2.6 branch&lt;br /&gt;
for f in $(seq 13 40); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt 39 ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&lt;br /&gt;
# New 3.x kernel branch&lt;br /&gt;
# Transition: patches from 2.6.39 to 3.0&lt;br /&gt;
d2=$(get_tag_date v3.0)&lt;br /&gt;
count=$(count_patches v2.6.39 v3.0)&lt;br /&gt;
echo $d2 v3.0 &amp;quot; &amp;quot; $count&lt;br /&gt;
&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 3.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
 &lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v3.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v3.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 3.0&lt;br /&gt;
for f in $(seq 1 $((latest+1))); do&lt;br /&gt;
	v1=v3.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v3.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=12138</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=12138"/>
		<updated>2012-03-19T20:48:13Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: uploaded a new version of &amp;amp;quot;File:Kernel patches stats.png&amp;amp;quot;: kernel 3.3 released (c/r patches)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
 &lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Old 2.6 kernel branch&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
# and end on 2.6.39 -- the last kernel on 2.6 branch&lt;br /&gt;
for f in $(seq 13 40); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt 39 ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&lt;br /&gt;
# New 3.x kernel branch&lt;br /&gt;
# Transition: patches from 2.6.39 to 3.0&lt;br /&gt;
d2=$(get_tag_date v3.0)&lt;br /&gt;
count=$(count_patches v2.6.39 v3.0)&lt;br /&gt;
echo $d2 v3.0 &amp;quot; &amp;quot; $count&lt;br /&gt;
&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 3.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
 &lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v3.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v3.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 3.0&lt;br /&gt;
for f in $(seq 1 $((latest+1))); do&lt;br /&gt;
	v1=v3.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v3.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=11899</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=11899"/>
		<updated>2012-01-26T19:51:43Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: uploaded a new version of &amp;amp;quot;File:Kernel patches stats.png&amp;amp;quot;: now 3.0 is displayed too&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
 &lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Old 2.6 kernel branch&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
# and end on 2.6.39 -- the last kernel on 2.6 branch&lt;br /&gt;
for f in $(seq 13 40); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt 39 ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&lt;br /&gt;
# New 3.x kernel branch&lt;br /&gt;
# Transition: patches from 2.6.39 to 3.0&lt;br /&gt;
d2=$(get_tag_date v3.0)&lt;br /&gt;
count=$(count_patches v2.6.39 v3.0)&lt;br /&gt;
echo $d2 v3.0 &amp;quot; &amp;quot; $count&lt;br /&gt;
&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 3.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
 &lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v3.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v3.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 3.0&lt;br /&gt;
for f in $(seq 1 $((latest+1))); do&lt;br /&gt;
	v1=v3.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v3.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=11898</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=11898"/>
		<updated>2012-01-26T19:50:55Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: bugfix: forget to count between 2.6.39 -- 2.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
 &lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Old 2.6 kernel branch&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
# and end on 2.6.39 -- the last kernel on 2.6 branch&lt;br /&gt;
for f in $(seq 13 40); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt 39 ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&lt;br /&gt;
# New 3.x kernel branch&lt;br /&gt;
# Transition: patches from 2.6.39 to 3.0&lt;br /&gt;
d2=$(get_tag_date v3.0)&lt;br /&gt;
count=$(count_patches v2.6.39 v3.0)&lt;br /&gt;
echo $d2 v3.0 &amp;quot; &amp;quot; $count&lt;br /&gt;
&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 3.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
 &lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v3.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v3.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 3.0&lt;br /&gt;
for f in $(seq 1 $((latest+1))); do&lt;br /&gt;
	v1=v3.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v3.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=11897</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=11897"/>
		<updated>2012-01-26T19:39:52Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: uploaded a new version of &amp;amp;quot;File:Kernel patches stats.png&amp;amp;quot;: v3.3-rc1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
 &lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Old 2.6 kernel branch&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
# and end on 2.6.39 -- the last kernel on 2.6 branch&lt;br /&gt;
for f in $(seq 13 40); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt 39 ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&lt;br /&gt;
# New 3.x kernel branch&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 3.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
 &lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v3.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v3.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 3.0&lt;br /&gt;
for f in $(seq 1 $((latest+1))); do&lt;br /&gt;
	v1=v3.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v3.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=11896</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=11896"/>
		<updated>2012-01-26T19:38:05Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: Updated to 3.x kernel series&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
 &lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
# Old 2.6 kernel branch&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
# and end on 2.6.39 -- the last kernel on 2.6 branch&lt;br /&gt;
for f in $(seq 13 40); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt 39 ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&lt;br /&gt;
# New 3.x kernel branch&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 3.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
 &lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v3.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v3.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 3.0&lt;br /&gt;
for f in $(seq 1 $((latest+1))); do&lt;br /&gt;
	v1=v3.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v3.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
 &lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=9976</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=9976"/>
		<updated>2011-03-20T12:08:16Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: uploaded a new version of &amp;quot;File:Kernel patches stats.png&amp;quot;:&amp;amp;#32;2.6.38 release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
&lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 2.6.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
&lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v2.6.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v2.6.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
for f in $(seq 13 $((latest+1))); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
&lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=8976</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=8976"/>
		<updated>2010-08-02T11:48:37Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: uploaded a new version of &amp;quot;File:Kernel patches stats.png&amp;quot;:&amp;amp;#32;2.6.35 released&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
&lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 2.6.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
&lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v2.6.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v2.6.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
for f in $(seq 13 $((latest+1))); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
&lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=8276</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=8276"/>
		<updated>2010-03-01T17:54:14Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: uploaded a new version of &amp;quot;File:Kernel patches stats.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
&lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 2.6.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
&lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v2.6.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v2.6.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
for f in $(seq 13 $((latest+1))); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
&lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=8275</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=8275"/>
		<updated>2010-03-01T17:52:30Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: uploaded a new version of &amp;quot;File:Kernel patches stats.png&amp;quot;:&amp;amp;#32;Reverted to version as of 08:50, 14 July 2008&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
&lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 2.6.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
&lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v2.6.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v2.6.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
for f in $(seq 13 $((latest+1))); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
&lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=8150</id>
		<title>File:Kernel patches stats.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openvz.org/index.php?title=File:Kernel_patches_stats.png&amp;diff=8150"/>
		<updated>2010-01-30T01:59:51Z</updated>

		<summary type="html">&lt;p&gt;Glic3rinu: uploaded a new version of &amp;quot;File:Kernel patches stats.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Development]]&lt;br /&gt;
&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
This graph shows how many patches from OpenVZ developers were merged into mainstream Linux kernel, per each kernel version.&lt;br /&gt;
&lt;br /&gt;
It is drawn by gnuplot using the data set obtained from kernel git repository.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&lt;br /&gt;
=== Collect data ===&lt;br /&gt;
Here is the script to produce the data for the graph, called &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Whose patches to count&lt;br /&gt;
PAT='@openvz.org|@parallels.com|@sw.ru|@swsoft.com|@sw.com.sg|adobriyan@|kuznet@'&lt;br /&gt;
&lt;br /&gt;
# Return the date of the given tag, in a format usable by gnuplot&lt;br /&gt;
get_tag_date() {&lt;br /&gt;
	echo $(git show $1 | egrep ^Date: | head -n1) | &lt;br /&gt;
		sed 's/^Date: ... \(.*\) [-+]....$/\1/' |&lt;br /&gt;
		sed 's/ ..:..:..//' | sed 's/ /-/g'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Count the number of patches whose authors match $PAT,&lt;br /&gt;
# for the period between two given git tags&lt;br /&gt;
count_patches() {&lt;br /&gt;
	git log --pretty=short --no-merges $1..$2 |&lt;br /&gt;
		egrep '^Author: ' | egrep $PAT | wc -l&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# What is the latest kernel patch number (i.e. x in 2.6.x)&lt;br /&gt;
latest=$(git tag | grep -v -- -rc | tail -n1 | sed -e 's/^.*\.\(.*\)$/\1/')&lt;br /&gt;
&lt;br /&gt;
# Find out if number of patches for HEAD is much more&lt;br /&gt;
# than for latest -rc. If yes, use HEAD, otherwise -rc.&lt;br /&gt;
last_rc=$(git tag | tail -n 1 | grep -- -rc)&lt;br /&gt;
HEAD=$last_rc&lt;br /&gt;
if ! test -z &amp;quot;$last_rc&amp;quot;; then&lt;br /&gt;
	much_more=15&lt;br /&gt;
	count_head=$(count_patches v2.6.$latest HEAD)&lt;br /&gt;
	count_rc=$(count_patches v2.6.$latest $last_rc)&lt;br /&gt;
	if test $count_head -gt $((count_rc+much_more)); then&lt;br /&gt;
		HEAD=&amp;quot;HEAD   &amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We start from 2.6.12 -- the first kernel available in git&lt;br /&gt;
for f in $(seq 13 $((latest+1))); do&lt;br /&gt;
	v1=v2.6.$((f-1))&lt;br /&gt;
	d1=$(get_tag_date $v1)&lt;br /&gt;
	if [ $f -gt $latest ]; then&lt;br /&gt;
		v2=$HEAD&lt;br /&gt;
	else&lt;br /&gt;
		v2=v2.6.$f&lt;br /&gt;
	fi&lt;br /&gt;
	d2=$(get_tag_date $v2)&lt;br /&gt;
	count=$(count_patches $v1 $v2)&lt;br /&gt;
	if test &amp;quot;$count&amp;quot; -gt 0; then&lt;br /&gt;
		echo $d2 $v2 &amp;quot; &amp;quot; $count&lt;br /&gt;
	fi&lt;br /&gt;
&lt;br /&gt;
done | sed 's/ /\t/g'&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Draw the graph ===&lt;br /&gt;
&lt;br /&gt;
Here is the script to produce the graph. Note it calls the previous script under the name 'count'.&lt;br /&gt;
&amp;lt;small&amp;gt;&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
if test &amp;quot;$1&amp;quot; != &amp;quot;-f&amp;quot;; then&lt;br /&gt;
	git checkout master&lt;br /&gt;
	git pull&lt;br /&gt;
	sh count &amp;gt; time.dat&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
DATE=$(tail -n 1 time.dat | cut -f 1 | awk -F- '{print $2,$1,$3}')&lt;br /&gt;
MAXY=$(awk 'BEGIN {max=0}; ($3 &amp;gt; max) {max=$3}; END {print max+50}' &amp;lt; time.dat)&lt;br /&gt;
# GNU date is powerful!&lt;br /&gt;
MAXX=$(date +%b-1-%Y --date='+2 months')&lt;br /&gt;
&lt;br /&gt;
export GDFONTPATH=/usr/share/fonts/msttcorefonts/&lt;br /&gt;
cat &amp;lt;&amp;lt; EOF | gnuplot &amp;gt; plot.png&lt;br /&gt;
set terminal png enhanced font &amp;quot;verdanab,20&amp;quot; size 1600,1200&lt;br /&gt;
#set terminal png enhanced transparent font &amp;quot;verdanab,14&amp;quot; size 1200,600&lt;br /&gt;
#set terminal svg enhanced font &amp;quot;verdanab,8&amp;quot; size 800,600&lt;br /&gt;
&lt;br /&gt;
set title &amp;quot;OpenVZ team kernel patches progress as of ${DATE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
unset xlabel&lt;br /&gt;
set xdata time&lt;br /&gt;
set timefmt &amp;quot;%b-%d-%Y&amp;quot;&lt;br /&gt;
set format x &amp;quot;%b\n%Y&amp;quot;&lt;br /&gt;
set grid xtics mxtics noytics&lt;br /&gt;
&lt;br /&gt;
set xrange [ : &amp;quot;${MAXX}&amp;quot; ]&lt;br /&gt;
set yrange [ 0 : ${MAXY} ]&lt;br /&gt;
set ylabel &amp;quot;Number of patches from OpenVZ team,\n per kernel release, accepted into mainstream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set border 3		# no lines at right and top&lt;br /&gt;
set xtics nomirror	# no tics at top&lt;br /&gt;
set ytics nomirror	# no tics at right&lt;br /&gt;
&lt;br /&gt;
plot 'time.dat' using 1:3 with linespoints pt 6 ps 1 lw 2 lt 2 notitle, \&lt;br /&gt;
	''	using 1:3:2 with labels left offset 0,1 rotate notitle, \&lt;br /&gt;
	''	using 1:3:3 with labels left offset 0.7,0 notitle&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;/small&amp;gt;&lt;/div&gt;</summary>
		<author><name>Glic3rinu</name></author>
		
	</entry>
</feed>