#!/bin/sh
# Convert a repo from cvs to svn

if [ $# -ne 2 ]; then
  echo "$0: Usage: $0 repohome rep"
  echo "For example $0 cvs_terraswarm esweek13"
  exit 4
fi

cvsrepohome=$1
cvsrepo=$2

echo "$0 $cvsrepohome $cvsrepo: START"
if [ ! -f "$PTII/adm/cvs2svn/cvsTosvn" ]; then
    echo "$0: Could not find $PTII/adm/cvs2svn/cvsTosvn"
    echo "Perhaps $PTII is not set?"
    exit 5
fi

if [ ! -f $PTII/adm/cvs2svn/cvs2svn-2.4.0/cvs2svn ]; then
    echo "Downloading cvs2svn-2.4.0.  Check http://cvs2svn.tigris.org/ to see if this is the most recent version."
    (cd $PTII/adm/cvs2svn; wget http://cvs2svn.tigris.org/files/documents/1462/49237/cvs2svn-2.4.0.tar.gz; tar -xf cvs2svn-2.4.0.tar.gz)
fi

if [ ! -d tmp.cvs/$cvsrepo ]; then
  echo "Checking out the $cvsrepo cvs repository."
  if [ ! -d tmp.cvs ]; then
    mkdir tmp.cvs
  fi    
  cd tmp.cvs
  if [ "$cvsrepohome" == "cvs_eal" ]; then
      cvs -d $PTII/adm/cvs2svn/cvs_eal_src co $cvsrepo
  else
      cvs -d :ext:source.eecs.berkeley.edu:/home/$cvsrepohome co $cvsrepo
  fi
  cd ..
fi

if [ ! -d tmp.cvs/$cvsrepo ]; then
    echo "$0 $cvsrepohome $cvsrepo: Error: `pwd` tmp.cvs/$cvsrepo does not exist! Quitting."
    exit 55
fi

cd tmp.cvs/$cvsrepo
cvs update -P -d
echo "$0 $cvsrepohome $cvsrepo: Checking for -kb problems by invoking $PTII/adm/cvs2svn/fixcvs."
$PTII/adm/cvs2svn/fixcvs
status=$?

if [ $status -ne 0 ]; then
    echo "$0$cvsrepohome $cvsrepo: The list of files to be converted to -kb is in `pwd`/fixme.kb.files"
    cat fixme.kb.files | $PTII/adm/cvs2svn/kbcvs > /tmp/doit.fixcvs
    sh /tmp/doit.fixcvs
    echo "$0 $cvsrepohome $cvsrepo: Checking for -kb problems --AGAIN--- by invoking $PTII/adm/cvs2svn/fixcvs."
    $PTII/adm/cvs2svn/fixcvs
    status=$?
fi

cd ../..

if [ $status -ne 0 ]; then
  echo "$0 $cvsrepohome $cvsrepo: Warning: fixcvs found some problems with files not being checked in.  Quitting."
  exit $status
fi



if [ ! -d $cvsrepohome/$cvsrepo ]; then
  if [ ! -d $cvsrepohome/$cvsrepo ]; then
      mkdir -p $cvsrepohome/$cvsrepo
  fi
  echo "Creating $cvsrepohome/$cvsrepo from source.eecs."
  cvsdir=/home
  if [ $cvsrepohome = "cvs_trust" ]; then
      cvsdir=/export/home2
      echo "$0: cvsrepohome = $cvsrepohome, so we are using $cvsdir"
  fi

  if [ $cvsrepohome == "cvs_eal" ]; then
      echo "Creating $cvsrepohome/$cvsrepo from cvs_eal_src"
      (cd cvs_eal_src; gtar zcf - --exclude=commitlogs CVSROOT $cvsrepo) > $cvsrepohome/$cvsrepo.tar.gz
      (cd $cvsrepohome/$cvsrepo; mkdir $cvsrepohome; cd $cvsrepohome; tar -zxf ../../$cvsrepo.tar.gz)
  else
      echo "Creating $cvsrepohome/$cvsrepo from source.eecs."
      ssh source "cd $cvsdir; gtar zcf - --exclude=commitlogs $cvsrepohome/CVSROOT $cvsrepohome/$cvsrepo" > $cvsrepohome/$cvsrepo.tar.gz

      (cd $cvsrepohome/$cvsrepo; tar -zxf ../$cvsrepo.tar.gz)
  fi
fi

if [ ! -d repos ]; then
  mkdir repos
fi


if [ ! -f $PTII/adm/cvs2svn/cvs2svn-2.4.0/cvs2svn ]; then
    echo "$0 $cvsrepohome $cvsrepo: Warning: could not find $PTII/adm/cvs2svn/cvs2svn-2.4.0/cvs2svn?  see http://cvs2svn.tigris.org/. Quitting."
    exit 6
fi

echo "Converting the cvs repository `pwd`."
set -x

$PTII/adm/cvs2svn/cvs2svn-2.4.0/cvs2svn --default-eol=native --auto-props=/home/cxh/.subversion/config --encoding=ascii --encoding=utf8 --encoding=iso-8859-1 --fallback-encoding=utf8 -s repos/$cvsrepo $cvsrepohome/$cvsrepo/$cvsrepohome
set +x

echo "Checking out the $cvsrepo svn repository."
svnrepo=file:///`pwd`/repos/$cvsrepo

# rm -rf tmp.svn
if [ ! -d tmp.svn ]; then
    mkdir tmp.svn
fi

cd tmp.svn
svn co $svnrepo
cd ..
#cd $cvsrepo
#pwd
#svn mv trunk/$cvsrepo/* .
#svn commit -m "After conversion from cvs to svn, moved trunk/$cvsrepo to the toplevel."
#cd ../..

diff -w -I '\$Author:' -I '\$Date:' -I '\$Header' -I '\$Log' -I '\$Revision:' -I '\$Id' -r tmp.cvs/$cvsrepo tmp.svn/$cvsrepo/trunk/$cvsrepo | egrep -v 'Only in.*CVS$'

echo "$0: If everything looks good, then the next step is to run"
echo "$PTII/adm/cvs2svn/syncit $cvsrepohome $cvsrepo"
echo "$0 $cvsrepohome $cvsrepo: END"


