Tracのバックアップ

会社で使っているTracのバックアップをするスクリプトPowerShellで作ってみた。

readonly TRAC_HOME "D:\trac-0.1.1"
readonly BACKUP_HOME "F:\Trac-Backup"
readonly SVN_REPO (Join-Path $TRAC_HOME "svn_repo\projects")

readonly SVN_ADMIN (Join-Path $TRAC_HOME "subversion\bin\svnadmin.exe")
readonly TRAC_ADMIN (Join-Path $TRAC_HOME "admin\trac\trac-admin.bat")

###############################################################################
# 関数名:
#       Backup-Trac
# 説明:
#       指定したプロジェクトIDのTracプロジェクトをバックアップします。
# 引数:
#       $projectID      :   プロジェクトID
#       $projectOnly    :   プロジェクトのみバックアップする
###############################################################################
function Backup-Trac([string]$projectID, [switch]$projectOnly) {
    $curDir = Get-Location
    $backupDir = (Join-Path $BACKUP_HOME (Get-Date -format "yyyyMMdd"))
    
    New-Item (Join-Path $backupDir $projectID) -force -type "Directory"
    $Env:PROJECT_ID = $projectID
    
    Set-Location (Join-Path $TRAC_HOME "admin\trac")
    .$TRAC_ADMIN hotcopy (Join-Path $backupDir $projectID"\trac")
    
    if(!$projectOnly) {
        Set-Location (Join-Path $TRAC_HOME "subversion\bin")
        .$SVN_ADMIN hotcopy (Join-Path $SVN_REPO $projectID) (Join-Path $backupDir $projectID"\subversion")
    }
    Set-Location $curDir
}
Set-Alias bktrac Backup-Trac

# バックアップ開始
bktrac default
bktrac wiki -projectOnly

特になんのひねりもない。

っと、実行にはこの関数が必要やった。

###############################################################################
# 関数名:
#       Define-ReadOnly (readonly)
# 説明:
#       指定した名前で読み取り専用の変数を定義します。
# 引数:
#       $name       :   変数名
#       $value      :   値
#       $scope      :   変数のスコープ
###############################################################################
function Define-ReadOnly([string]$name, [object]$value, [string]$scope="script") {
    if($name.Length -eq 0) {
        Write-Error "変数名を指定してください" -Category InvalidArgument
    } elseif($value -eq $null) {
        Write-Error "値を指定してください" -Category InvalidArgument
    } else {
        Remove-Variable -force $name -ErrorAction SilentlyContinue
        Set-Variable $name $value -option ReadOnly -scope $scope
    }
}
Set-Alias readonly Define-ReadOnly

読み取り専用の変数を設定する関数。

このスクリプトをタスクに仕込んで定期的バックアップが完成。