#! /bin/sh # $Id: driver.sh,v 1.2 2012/11/28 00:30:32 svnexp Exp svnexp $ HOME=/local/svnexp; export HOME CVSROOT=$HOME/Fake-CVSROOT; export CVSROOT TDIR=/local/svnexp/tmp commitcount=0 svnpath="$1" cvspath="$2" cvsbranch="$3" if [ ! -f $HOME/$cvspath.RUN ]; then echo " $cvspath is not scheduled to run" exit 0 fi echo "svnpath $svnpath cvspath $cvspath cvsbranch $cvsbranch" myrev=$(svn info svnco/$svnpath | awk -F: '$1 == "Revision" {print $2}') testrev=$(expr $myrev + 1) cvs=/local/svnexp/exportcvs/$cvspath svn=/local/svnexp/svnco/$svnpath while true do cd $HOME if [ $commitcount -gt 10 ] ; then echo "commit count 10; finishing" exit 0 fi lastrev=$(svn info svn://svn.freebsd.org/$svnpath | awk -F: '$1 == "Last Changed Rev" {print $2}') if [ "$lastrev" = "" ]; then echo "Invalid lastrev, aborting" exit 0 fi echo "=== considering" $testrev of $lastrev if [ $testrev -gt $lastrev -a ! -f $cvs/force-commit ]; then break fi nextrev=$(svn info -r $testrev svn://svn.freebsd.org/$svnpath | awk -F: '$1 == "Last Changed Rev" {print $2}') if [ "$nextrev" = "" ]; then echo "Invalid nextrev, aborting" exit 0 fi if [ $nextrev = $testrev -o -f $cvs/force-commit ]; then cd $HOME commitcount=$(expr $commitcount + 1) echo "=== commit" $nextrev svn log -c $nextrev -v svn://svn.freebsd.org/$svnpath #=== svnrev=$(echo $nextrev) rm -f $cvs/force-commit cd $cvs || exit 1 cvs -Rq up $cvsbranch -d -C find . -name '.#*' -delete cd $svn || exit 1 #svn revert . || exit 1 svn up -r $svnrev || exit 1 cd $cvs || exit 1 find . -name CVS -prune -o -name LASTCOMMIT.txt -prune -o -type f -print | sed -e 's@^\./@@' | sort -n > $TDIR/cvsfiles find . -name CVS -prune -o -type d -print | sed -e 's@^\./@@' | sort -n > $TDIR/cvsdirs cd $svn || exit 1 cp /local/svnexp/deprecated.src etc/rc.d/deprecated || exit 1 chmod +x etc/rc.d/deprecated || exit 1 find . -name .svn -prune -o -type f -print | sed -e 's@^\./@@' | sort -n > $TDIR/svnfiles find . -name .svn -prune -o -type d -print | sed -e 's@^\./@@' | sort -n > $TDIR/svndirs cd $cvs || exit 1 comm -2 -3 $TDIR/svndirs $TDIR/cvsdirs > $TDIR/dirsadd while read d; do echo Adding directory $d mkdir -p $d cvs -q add $d 2>&1 done < $TDIR/dirsadd cd $cvs || exit 1 comm -2 -3 $TDIR/svnfiles $TDIR/cvsfiles > $TDIR/filesadd while read f; do echo Adding file $f cp $svn/$f $f cvs -q add $f 2>&1 done < $TDIR/filesadd cd $cvs || exit 1 comm -1 -3 $TDIR/svnfiles $TDIR/cvsfiles > $TDIR/filesremove while read f; do echo Deleting file $f cvs -q rm -f $f 2>&1 done < $TDIR/filesremove comm -1 -2 $TDIR/svnfiles $TDIR/cvsfiles > $TDIR/commonfiles cd $cvs || exit 1 xargs md5 < $TDIR/commonfiles > $TDIR/cvssum cd $svn || exit 1 xargs md5 < $TDIR/commonfiles > $TDIR/svnsum cd $cvs || exit 1 diff -u $TDIR/svnsum $TDIR/cvssum | grep '^-MD5' | sed -e 's/.*(\(.*\)).*/\1/' > $TDIR/changed while read f; do echo Updating file: $f cp $svn/$f $f done < $TDIR/changed cd $svn || exit 1 echo "## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/$svnrev" > $TDIR/commitmsg echo "## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated" >> $TDIR/commitmsg # case "$svnpath" in # base/head) # ;; # *) # echo "## SVN ##" >> $TDIR/commitmsg # svn log -c $svnrev | sed -e 's/^/## SVN ## /' >> $TDIR/commitmsg # echo "## SVN ##" >> $TDIR/commitmsg # ;; # esac cd $svn || exit 1 echo "## SVN ## Exported commit - http://svnweb.freebsd.org/changeset/base/$svnrev" > $cvs/LASTCOMMIT.txt echo "## SVN ## CVS IS DEPRECATED: http://wiki.freebsd.org/CvsIsDeprecated" >> $cvs/LASTCOMMIT.txt svn log -c $svnrev -v | sed -e 's/^/## SVN ## /' >> $cvs/LASTCOMMIT.txt cd $cvs || exit 1 cvs add LASTCOMMIT.txt >/dev/null 2>&1 cvs -q commit -F $TDIR/commitmsg #=== echo "xxx sleep 5" sleep 5 else cd $HOME echo "=== not my tree" $testrev fi testrev=$(expr $testrev + 1) done rm -f $HOME/$cvspath.RUN