Domanda

I have the following problem. I need to organize automatic upload to deploy server from svn repository, but with some feautures. There is how I wrote it:

# $1 - project; $2 - version (optional)
#   rm -rf $projectDir
if [ "$2" == '' ]; then
    svn export $trunk $projectDir --force >> $log
    version=`svn info $trunk | grep Revision | awk '{print$2}'`
    svn copy $trunk $tags/$version -m "created while uploading last version of $1"
    echo "New stable version #$version of $1 is created
    Uploading to last version is completed successfully"
else
    version=$2
    svn export $tags/$version/ $projectDir --force >> $log
    echo "Revert to version #$version is completed successfully"
fi

echo $version > $projectDir/version

chown -R $1:$1 $projectDir

But svn export doesn't delete deleted via svn files, so I need to clean directory before export every time. It's not good. Before this, I work with checkout for deploy like this:

svn co $trunk >> $log
cp -ruf trunk/* $projectDir
svn info $trunk | grep Revision > $projectDir/version
chown -R $project:$project $projectDir
echo "uploading finished"

This work very well and very very faster (it changes only changed files) than the export, but:

  1. without automatic tag creating;
  2. without opportunity for nice reverting.

In my last script co doesn't work, because it trying to checkout in one directory from different repository directories (trunk/some tag), which isn't real.

So, question:

  1. Can I relocate project before checkout?
  2. Can I find the diff with co version and existing version before export?
  3. What can I do with diff result? (remove unneeded files after export?)

Thanks in advance.

È stato utile?

Soluzione 2

For the basis for the solution was taken following code:

It's simpler and fully solves the problem as for me.

if [ "$2" == '' ]; then
    version=`svn info ${trunk} | grep Revision | awk '{print$2}'`
    if [ `cat ${projectWWW}/version` == "${version}" ]; then
        resultMessage="Project is up to date"
    else
        svn co ${trunk} ${projectRoot}/co >> ${log}
        cp -ruf ${projectRoot}/co/ ${projectRoot}/releases/${version}
        chown -R $1:$1 ${projectRoot}/releases/${version}
        resultMessage="New stable version #$version of $1 is created
        Uploading to last version is completed successfully"
   fi
else
    version=$2
    resultMessage="Revert to version #$version is completed successfully"
fi

ln -s ${projectRoot}/releases/${version} ${projectWWW}
echo ${version} > ${projectWWW}/version
echo ${resultMessage} >> ${log}

Altri suggerimenti

Have you evaluated Capistrano? It can do a lot of what you're trying to achieve.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top