74 lines
1.8 KiB
Bash
Executable File
74 lines
1.8 KiB
Bash
Executable File
#!/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 (<STDIN>) {
|
|
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/new)
|
|
cat /var/tmp/new >"/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
|