我在TheHostingTool中实现了 Subversion 1.7 修订检索的笨拙(但相对彻底)的实现。检查提交消息以获取解释。该函数包含在class_main.php 中,它是/trunk (/trunk/includes/class_main.php) 之后的一个目录。您需要根据您的特定需求调整相对路径。这是在 class_main.php 中找到的函数的略微修改版本,可在其他地方使用。
public function getSubversionRevision() {
// This will work for Subverson 1.6 clients and below
if(file_exists("../.svn/entries")) {
$svn = File("../.svn/entries");
return (int)$svn[3];
}
// Check the previous directories recursively looking for wc.db (Subversion 1.7)
$searchDepth = 3; // Max search depth
// Do we have PDO? And do we have the SQLite PDO driver?
if(!extension_loaded('PDO') || !extension_loaded('pdo_sqlite')) {
$searchDepth = 0; // Don't even bother...
}
for($i = 1; $i <= $searchDepth; $i++) {
$dotdot .= '../';
if(!file_exists("$dotdot.svn/wc.db")) {
continue;
}
$wcdb = new PDO("sqlite:$dotdot.svn/wc.db");
$result = $wcdb->query('SELECT "revision" FROM "NODES" WHERE "repos_path" = "'.basename(realpath('..')).'"');
return (int)$result->fetchColumn();
}
if($this->canRun('exec')) {
exec('svnversion ' . realpath('..'), $out, $return);
// For this to work, svnversion must be in your PHP's PATH enviroment variable
if($return === 0 && $out[0] != "Unversioned directory") {
return (int)$out[0];
}
}
return false;
}
如果您不是从 1 开始,.= '../'
您可能不想使用 str_repeat。或者,您可以简单地$dotdot
提前定义到您想开始的任何地方。