サクラエディタで svn|git log/blame

サクラエディタで、現在のファイルに対して、 svn|git log と svn|git blame を発行するマクロです。
\\192.168.x.x 形式へは git.exeとか svn.exe が対応していないので、 mount -t cifs で逆にマウントするか、ネットワークフォルダ割り当てをしてください。

個のルーチンを動かすには、svnまたは、gitが必要です。
GIT
https://git-for-windows.github.io/

SVN
https://www.softel.co.jp/blogs/tech/archives/4667


このルーチンには表示時にバグが1つあります。
サクラエディタはケチなので toSJIS関数をマクロから使わせてくれないので、一部日本語が文字化けすることがあります。
たとえば、 ソースコードUTF-8で書いていると、 blameとかの結果が文字化けします。
これは、サクラエディタが、外部出力はShift-JISを要求しているのにもかかわらず、 ToSJIS 変換ルーチンをマクロへ提供していないためです。

//サクラエディタで svn|git log/blame
//
//現在、編集しているファイルの履歴を表示
//
//作った人 rti7743
//ライセンス: NYSL / CC0 / Public Domain / ご自由に

//コマンドを実行して、その結果から、特定の文字列を含まない行だけを取得.
//return `cmd | grep -v foo`; 
//
//バグ: サクラエディタはケチなので toSJIS関数をマクロから使わせてくれないので、一部日本語が文字化けすることがあります。

function system(cmd,ignoreMessageArray)
{
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var shell = new ActiveXObject("WScript.Shell");
	
	var stdout = fso.GetTempName();
//	var stdout="c:\\temp\\aa.txt";
	
	cmd = "cmd.exe /c " + cmd + " > \"" + stdout + "\" 2>&1";
	shell.Run(cmd,0,1);

	var result = "";
	var fs = fso.OpenTextFile(stdout,1);
	while(! fs.AtEndOfStream )
	{
		var line = fs.ReadLine();
		var found = false;
		for(var i in ignoreMessageArray)
		{
			if ( line.indexOf( ignoreMessageArray[i] ) >= 0)
			{
				found = true;
			}
		}
		if (found)
		{
			continue;
		}
		result += line + "\r\n";
	}
	fs.Close();

	fso.DeleteFile(stdout);
	
	return result;
}

function main()
{
	var filename = "\"" + Editor.GetFilename() + "\"";

	var result = "";
	var cmd="";

	//GIT
	//DOWNLOAD https://git-for-windows.github.io/
	cmd = "git log " + filename;
	result = system(cmd,["Not a git repository"] );
	if (result.length > 0)
	{
		Editor.TraceOut(result,2);
		ActivateWinOutput();

		cmd = "git blame " + filename;
		result = system(cmd,[] );
		Editor.TraceOut(result,2);
		return ;
	}

	//SVN
	//DOWNLOAD https://www.softel.co.jp/blogs/tech/archives/4667
	cmd = "svn log " + filename;
	result = system(cmd,["is not a working copy"] );
	if (result.length > 0)
	{
		Editor.TraceOut(result,2);
		ActivateWinOutput();

		cmd = "svn blame " + filename;
		result = system(cmd,[] );
		Editor.TraceOut(result,2);
		return ;
	}
}
main();