SVN の下に python プロジェクトがあり、実行時にバージョン番号を表示したいと考えています。これを行う方法はありますか (コミット時に短いスクリプトを自動的に実行して、バージョン ファイルを更新したり、Python で SVN リポジトリをクエリしたりしますか?)
11 に答える
Python の仕様についてはよくわかりませんが、文字列 $Revision$ をファイルのどこかに入れ、SVN 構成で enable-auto-props=true を指定すると、 $Revision: 144$ のように書き換えられます。 . その後、スクリプトでこれを解析できます。
文字列はコミットまたは更新時にファイルにハードコーディングされるため、SVN リポジトリのクエリなどのオーバーヘッドはありません。
Python でこれをどのように解析するかはわかりませんが、PHP では次のようにします。
$revString = '$Revision: 144$';
if(preg_match('/: ([0-9]+)\$/', $revString, $matches) {
echo 'Revision is ' . $matches[1];
}
似ていますが、PHP の回答よりも少し Pythonic です。これをモジュールに入れます__init__.py
:
__version__ = filter(str.isdigit, "$Revision: 13 $")
そして、必ず Revision プロパティを追加してください:
svn propset svn:keywords Revision __init__.py
リポジトリ内のファイルhooks/pre-commit
は、コミットが成功する前に実行されるスクリプトまたはプログラムです。これを、コミット時に適切なバージョン番号でファイルを更新するスクリプトにするだけです (リビジョン番号は実行時にスクリプトに渡されます)。pre-commit フックの記述例を含むチュートリアルを次に示します: http://wordaligned.org/articles/a-subversion-pre-commit-hook
Django には、これを可能にするコードのスニペットがあります。参照することをお勧めします。http://code.djangoproject.com/browser/django/trunk/django/utils/version.py
これは、プロジェクトのビルド時に簡単なスクリプトを実行するだけで実現できます。このスクリプトは、sed と組み合わせて svn info を呼び出すだけで、素のリビジョン データを取得し、その番号を rev.txt ファイルに挿入します。
Hudson ビルド サーバーは、ビルド スクリプトを呼び出す直前に SVN リビジョン番号を環境変数として設定するため、さらに簡単になります。
pysvnをチェックしてください。Subversion ランタイム機能用の Python の拡張機能を公開します。
実行時のセクションが少しあいまいだと思います-どこから実行したときですか?SVNチェックアウトからまたはリリースされたコードから?すべてのソリューションは、SVNバージョンをPythonソースまたはリポジトリ内の別のバージョンファイルのどこかに挿入することで機能します。
フレッシュチェックアウト時にバージョンファイルが変更されるため、配布前にクリーンチェックアウトを行う必要があります。したがって、プログラムがどこで実行されているかについての私の質問は残っています。