From: Junio C Hamano Date: Wed, 3 Feb 2010 07:12:24 +0000 (-0800) Subject: Script to count contributors and commits per development cycle X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ece251b6407cf83959e595c3057c4f23b418dbb3;p=thirdparty%2Fgit.git Script to count contributors and commits per development cycle --- diff --git a/count-contributors.sh b/count-contributors.sh new file mode 100755 index 0000000000..4ee57f57f8 --- /dev/null +++ b/count-contributors.sh @@ -0,0 +1,73 @@ +#!/bin/sh + +LC_ALL=C LANG=C +export LC_ALL LANG + +fmt="%-10s | %7d %7d %7d | %7d %7d | %-10s\n" +hfmt=$(printf "%s" "$fmt" | sed -e 's/d/s/g') +head=$(printf "$hfmt" release new this total this total date) + +old= ocommitcnt= +git for-each-ref --format='%(refname:short)' refs/tags/ | +perl -w -e ' + use strict; + my @version = (); + my %asked = map { $_ => $_ } @ARGV; + + while () { + next unless (/^(v(\d+)\.(\d+)(?:\.(\d+))?(?:-rc(\d+))?)$/); + # $1 = tag == v$2.$3(.$4)?(-rc$5)? + + if (exists $asked{$1}) { + ; # ok + } elsif (defined $5) { + # skip -rc releases + next; + } elsif ($2 == 0) { + # not worth showing breakdown during v0.99 period + next unless ($1 eq "v0.99"); + } elsif ($2 == 1) { + # not worth showing breakdown before v1.4.0 + next if ($3 < 4 && $4); + } + push @version, [$1, $2, $3, $4, $5]; + } + for (sort { ( + $a->[1] <=> $b->[1] || + $a->[2] <=> $b->[2] || + $a->[3] <=> $b->[3] || + ( (defined $a->[4] && defined $b->[4]) + ? $a->[4] <=> $b->[4] + : defined $a->[4] + ? -1 : 1 ) ); } @version) { + print $_->[0], "\n"; + } +' "$@" | +while read new +do + commitcnt=$(git rev-list --no-merges "$new" | wc -l) + git shortlog -s -n "$new" | + sed -e 's/^[ 0-9]*//' | + sort >/var/tmp/new + if test -n "$old" + then + comm -13 /var/tmp/old /var/tmp/new >"/var/tmp/cont-$new" + i=$(git shortlog -s -n "$old..$new" | + sed -e 's/^[ 0-9]*//' | + wc -l) + cc=$(( $commitcnt - $ocommitcnt )) + else + i=$(wc -l "/var/tmp/cont-$new" + cc=$(( $commitcnt + 0 )) + fi + old=$new + mv /var/tmp/new /var/tmp/old + n=$(wc -l <"/var/tmp/cont-$new") + c=$(wc -l <"/var/tmp/old") + t=$(git show -s --format="%ci" "$old^0" | sed -e "s/ .*//") + ocommitcnt=$commitcnt + test -z "$head" || echo "$head" + printf "$fmt" $new $n $i $c $cc $commitcnt $t + head= +done