2016-07-27 16 views
3

'OutputType'とこの設定を省略した場合、GitVersionエイリアスによって返されるオブジェクトが異なるのは正常ですか?GitVersionから返されたオブジェクトに一貫性がありません

Iは、出力タイプを指定すると、返されたオブジェクトのプロパティは全て「NULL」であるが、私は、設定を省略した場合、特性は、例えば期待値

に設定されている:

Task("Version") 
.Does(() => 
{ 
var versionInfo = GitVersion(new GitVersionSettings() 
{ 
    UpdateAssemblyInfo = true, 
    OutputType = GitVersionOutput.BuildServer 
}); 
Information("MajorMinorPatch: {0}", versionInfo.MajorMinorPatch); 
Information("FullSemVer: {0}", versionInfo.FullSemVer); 
Information("InformationalVersion: {0}", versionInfo.InformationalVersion); 
Information("LegacySemVer: {0}", versionInfo.LegacySemVer); 
Information("Nuget v1 version: {0}", versionInfo.NuGetVersion); 
Information("Nuget v2 version: {0}", versionInfo.NuGetVersionV2); 
}); 

出力は次のとおりです。

MajorMinorPatch: [NULL] 
FullSemVer: [NULL] 
InformationalVersion: [NULL] 
LegacySemVer: [NULL] 
Nuget v1 version: [NULL] 
Nuget v2 version: [NULL] 

私はそうのように私のタスクを変更する場合:

Task("Version") 
.Does(() => 
{ 
var versionInfo = GitVersion(new GitVersionSettings() 
{ 
    UpdateAssemblyInfo = false 
}); 
Information("MajorMinorPatch: {0}", versionInfo.MajorMinorPatch); 
Information("FullSemVer: {0}", versionInfo.FullSemVer); 
Information("InformationalVersion: {0}", versionInfo.InformationalVersion); 
Information("LegacySemVer: {0}", versionInfo.LegacySemVer); 
Information("Nuget v1 version: {0}", versionInfo.NuGetVersion); 
Information("Nuget v2 version: {0}", versionInfo.NuGetVersionV2); 
}); 

出力は次のようになります。

MajorMinorPatch: 0.1.0 
FullSemVer: 0.1.0+1 
InformationalVersion: 0.1.0+1.Branch.master.Sha.5b2 
LegacySemVer: 0.1.0 
Nuget v1 version: 0.1.0 
Nuget v2 version: 0.1.0 

答えて

3

これは "バイ・デザイン"。

https://github.com/cake-build/cake/blob/develop/src/Cake.Common/Tools/GitVersion/GitVersionRunner.cs#L71

GitVersionは、すべてのアサートのバージョン番号が含まれているJSON出力は、検査のために利用可能であることを意味し、JSONのデフォルトの出力タイプがあります。この時点で、CakeはこのJSON出力を収集し、GitVersionオブジェクトに結合し、それをCakeスクリプトに返します。

OutputType = GitVersionOutput.BuildServerを使用すると、JSON出力はありません。代わりに、GitVersionはTeamCity、AppVeyorなど、実行中のビルドサーバーで動作し、アサートされたバージョン番号を別のメカニズムで利用できるようにします。すなわち環境変数を設定することによって、またはサービスメッセージを使用してビルドサーバにこれを伝えることができる。結果として、実際にはCakeが返すためにGitVersionオブジェクトを作成するために消費するものは何もありません。

これを回避する典型的な方法は、最初にGitVersionをOutputType = GitVersionOutput.BuildServerで実行してからすぐに再度実行し、返された変数を使用することです。これは、我々自身のケーキのスクリプト内で何をすべきか、実際にある:

https://github.com/cake-build/cake/blob/develop/build/version.cake#L38

はGitVersionが実際に最初の実行の結果をキャッシュするように、第2の時間は、実際に、非常に迅速である必要があり、これを実行します。実際には、キャッシュされた出力を読み込むためにCakeでできることがあり、それを呼び出しの出力として使用することができます。これを問題として提起できますか?here私たちはそれを追跡できますか?

+0

これは「設計上の」ものですが、私には少なくとも驚きの原則に違反しているようです。 – Schneider

+1

私は同意しません。ここでの "デザイン"は、GitVersionで最初に変更を加えずに、Cakeで行うことができることはまったくないということです。これが完了すると、Cakeは新しい機能を利用し、必要に応じて変数を返します。 –

関連する問題