2015年1月9日 星期五

php的svn_log()速度過慢

目標:
在網頁上顯示svn log

使用php的svn_log()函數
php官方文件的svn_log():
array svn_log ( string $repos_url [, int $start_revision [, int $end_revision [, int $limit= 0 [, int $flags = SVN_DISCOVER_CHANGED_PATHS | SVN_STOP_ON_COPY ]]]] )
$start_revision 、$end_revision和$limit  設0 代表無限制
$flags:
SVN_DISCOVER_CHANGED_PATHS - 顯示所有值(預設)
SVN_OMIT_MESSAGES - 不顯示msg和paths
SVN_STOP_ON_COPY - 不顯示paths

例:
svn_auth_set_parameter(SVN_AUTH_PARAM_DEFAULT_USERNAME, 'username');
svn_auth_set_parameter(SVN_AUTH_PARAM_DEFAULT_PASSWORD, 'password');
$log = svn_log('http://svn.xxx/repos/trunk', 1, 2, 1);
OUTPUT:
$log:Array
(
    [0] => Array
        (
            [rev] => 1
            [author] => root
            [msg] => init
            [date] => 2014-10-29T04:13:15.632694Z
            [paths] => Array
                (
                    [0] => Array
                        (
                            [action] => A
                            [path] => /branches
                        )
                )
        )
)


因為某些commit提交檔案太多,即使調整$flags,svn_log()速度依然很慢
只好使用原生的svn log來在網頁上顯示紀錄
PHP:
exec("export LANG=zh_TW.UTF8; svn log file:///path/to/svndb/repos/ ", $svn_log);
注意:
export LANG=zh_TW.UTF8; 很重要,否則出來會是亂碼,我用system("export")看不到LANG的設定,而且export LANG=zh_TW.UTF8;和 svn log 必須寫在同一個exec()中

然後細節在處理$svn_log陣列即可顯示到網頁上

參考資料:
http://php.net/manual/en/function.svn-log.php

沒有留言:

張貼留言