「precommit」スクリプトは、コミット時にのみトリガーされます。ユーザーが「中央」サーバーにプッシュするまでには、すでにコミットされており、precommit フックで何かを行うには遅すぎます。changegroup
開発者がプッシュしたときに「中央」サーバーで実行するようにトリガーされるフックを持つことができますがincoming
、それらはコミットを変更できません-コミットはその時点ですでにコミット/ベイク/完了されており、それらに反応することしかできません.
提案として、実際にはファイルにバージョン文字列を入れないでください。コミットごとに変更されるファイルを持つと、マージが面倒になります。代わりに、次の 1 つ以上を実行します。
- CI サーバー (Jenkins など) にすべてのプッシュでビルドを実行させ、ビルド スクリプトに渡すことができる Jenkins ビルド番号を使用します。
- バージョン文字列の一部として Mercurial ノード ID (ハッシュ) を使用すると、ビルドに含まれるリビジョンを常に正確に把握できます。ファイルに格納せず、ビルド (またはデプロイ) スクリプトでクエリを実行するだけです。
- フックを使用し
changegroup
て自動的にタグ オン プッシュを行います。これにより、きれいな (場合によっては連続した) 名前がコミットに適用されます (すべてのタグがコミットであるため、これによりコミット数がほぼ 2 倍になることに注意してください)。
個人的には、ビルド スクリプトで次のようなものを使用します。
build.sh --version_string=$(hg log -r . --template '{latesttag}.{latesttagdistance}-{node|short}')
1.0.3-5fd8ed67272e
これは、「バージョン 1.0 が nodeid 5fd8ed67272e でタグ付けされてからの変更セットの 3 つのコミットから構築された」と大まかに読むことができる" " のようなバージョン文字列を取得します。コンパイルに(コンパイルされた言語の場合)、またはVERSION
デプロイスクリプトがサーバーにアップロードするときにファイルに書き込みます。