expectで自動化

CVSリポジトリから最新を取得して、
public_htmlに設定するのを、expectを使って自動化。


以下の事を行う。*1

  1. 現在の日付を出力
  2. CVSへの接続
  3. CVSから最新の取得
  4. CVSから切断
  5. 取得したプロジェクト内のCVSフォルダを削除
  6. 既存のpublic_htmlを日付をつけてリネーム
  7. 取得したプロジェクトをpublic_htmlにリネーム


update.shとか適当なファイル名で作って実行。

#! /usr/bin/expect --

set timeout -1
#log_file file_name

####                            Setting                                 ####
## TODO expect で$変数はそのまま使えるのか?
## Repository Name
set repositoryName project_name
\
####                          Setting-END                               ####

puts stdout "HELLO !"

puts stdout [clock format [clock seconds] -format {%Y/%m/%d(%a) %p %I:%M:%S}]
puts stdout "Try file update."

##-- SU USER --##
spawn su - user_name
##--

##-- CVS_LOGIN --##
puts stdout "CVS try login..."
spawn cvs -d :pserver:user_name@***.***.***.***:/home/cvs/ login
sleep 1
#expect "Logging in to :pserver:user_name@***.***.***.***:2401/home/cvs"
expect "CVS password:"
send "**********\r"
expect eof
puts stdout "CVS login sucess."
##--

##-- CVS_CHECKOUT --##
spawn cvs -d :pserver:user_name@***.***.***.***:/home/cvs/ co $repositoryName
sleep 1
expect "cvs checkout: Updating "
## TODO CVS名も指定できるように
#expect "cvs checkout: Updating project_name"
expect eof
puts stdout "Checkout OK."
##--

##--CVS_LOGOUT --##
puts stdout "CVS logout..."
spawn cvs -d :pserver:user_name@***.***.***.***:/home/cvs/ logout
expect "Logging out of :pserver:user_name@***.***.***.***:2401/home/cvs"
expect eof
puts stdout "CVS logout sucess."
##--

puts stdout "ProjectSetting..."
##--CVS FOLDER DELETE --##
puts stdout "CVS System folder delete..."
exec find $repositoryName -name CVS -type d | xargs rm -rfv
puts stdout "OK."
##--

##-- OLD FOLDER BUCKUP --##
puts stdout "Old folder backup..."
set now [clock format [clock seconds] -format {%Y%m%d_%H%M%S}]
#puts stdout $now
set toFolder public_html
append toFolder _
append toFolder $now
exec mv public_html/ $toFolder
puts stdout "OK."
##--

##-- New FOLDER MOVE --##
puts stdout "New folder move..."
exec mv $repositoryName public_html
puts stdout "OK."
#--

puts stdout "Bye-bye !"

*2
*3

><

*1:改善点は思いついたら書いていきます

*2:接続ユーザ名、HOST名、パスワードとかは上に変数でまとめて書きたい

*3:CVSに接続できない時など、エラー処理をするようにしたい。