Subversion リポジトリ番号をコードに取り込む
質問
コード内でプロジェクトのバージョンを記録する方法を実装して、テスト時に使用したり、バグを追跡したりできるようにしたいと考えています。使用するのに最適なバージョン番号は、Subversion の現在のリビジョン番号であるようです。この数値を (私の場合は C++) ヘッダー ファイルなどにフックして、コード内で取得できる簡単な方法はありますか?これはポストコミットフックか何かだと思いますか?
これを実装した経験のある人はいますか (コードを共有してください)、あるいはより良い代替案を提案できる人はいますか?ありがとう。
解決
気の利いたものではありますが、リビジョン キーワード トリックは、そのリビジョンで変更された場合にのみファイルを更新します。ファイルを変更しない場合、古いリビジョンが反映され続けます。
ソフトウェアに常に全体のリビジョン番号を反映させたい場合は、以下の点を詳しく調べる必要があります。 関連する SVN エントリ ファイル それを抽出します。これはそれほど難しくありません (XML ファイルです)。
ウィキペディアではこれを行っています バージョンページ ライブで実行されているソフトウェアのリビジョンを示します。 コードはここにあります - を探してください getSvnRevision() 方法。
他のヒント
ふたつのやり方:
埋め込む $ID$ または $改訂$ コード内で。次に設定します svn:keywords="ID リビジョン" ファイルのプロパティ。これにより、そのソース ファイルの最後に変更されたリビジョンが得られます。小規模なプロジェクトやスクリプトに適しています。
あるいは、Makefile 主導のプロセスとコマンド ライン ツール svnversion を使用します。(言語固有 - これは C/C++ で機能するはずです)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
または、sed と version.h.in を使用したより複雑なビルド スクリプト。それからちょうど #include version.h
これにより、リポジトリのバージョン番号が得られます。これはコミットや更新のたびに変化し、おそらくほとんどのプロジェクトにとってより適切なバージョン番号になります。
注記:また、手動で更新する人間が判読できるバージョン文字列も使用しました。例では次のようになります。 バージョン:1.0.1-r13445
~J
TortoiseSVN の一部である SubWCRev を使用することもできます。
SubWCRev は、Subversion 作業コピーのステータスを読み取り、オプションでテンプレート ファイル内のキーワード置換を実行するために使用できる Windows コンソール プログラムです。これは、構築中のオブジェクトに作業コピー情報を組み込む手段として、構築プロセスの一部としてよく使用されます。通常、「バージョン情報」ボックスにリビジョン番号を含めるために使用されます。
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
Makefile に以下を追加します。
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
それからマクロを使用できます SVN_REV
コード内の任意の場所、たとえば:
printf ("Version: SVN %s\n", SVN_REV);
使用できます svn:keywords
を有効にするプロパティ Rev
キーワード。
その後、使用できます $Rev$
コードに含めると、更新時に SVN が自動的に展開します。 $Rev: 256 $
これで解析できます...
優れた最新のソリューション:
を作成します Makefile
次の行が含まれています(と同じフォルダーにあります) YourFile.dox
):
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
そして YourFile.dox
これを含める必要があります:
...
PROJECT_NUMBER = "Revision RevNumber"
...
今:
sed
置き換えるRevNumber
.dox 内の出力は次のとおりです。svnversion
(リポジトリのメイン フォルダーで実行)、変更したファイルを次の場所に保存します。YourFileDummy.dox
doxygen
に実行されますYourFileDummy.dox
ドキュメントを生成するには- これで、ドキュメントにリビジョン番号が含まれるようになります。