C#と諸々

C#がメインで他もまぁ諸々なブログです
おかしなこと書いてたら指摘してくれると嬉しいです(´・∀・`)
つーかコメント欲しい(´・ω・`)

2007/07/25 17:55
ビルド自動化のために。
PowerShell で Visual SourceSafe から最新のソースを取得するための関数。
VSSFLAG_RECURSYES フラグにより、プロジェクトツリー内のサブプロジェクトは再帰的に取得される。

[ パラメータ ]
sourcePathInVss
VSS 上のソースのパス ( ファイルまたはフォルダ )。

vssIniFilePath
srcsafe.ini ファイルのパス。

localPath
取得したソースを保存するローカルパス。
省略した場合、VSS で設定した作業フォルダに保存される。

loginUserName
ログインするユーザー名。
省略した場合、現在のユーザー名が使用される。

loginUserPassword
ログインするユーザーのパスワード。
省略した場合、空の文字列が使用される。


[ Get-LatestSource関数 ]
function Get-LatestSource
{
  Param([string] $sourcePathInVss, [string] $vssIniFilePath, [string] $localPath, [string] $loginUserName, [string] $loginUserPassword)
 
  $finallyBlock =
    {
      $vssDatabase.Close();
      [System.Runtime.InteropServices.Marshal]::ReleaseComObject($vssItem) | Out-Null;
      [System.Runtime.InteropServices.Marshal]::ReleaseComObject($vssDatabase) | Out-Null;
      trap { continue; }
    };
 
  [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualStudio.SourceSafe.Interop") | Out-Null;
  $vssDatabase = New-Object "Microsoft.VisualStudio.SourceSafe.Interop.VSSDatabaseClass" @();
  $vssDatabase.Open($vssIniFilePath, $loginUserName, $loginUserPassword);
 
  $vssItem = $vssDatabase.get_VSSItem($sourcePathInVss, $False);
  $flag = [Microsoft.VisualStudio.SourceSafe.Interop.VssFlags]::VSSFLAG_RECURSYES;
  $vssItem.Get([ref]$localPath, $flag);
 
  &$finallyBlock;
 
  trap
  {
    &$finallyBlock;
    break;
  }
}



[ 使用例 ]
Get-LatestSource "$/Hoge.root" "\\YokoKen\VSS\srcsafe.ini";



# 自分用に適当に作ったのであしからず。


[ ソース変更履歴 ]
2007/07/26

・第一パラメータに、VSS上でのパスを複数指定するのではなく、単一のパスを指定するように変更。
・第三パラメータを追加し、ソースを保存するローカルパスを指定できるように変更。
・COM オブジェクトの解放処理を追加。

2007/07/27
・$ErrorActionPreference 変数が "Stop" に設定された環境だと後処理が行われない可能性があったので、確実に行われるように修正。


【 ダウンロード 】
自作の PowerShell 関数は、以下の記事からまとめてダウンロードできます。

YokoKen.PowerShell.Scripts











トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/147-aa6fb76b