社員ブログ
HOME  社員ブログ
ホーム > 社員:ピーター, 雑記 > SVNリポジトリのURLをエクスプローラのステータスバーに表示

SVNリポジトリのURLをエクスプローラのステータスバーに表示

2014年01月13日 9時00分35秒

こんにちは、ピーターです。

JScriptを書きました。

SVNのバージョン管理下のフォルダをエクスプローラで開いてこのスクリプトを実行すると、ステータスバーにSVNリポジトリのURLを表示します。

repo

F5で消えます。

トランクとブランチを行ったり来たりしていると、今どっちを見ているのかわからなくなるんですよね。

今まではエクスプローラの何もないところを右クリック→プロパティ→Subversionタブ→URL で確認していましたが、それが面倒になりました。

私はフォルダをタブで表示するQTTabBarを使っていて、QTTabBarのアプリケーションにこのスクリプトを登録し、ショートカットキー Ctrl + Eで呼び出して使っています。

svnにパスが通っていればそのまま使えると思います。
パスが通っていなければスクリプト中のsvnをフルパスで指定すれば動くと思います。

var wsh_shell = new ActiveXObject('WScript.Shell');
var fso = new ActiveXObject('Scripting.FileSystemObject');

var windows = getWindows();
var temp_path = getTempPath();
var repo_url;

// エクスプローラのステータスバーにリポジトリのURLを表示
for ( var i = 0, n = windows.count, w; i < n; i++ ) {
    w = windows(i);    
    repo_url = getRepoUrl(w.LocationURL);
    if (repo_url) {
        w.StatusText = repo_url;
    }
}

deleteFile(temp_path);




// 開いているエクスプローラをすべて取得
function getWindows() {
    var shell_app = new ActiveXObject('Shell.Application');
    return shell_app.Windows();
}

// 一時ファイル名をフルパスで取得
function getTempPath() {
    return getTempDir() + 'svn.info';
}

// 一時フォルダを取得
function getTempDir() {
    var TemporaryFolder = 2;
    return fso.GetSpecialFolder(TemporaryFolder) + '\\';
}

// リポジトリのURLを取得
function getRepoUrl(target_dir) {
    var target_dir_ = toRepoUrl(target_dir);
    var svn_info = getSvnInfo(target_dir_);
    var url = svn_info.match(/^URL: .*/m);
    return url;
}

// 「file:///」で始まるパスから「file:///」を削除
function toRepoUrl(url) {
    return decodeURI(url.replace(/^file:/, '').replace(/^\/\/\//, ''));
}

// svn infoコマンドの結果を取得
function getSvnInfo(target_dir) {
    var command = 'cmd /c svn info "' + target_dir + '" > ' + temp_path;
    runCommand(command);
    return getText(temp_path);
}

// コマンドラインを実行
function runCommand(command) {
    return wsh_shell.Run(command, 0, true);
}

// ファイルの内容を取得
function getText(path) {
    var file, content = '';
   
    try {
        file = fso.OpenTextFile(path);
        content = file.ReadAll();
    } catch(e) {
        ;
    } finally {
        if (file) {
            file.Close();
        }
    }
    
    return content;
}

// ファイルを削除
function deleteFile(path) {
    try {
        fso.DeleteFile(temp_path);
    } catch(e) {
        ;
    }
}

社員:ピーター, 雑記

  1. コメントはまだありません
  1. トラックバックはまだありません