#!/bin/sh # $Id$ # Public domain. Originally written 2004, Karl Berry. # Get change info from svn log. (see now-deleted p4changelog for the # previous code using p4.) umask 0 debug=true chicken=${OVERRIDE_CHICKEN-false} # to get started, ran svn log and put the first thousand changes in log. # we are in Master/tlpkg/bin mydir=`dirname $0` # Master/tlpkg/bin outdir=`cd $mydir/../../../Build/logs && pwd` outfile=$outdir/svnlog test ! -f $outfile && exit 2 # error probably given by the cd # get the revision number we last logged line=`grep '^r[0-9]' $outfile | head -1 | sed 's/^r//'` lastlogged=`echo "$line" | awk '{print $1}'` echo "$lastlogged" | egrep '^[0-9]+$' >/dev/null \ || { echo "$0: no change number in r line of $outfile: $line"; exit 1; } nextneeded=`expr $lastlogged + 1` $debug && echo "lastlogged=$lastlogged, nextneeded=$nextneeded" if test -z "$nextneeded"; then echo "$0: empty nextneeded?!" exit 1 fi # get the log info since then. tlroot=`cd $mydir/../../.. && pwd` newlogs=$outdir/newlogdata svn log -v -r HEAD:$nextneeded $tlroot >$newlogs || exit 1 # with HEAD:next we get the entries newest first, as we want them. $debug && ls -l $newlogs line=`grep '^r[0-9]* |' $newlogs | head -1 | sed 's/^r//'` latestchange=`echo "$line" | awk '{print $1}'` $debug && echo "latestchange=$latestchange" if test -z "$latestchange"; then echo "$0: empty latestchange?!" exit 1 fi # done if nothing submitted since last change. # or if only one commit has been made, because we ourselves do a commit, # so otherwise we'd add a useless entry every time we're run. test $latestchange -le $nextneeded && exit 0 # rotate logs if crossed a 1000-change mark. rotate=false for c in `seq $latestchange -1 $nextneeded`; do echo $c | grep '001$' >/dev/null && rotate=true done $debug && echo "rotate=$rotate" if ! $chicken && $rotate; then mv -v $outfile $outfile.$lastlogged gzip -v $outfile.$lastlogged chmod 444 $outfile.$lastlogged.gz ls -l $outfile.$lastlogged.gz svn add $outfile.$lastlogged.gz cp /dev/null $outfile fi # prepend new changes to current log, and put log messages first. $mydir/../libexec/svnchangelog.sed $newlogs >$outfile.new cat $outfile >>$outfile.new if $debug; then # really debug # show first and last change number in each file. for f in $newlogs $outfile $outfile.new; do echo (cd `dirname $f` && ls -l `basename $f`) grep '^r[0-9]* |' $f | head -1 grep '^r[0-9]* |' $f | tail -1 done fi if ! $chicken; then mv $outfile.new $outfile echo "svn commit..." svn commit -m"regenerated by $0" $outdir fi $mydir/../libexec/svnchangelog.sed $newlogs # show it to me $debug || rm -f $newlogs $outfile.new # keep them in case of problems exit 0 # to get things started: svn log -v -r 1000:1 /home/texlive/trunk/ >svnlog svn add svnlog