Ubuntu で SVN差分のある変更ファイルをexportする

やりたいことは以下

  • SVNコマンドで変更したファイル一覧をExportしたい
  • 変更したファイルについては、変更前のソースもExportしたい
  • 上記2つよりDiffツールを使ってファイル差分を見たい
  • SVNの差分ファイル一覧は svn diff | awk '/^Index/ {print $NF}' で取得できる

以下、作成したプログラム

#!/bin/bash
################################################################################
# SETTINGS.
ROOTDIR=/env/android-
OUTDIR=~/デスクトップ
FIXDIR=fix
ORGDIR=original
################################################################################
shellFileName=`basename $0`

fncEchoLog()
{
    dateStr=`date '+%Y%m%d:%H:%M:%S'`
    outMsg="[$shellFileName] $dateStr $*"
    echo "$outMsg"
}

copyParents()
{
    targetFile=$1
    fncEchoLog "=> $targetFile"
    cp -p --parents $targetFile $OUTDIR
}

svnRevert()
{
    targetFile=$1
    fncEchoLog "=> $targetFile"
    svn revert $targetFile
}

compareable()
{
    targetFile=$1
    fncEchoLog "=> $targetFile"

    cp -p --parents $targetFile $OUTDIR/$FIXDIR
    svn revert $targetFile
    cp -p --parents $targetFile $OUTDIR/$ORGDIR
    cp -pf $OUTDIR/$FIXDIR/$targetFile $ROOTDIR/$targetFile
}

copyRevert()
{
    targetFile=$1
    fncEchoLog "=> $targetFile"
    cp -p --parents $targetFile $OUTDIR
    svn revert $targetFile
}

################################################################################
fncEchoLog "--------------------------------------------------------------------"
fncEchoLog ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> MISSIOIN START"
fncEchoLog "--------------------------------------------------------------------"
fncEchoLog "TARGET DIR [$ROOTDIR]"
fncEchoLog "OUTPUT DIR [$OUTDIR]"

cd $ROOTDIR
fncEchoLog "now checking fixed files..."
FIXED_FILES="`svn diff | awk '/^Index/ {print $NF}'`"

fncEchoLog "your fixed files of $ROOTDIR ..."
echo ""
for fff in $FIXED_FILES
do
    echo $fff
done
echo ""

fncEchoLog "choose your mission type. 1:copy(default)/2:svn revert/3:compareable/4:copy and revert"
read prcType
fncEchoLog "2m"
sleep 1
fncEchoLog "1m"
sleep 1
mPrcType=1
if [ "$prcType" = "2" ] ; then
    mPrcType=2
elif [ "$prcType" = "3" ] ; then
    mPrcType=3
    if [ ! -d $OUTDIR/$FIXDIR ] ; then
        fncEchoLog "create directory... $OUTDIR/$FIXDIR"
        mkdir $OUTDIR/$FIXDIR
    fi
    if [ ! -d $OUTDIR/$ORGDIR ] ; then
        fncEchoLog "create directory... $OUTDIR/$ORGDIR"
        mkdir $OUTDIR/$ORGDIR
    fi
elif [ "$prcType" = "4" ] ; then
    mPrcType=4
fi

for fff in $FIXED_FILES
do
    if [ $mPrcType -eq 1 ] ; then
        copyParents $fff
    elif [ $mPrcType -eq 2 ] ; then
        svnRevert $fff
    elif [ $mPrcType -eq 3 ] ; then
        compareable $fff
    elif [ $mPrcType -eq 4 ] ; then
        copyRevert $fff
    fi
done

fncEchoLog ""
fncEchoLog "--------------------------------------------------------------------"
fncEchoLog "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< MISSIOIN COMPLETE"
fncEchoLog "--------------------------------------------------------------------"
read Wait