FrontPage

EasySkeletonForSvn

SVNを導入する場合、実際はリポジトリの作成やスケルトンの準備など意外に面倒な作業が多いわけです。その辺を改善できるスクリプトです。

準備

  1. 新規プロジェクトディレクトリの配置用ディレクトリを作る
  2. スケルトンディレクトリを作る
    • 要するに、00_顧客受領資料、10_開発環境・・・・みたいなディレクトリ達
    • 配置用ディレクトリの下に配置する
  3. 配置用ディレクトリを共有可能にする
    • samba、ftp、sftp、nfs別に何でも良い
  4. このシェルをcrontabに登録して1分間隔程度で回しておく
    • すいません、私はrootで回してます。

変数の説明、および値の例

変数説明
SRCDIR配置用ディレクトリ/var/share
REPOS_DIRsvnのリポジトリベースディレクトリ/var/svn
WWW_USERapacheの起動ユーザwww-data
LOCKFILE処理ログ兼ロックファイルrepository_create_log.txt
SKELETONスケルトンディレクトリProjectSkeleton?
SVN_URLSVNのURLhttp://192.168.1.5/svn
SVN_USER初期コミット時のSVNのユーザsvnuser
SVN_PASS上記ユーザのパスワードsvnpass

スクリプト本体

上記の値の例にしたがった場合のスクリプト

#!/bin/bash
SRCDIR=/var/share
REPOS_DIR=/var/svn
WWW_USER=www-data
LOCKFILE=repository_create_log.txt

#SKELETON DIRECTRY
SKELETON=ProjectSkeleton

#SVN INFOMATIONS
SVN_URL=http://192.168.1.5/svn
SVN_USER=svnuser
SVN_PASS=svnpass

function svnImport
{
  #import directories
  svn import -m "First Import" \
  $3 \
  $SVN_URL/$1 \
  --username $SVN_USER \
  --password $SVN_PASS >> $2/$LOCKFILE
}

function svnCreate
{
  #create svn repository
  svnadmin create --fs-type fsfs $1 >> $2/$LOCKFILE
  chown -R $WWW_USER.$WWW_USER $1 >> $2/$LOCKFILE
  chmod -R g+ws $1 >> $2/$LOCKFILE
}

for target in `ls $SRCDIR`
do
  #source directory
  srcRepo=$SRCDIR/$target
  #svn repositry directory
  newRepo=$REPOS_DIR/$target

  if [ $SKELETON != $target ] && \
     [ ! -e $newRepo ] && \
     [ -d $srcRepo ] && \
     [ ! -e $srcRepo/$LOCKFILE ] 
  then
    #make lock file
    touch $srcRepo/$LOCKFILE
    chown $WWW_USER.$WWW_USER $srcRepo/$LOCKFILE
    #startlog
    echo '['`date +%F' '%T`'] start!'>> $srcRepo/$LOCKFILE

    #create svn repository
    svnCreate $newRepo $srcRepo

    #endlog
    echo 'SVN Repository was created successful!'>> $srcRepo/$LOCKFILE
    echo Your SVN Repository is [$newRepo]>> $srcRepo/$LOCKFILE
    echo URL: [$SVN_URL/$target]>> $srcRepo/$LOCKFILE
    
    #import skeleton
    if [ `ls -1 $srcRepo|grep -v $LOCKFILE |wc -l` -eq 0 ]
    then
      #import skeleton directory
      svnImport $target $srcRepo $SRCDIR/$SKELETON
    else
      #import sub directory
      svnImport $target $srcRepo $srcRepo
    fi
  fi
done
exit 0

エンドユーザによる使い方

スケルトンを利用する場合

  1. 共有してある配置用ディレクトリ(/var/share)にプロジェクト名のフォルダをコピーする
    • 中身は空にすること
    • この場合はプロジェクト名のフォルダをSample1とする
  2. cronにより自動的に下記のURLでプロジェクトが用意される
  3. 配置したプロジェクトディレクトリの下位に処理ログが出力される
    • /var/share/Sample1/repository_create_log.txt

スケルトンを利用せず初期ディレクトリをカスタマイズしたい場合

  1. 共有してある配置用ディレクトリ(/var/share)にプロジェクト名のフォルダをコピーする。
    • 下位にインポートしておきたいフォルダやファイルを配置しておく
    • この場合はプロジェクト名のフォルダをSample2とする
  2. cronにより自動的に下記のURLでプロジェクトが用意される
  3. 配置したプロジェクトディレクトリの下位に処理ログが出力される
    • /var/share/Sample2/repository_create_log.txt

備考

以下のディレクトリはリポジトリ生成対象とならない

  1. ロックファイル兼ログファイルが存在するディレクトリ
    • repository_create_log.txt
  2. 既にSVNリポジトリとして存在するディレクトリ
  3. スケルトンディレクトリ

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2010-03-14 (日) 07:02:39 (2570d)