雑記

2009年10月13日火曜日

svn mergeする時にRevision指定しなくてもいいシェルスクリプト

最近業務でsvnをバキバキ使いまくってます。
それであれやこれやとbranchからmergeすると、毎回Revisionを確認しなくちゃいけなくてその作業が非常にめんどう。
自分の場合、「最初にbranchしたRevisionからHeadまで」というパターンが主なので専用のスクリプトを組んでみた。

svn_merge.sh
#!/bin/sh


SVN=/usr/local/bin/svn
REVISIONS="^r[0-9]\s\|\s.+\s\|\s[0-9]\{4\}-[0-9]\{1,2\}-[0-9]\{1,2\}\s.+\|\s[0-9]+\sli
ne$"
REVISION_NO="s/r\([0-9]*\)/\1/"


if [ $# = 0 ];
  then
    exit -1
fi


FIRST_REV=`${SVN} log $1 --incremental | grep -e ${REVISIONS} | awk '{printf "%s\n", $
1}' | sed ${REVISION_NO} | tail -1`


echo "***** Dry Run *****"


SVNLOG=`${SVN} merge --dry-run -r ${FIRST_REV}:HEAD $1 $2`
echo ${SVNLOG}
echo "Merge OK? [y/n]:"


read ans


if [ ans = 'y' ];
  then
    SVNLOG=`${SVN} merge -r ${FIRST_REV}:HEAD $1 $2`
    echo ${SVNLOG}
fi


一回DryRunして、確認してからマージしてます。
最初のRev取ってるところは、svn logがきっとバージョンによって違うんだろうなぁ思ってみる・・・。

PATH通して、
svn_mrge.sh "マージしたいファイル" "対象ファイル"
でOKのはず。

やっぱりsvnは使いにくいから、いっそ対話型のもの作ろうかと思った。

0 件のコメント: