とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

SubWCRev の COMインターフェースを秀丸マクロから使ってみる。

TortoiseSVN には SubWCRev というツールが付属しています。

ソースコード中のキーワード文字列をリビジョン番号で置換できるようです。(アプリの about ダイアログにリビジョン番号を表示とか)



ヘルプに目を通していると COM インターフェースが提供されていて javascript のサンプルが載っていました。
思い立ったが吉日、秀丸マクロに書き直してみました。

マニュアル

オフライン

Subversion クライアント for Windows」の日本語ヘルプ
「第5章 SubWCRev プログラム」を参照

オンライン

第5章 SubWCRev プログラム
http://tortoisesvn.net/docs/nightly/TortoiseSVN_ja/tsvn-subwcrev.html

マニュアル付属のサンプル

一部抜粋して引用。

// testCOM.js - javascript file
// test script for the SubWCRev COM/Automation-object

filesystem = new ActiveXObject("Scripting.FileSystemObject");
revObject1 = new ActiveXObject("SubWCRev.object");
revObject1.GetWCInfo(filesystem.GetAbsolutePathName("d:\\my_app\\trunk"), 1, 1);
wcInfoString1 = "Revision = " + revObject1.Revision + 
				"\nMin Revision = " + revObject1.MinRev + 
				"\nMax Revision = " + revObject1.MaxRev + 
				"\nDate = " + revObject1.Date + 
				"\nURL = " + revObject1.Url + "\nAuthor = " + 
				revObject1.Author + "\nHasMods = " + 
				revObject1.HasModifications + "\nIsSvnItem = " + 
				revObject1.IsSvnItem + "\nNeedsLocking = " + 
				revObject1.NeedsLocking + "\nIsLocked = " + 
				revObject1.IsLocked + "\nLockCreationDate = " + 
				revObject1.LockCreationDate + "\nLockOwner = " + 
				revObject1.LockOwner + "\nLockComment = " + 
				revObject1.LockComment;
WScript.Echo(wcInfoString1);

実行結果。

秀丸マクロ版

//秀丸マクロ版。
#filesystem = createobject("Scripting.FileSystemObject");
#revObject1 = createobject("SubWCRev.object");

//ファイル名、又は、ディレクトリ名
$abs_path = callmethod_returnstr(#filesystem, "GetAbsolutePathName", "d:\\my_app\\trunk");

callmethod #revObject1, "GetWCInfo", $abs_path, 1, 1;

$wcInfoString1 = "Revision = " + str(getpropnum(#revObject1, "Revision")) + 
				"\nMin Revision = " + str(getpropnum(#revObject1, "MinRev")) + 
				"\nMax Revision = " + str(getpropnum(#revObject1, "MaxRev")) + 
				"\nDate = " + getpropstr(#revObject1, "Date") + 
				"\nURL = " + getpropstr(#revObject1, "Url") + "\nAuthor = " + 
				getpropstr(#revObject1, "Author") + "\nHasMods = " + 
				str(getpropnum(#revObject1, "HasModifications")) + "\nIsSvnItem = " + 
				str(getpropnum(#revObject1, "IsSvnItem ")) + "\nNeedsLocking = " + 
				str(getpropnum(#revObject1, "NeedsLocking ")) + "\nIsLocked = " + 
				str(getpropnum(#revObject1, "IsLocked ")) + "\nLockCreationDate = " + 
				getpropstr(#revObject1, "LockCreationDate") + "\nLockOwner = " + 
				getpropstr(#revObject1, "LockOwner") + "\nLockComment = " + 
				getpropstr(#revObject1, "LockComment");
message($wcInfoString1);
releaseobject #revObject1;

実行結果。

まとめ

ダイアログが起動しないため融通が利きそうですが、
「ファイル名とリビジョン」の一覧表(CSV)を作るくらいしか用途が思いつきません。