Subversion 1.6 では.svn、すべての作業コピー ディレクトリにディレクトリがありました。次のコードを使用すると、シェルへのアクセスや実行を必要とせずに現在のリビジョン番号をすばやく取得できます。
public function getSubversionRevision() {
if(file_exists("../.svn/entries")) {
$svn = File("../.svn/entries");
return (int)$svn[3];
}
return false;
}
Subversion 1.7 では、このコードが壊れています。.svnローカル リポジトリごとにディレクトリが 1 つだけになりました。このディレクトリにはファイルがありますが、entries私にとって役立つものはもうありません。必要なものはすべて SQLite データベースにあるようです。具体的にはwc.db。PHP の SQLite 関数を使用して必要な情報を取得できると思いますが、これはすべての (またはほぼすべての) ページの読み込みで実行するにはコストが高すぎるように思えます。
何か案は?関数を分割しexec、Subversion バイナリがインストールされている (そして $PATH に!) ことを期待するのは、最後の手段です。.svn要約すると、レポジトリのルート (チェックアウトの場所によって異なる可能性があります) にディレクトリを配置し、そこにあるファイル (おそらくwc.db) を費用対効果の高い方法で解析する方法を見つける必要があります。