awk メモ 1 svn 用

エリック・レイモンドの The Art Of Unix Programming には、awk なんて out of date な言語、今どき使ってるやつなんていねーよ的なことが書かれていたような記憶があるが、私は awk が好きだ。
そんな awk のメモ。今回は svn


svn で ? なファイルを消す

svn st | grep "^?" | awk '{ cmd = "rm -fr " $2; print cmd; system( cmd ); } END { print "\nsvn st\n"; system( "svn st" );}'


特定のファイルを、全てのリビジョンで取り出すシェルプロ

 fileName=$1
 svn update $fileName
 
 if [ ${#2} -ne 0 ]; then
        svn log --limit $2 $fileName | grep ^r[0-9] > /tmp/xx
 else
        svn log $fileName | grep ^r[0-9]  > /tmp/xx
 fi;
 
 cat /tmp/xx | awk '{ cmd = "svn update -" $1 " '$fileName' && mv '$fileName' /tmp/'$
 fileName'." $1; print cmd; system( cmd ); }'
 svn update $fileName


変更を全て戻す

svn st | awk '/^M/ { cmd = "svn revert " $2; gsub( /\\/, "/", cmd ); system( cmd ); }'

windows 用の svn を使っていない場合は、gsub の部分は不要。


運用上の問題によりレポジトリサーバが変わってしまったため entries の中身を無理やり変更する

find . | grep svn | grep entries | awk -f switch.awk

switch.awk の中身は
{
        cmd = "cat " $1 " | sed -e 's/古いサーバ名/新しいサーバ名/g' > /tmp/xx";
        system( cmd );

        cmd = "mv /tmp/xx " $1
        system( cmd );
}

system() 多用しているが、まぁ便利ということで