123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953 |
- <?xml version="1.0" encoding="utf-8"?>
- <Project ToolsVersion="4.0" InitialTargets="SetGitExe" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <!--
- ==============================================================
- Retrieves and exposes Git information
-
- If the importing project has a C# or VB Language property,
- by default a ThisAssembly file/class will be generated
- containing assembly-level metadata for the git information,
- as well as a ThisAssembly static class with constants for
- all the available values.
-
- Customization:
-
- $(GitThisAssembly): set to 'false' to prevent assembly
- metadata and constants generation.
- $(GitThisAssemblyMetadata): set to 'false' to prevent assembly
- metadata generation only. Defaults
- to 'false'.
-
- $(ThisAssemblyNamespace): allows overriding the namespace
- for the ThisAssembly class.
- Defaults to the global namespace.
-
- $(GitDefaultBranch): determines the base branch used to
- calculate commits on top of current branch.
- Defaults to 'master'.
-
- $(GitVersionFile): determines the name of a file in the Git
- repository root used to provide the base
- version info.
- Defaults to 'GitInfo.txt'.
- $(GitCommitsRelativeTo): optionally specifies an alternative directory
- for counting commits on top of the base version.
- Defaults to the $(GitVersionFile) directory.
- $(GitInfoReportImportance): allows rendering all the retrieved
- git information with the specified
- message importance ('high', 'normal' or 'low').
- Defaults to 'low'.
-
- $(GitIgnoreBranchVersion) and $(GitIgnoreTagVersion): determines
- whether the branch and tags (if any)
- will be used to find a base version.
- Defaults to empty value (no ignoring).
- $(GitSkipCache): whether to cache the Git information determined
- in a previous build in a GitInfo.cache for
- performance reasons.
- Defaults to empty value (no ignoring).
- ==============================================================
- -->
- <PropertyGroup>
- <!-- GitVersionFile allows overriding tags/branch names as a source for base version information -->
- <GitVersionFile Condition="'$(GitVersionFile)' == ''">GitInfo.txt</GitVersionFile>
- <!-- Default the lookup directory to the project directory unless overridden -->
- <GitInfoBaseDir Condition="'$(GitInfoBaseDir)' == ''">$(MSBuildProjectDirectory)</GitInfoBaseDir>
- <!-- Look it upwards and grab the first one we find. -->
- <GitVersionFile Condition="'$([MSBuild]::GetDirectoryNameOfFileAbove($(GitInfoBaseDir), $(GitVersionFile)))' != ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(GitInfoBaseDir), $(GitVersionFile)))\$(GitVersionFile)</GitVersionFile>
- <GitDefaultBranch Condition="'$(GitDefaultBranch)' == ''">master</GitDefaultBranch>
- <GitDefaultCommit Condition="'$(GitDefaultCommit)' == ''">0000000</GitDefaultCommit>
- <GitDefaultVersion Condition="'$(GitDefaultVersion)' == ''">0.1.0</GitDefaultVersion>
- <GitInfoThisAssemblyFile Condition="'$(GitInfoThisAssemblyFile)' == '' And '$(DefaultLanguageSourceExtension)' != ''">$(IntermediateOutputPath)ThisAssembly.GitInfo.g$(DefaultLanguageSourceExtension)</GitInfoThisAssemblyFile>
- <GitThisAssembly Condition="'$(Language)' != 'C#' And '$(Language)' != 'VB'">false</GitThisAssembly>
- <GitThisAssembly Condition="'$(GitThisAssembly)' == '' And '$(GitInfoThisAssemblyFile)' != ''">true</GitThisAssembly>
- <GitInfoReportImportance Condition="'$(GitInfoReportImportance)' == ''">low</GitInfoReportImportance>
- <GitThisAssemblyMetadataDefine Condition="'$(GitThisAssemblyMetadata)' == 'true'">ADDMETADATA</GitThisAssemblyMetadataDefine>
- <GitThisAssemblyMetadataDefine Condition="'$(GitThisAssemblyMetadata)' != 'true'">NOMETADATA</GitThisAssemblyMetadataDefine>
- <!-- Defaults if overrides are specified when building -->
- <GitCommits Condition="'$(GitCommits)' == ''">0</GitCommits>
- <GitSemVerSource Condition="'$(GitBaseVersion)' != ''">MSBuild</GitSemVerSource>
-
- <GitSkipCache Condition="'$(GitSkipCache)' == ''">false</GitSkipCache>
- <SkipReadGitCache Condition="'$(SkipReadGitCache)' == ''">$(GitSkipCache)</SkipReadGitCache>
- <SkipWriteGitCache Condition="'$(SkipWriteGitCache)' == ''">$(GitSkipCache)</SkipWriteGitCache>
- <GitMinVersion>2.5.0</GitMinVersion>
- </PropertyGroup>
- <!-- Private properties -->
- <PropertyGroup>
- <CoreCompileDependsOn>
- GitInfo;
- GitVersion;
- GitThisAssembly;
- GitInfoReport;
- $(CoreCompileDependsOn)
- </CoreCompileDependsOn>
- <_GitBaseVersionExpr Condition="'$(_GitBaseVersionExpr)' == ''">^v?(?<MAJOR>\d+)\.(?<MINOR>\d+)\.(?<PATCH>\d+)(?:\-(?<LABEL>[\dA-Za-z\-\.]+))?$|^(?<LABEL>[\dA-Za-z\-\.]+)\-v?(?<MAJOR>\d+)\.(?<MINOR>\d+)\.(?<PATCH>\d+)$</_GitBaseVersionExpr>
- <!-- Cache file used to avoid running all git commands. Only GitRoot will be retrieved to determine the path of this cache file. -->
- <_GitInfoFile>$(IntermediateOutputPath)GitInfo.cache</_GitInfoFile>
- </PropertyGroup>
- <Target Name="GitInfoReport" DependsOnTargets="GitInfo;GitVersion">
- <Message Importance="$(GitInfoReportImportance)" Text="Git Info:
- GitInfoBaseDir: $(GitInfoBaseDir)
- GitRoot: $(GitRoot)
- GitBranch: $(GitBranch)
- GitCommit: $(GitCommit)
- GitSha: $(GitSha)
- GitBaseVersion: $(GitBaseVersion)
- GitBaseVersionSource: $(GitBaseVersionSource)
- GitBaseVersionMajor: $(GitBaseVersionMajor)
- GitBaseVersionMinor: $(GitBaseVersionMinor)
- GitBaseVersionPatch: $(GitBaseVersionPatch)
- GitCommits: $(GitCommits)
- GitTag: $(GitTag)
- GitBaseTag: $(GitBaseTag)
- GitSemVerMajor: $(GitSemVerMajor)
- GitSemVerMinor: $(GitSemVerMinor)
- GitSemVerPatch: $(GitSemVerPatch)
- GitSemVerLabel: $(GitSemVerLabel)
- GitSemVerDashLabel: $(GitSemVerDashLabel)
- GitSemVerSource: $(GitSemVerSource)
- "/>
- </Target>
- <PropertyGroup>
- <GitInfoDependsOn>
- SetGitExe;
- _EnsureGit;
- _GitRoot;
- _GitInputs;
- _GitClearCache;
- _GitReadCache;
- _GitBranch;
- _GitCommit;
- _GitPopulateInfo;
- </GitInfoDependsOn>
- </PropertyGroup>
- <!-- Under Unix, we don't double %% the format. That only works on Windows. -->
- <PropertyGroup Condition="'$(OS)' == 'Windows_NT'">
- <_ShortShaFormat>%%h</_ShortShaFormat>
- <_LongShaFormat>%%H</_LongShaFormat>
- </PropertyGroup>
- <PropertyGroup Condition="'$(OS)' != 'Windows_NT'">
- <_ShortShaFormat>%h</_ShortShaFormat>
- <_LongShaFormat>%H</_LongShaFormat>
- </PropertyGroup>
- <Target Name="GitInfo" DependsOnTargets="$(GitInfoDependsOn)" Returns="@(GitInfo)" />
- <Target Name="_EnsureGit">
- <Exec Command='$(GitExe) --version'
- EchoOff='true'
- ContinueOnError='true'
- ConsoleToMSBuild='true'
- StandardErrorImportance='high'
- StandardOutputImportance='low'>
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitOutput"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <Error Condition="'$(MSBuildLastExitCode)' != '0'" Text="Failed to run `git --version`. Git may not be properly installed: %0A $(_GitOutput)" />
- <PropertyGroup>
- <_GitCurrentVersion>$([System.Text.RegularExpressions.Regex]::Match("$(_GitOutput)", "\d+\.\d+\.\d+").Value)</_GitCurrentVersion>
- </PropertyGroup>
- <Error Condition="$([System.Version]::Parse('$(_GitCurrentVersion)').CompareTo($([System.Version]::Parse('$(GitMinVersion)')))) < 0"
- Text="Required minimum git version is $(GitMinVersion) but found $(_GitCurrentVersion)." />
- </Target>
- <Target Name="_GitRoot" Returns="$(GitRoot)" Condition="'$(GitRoot)' == ''">
- <Exec Command='$(GitExe) rev-parse --show-toplevel'
- EchoOff='true'
- StandardErrorImportance='high'
- StandardOutputImportance='low'
- ConsoleToMSBuild='true'
- WorkingDirectory='$(GitInfoBaseDir)'
- ContinueOnError='true'>
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitOutput"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup Condition="'$(MSBuildLastExitCode)' == '0'">
- <GitRoot>$(_GitOutput.Trim())</GitRoot>
- </PropertyGroup>
- <!-- Account for cygwin/WSL separately -->
- <Exec Command='"$(CygPathExe)" -w "$(_GitOutput)"'
- EchoOff='true'
- WorkingDirectory="$(GitInfoBaseDir)"
- StandardErrorImportance='high'
- StandardOutputImportance='low'
- ConsoleToMSBuild='true'
- Condition="'$(MSBuildLastExitCode)' == '0' And '$(CygPathExe)' != ''">
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitOutput" />
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup Condition="'$(MSBuildLastExitCode)' == '0'">
- <GitRoot>$(_GitOutput.Trim())</GitRoot>
- </PropertyGroup>
- <!-- Determine the .git dir. In the simple case, this is just $(GitRoot)\.git.
- But in the case of submodules, a .git *file* rather than a directory
- will be present at that path, with a value like:
- gitdir: ../../.git/modules/external/toq
- Which points to the actual folder where the git info exists in the containing
- repository. -->
- <PropertyGroup>
- <GitDir>$([System.IO.Path]::Combine('$(GitRoot)', '.git'))</GitDir>
- <_IsGitFile>$([System.IO.File]::Exists('$(GitDir)'))</_IsGitFile>
- </PropertyGroup>
- <Exec Condition="'$(_IsGitFile)' == 'true'"
- Command='$(GitExe) rev-parse --is-inside-work-tree'
- EchoOff='true'
- StandardErrorImportance='high'
- StandardOutputImportance='low'
- ConsoleToMSBuild='true'
- WorkingDirectory='$(GitInfoBaseDir)'
- ContinueOnError='true'>
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitIsWorkTree"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup Condition="'$(MSBuildLastExitCode)' == '0'">
- <_IsGitWorkTree>$(_GitIsWorkTree.Trim())</_IsGitWorkTree>
- </PropertyGroup>
- <Exec Condition="'$(_IsGitFile)' == 'true' and '$(_IsGitWorkTree)' == 'true'"
- Command='$(GitExe) rev-parse --git-common-dir'
- EchoOff='true'
- StandardErrorImportance='high'
- StandardOutputImportance='low'
- ConsoleToMSBuild='true'
- WorkingDirectory='$(GitInfoBaseDir)'
- ContinueOnError='true'>
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitCommonDir"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <!-- Account for cygwin/WSL separately -->
- <Exec Command='"$(CygPathExe)" -w "$(_GitCommonDir)"'
- EchoOff='true'
- WorkingDirectory="$(GitInfoBaseDir)"
- StandardErrorImportance='high'
- StandardOutputImportance='low'
- ConsoleToMSBuild='true'
- Condition="'$(_IsGitFile)' == 'true' and '$(_IsGitWorkTree)' == 'true' And '$(MSBuildLastExitCode)' == '0' And '$(CygPathExe)' != ''">
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitCommonDir" />
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup Condition="'$(_IsGitFile)' == 'true' and '$(_IsGitWorkTree)' == 'true'">
- <GitDir>$(_GitCommonDir.Trim())</GitDir>
- </PropertyGroup>
- <PropertyGroup Condition="'$(_IsGitFile)' == 'true' and '$(_IsGitWorkTree)' != 'true'">
- <_GitFileContents>$([System.IO.File]::ReadAllText('$(GitDir)'))</_GitFileContents>
- <GitDir>$([System.String]::new('$(_GitFileContents)').Substring(7).Trim())</GitDir>
- <GitDir>$([System.IO.Path]::Combine('$(GitRoot)', '$(GitDir)'))</GitDir>
- <GitDir>$([System.IO.Path]::GetFullPath('$(GitDir)'))</GitDir>
- </PropertyGroup>
- <PropertyGroup>
- <GitDir Condition="!HasTrailingSlash('$(GitDir)')">$(GitDir)$([System.IO.Path]::DirectorySeparatorChar)</GitDir>
- </PropertyGroup>
- <Message Text="Determined Git repository root as '$(GitRoot)'" Importance="$(GitInfoReportImportance)" Condition="'$(GitRoot)' != ''" />
- <Message Text="Determined Git dir as '$(GitDir)'" Importance="$(GitInfoReportImportance)" Condition="'$(GitRoot)' != ''" />
- <Warning Text="Directory $(GitInfoBaseDir) is not in a Git repository. Cannot determine Git repository root." Condition="'$(GitRoot)' == ''" />
- <Exec Command='$(GitExe) diff-index --quiet HEAD'
- Condition="'$(GitRoot)' != ''"
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- WorkingDirectory="$(GitRoot)"
- IgnoreExitCode="true">
- <Output TaskParameter="ExitCode" PropertyName="GitIsDirty" />
- </Exec>
- </Target>
- <Target Name="_GitInputs" DependsOnTargets="_GitRoot" Returns="@(_GitInput)">
- <ItemGroup>
- <_GitInput Include="$(GitDir)HEAD" />
- <_GitInput Include="$(GitVersionFile)" Condition="Exists('$(GitVersionFile)')" />
- </ItemGroup>
- <CreateItem Include="$([System.IO.Path]::Combine('$(GitDir)', 'packed-refs'))">
- <Output ItemName="_GitInput" TaskParameter="Include" />
- </CreateItem>
- <CreateItem Include="$([System.IO.Path]::Combine('$(GitDir)', 'refs', 'heads', '**', '*.*'))">
- <Output ItemName="_GitInput" TaskParameter="Include" />
- </CreateItem>
- <CreateItem Include="$([System.IO.Path]::Combine('$(GitDir)', 'refs', 'tags', '*.*'))">
- <Output ItemName="_GitInput" TaskParameter="Include" />
- </CreateItem>
-
- <Delete Files="$(_GitInfoFile)" Condition="Exists('$(_GitInfoFile)') And '$(SkipReadGitCache)' == 'true'" />
- </Target>
- <!-- If the inputs/outputs are outdated, clear the cache -->
- <Target Name="_GitClearCache" Inputs="@(_GitInput)" Outputs="$(_GitInfoFile)" Condition="Exists('$(_GitInfoFile)')">
- <Delete Files="$(_GitInfoFile)" />
- </Target>
- <Target Name="_GitReadCache" Condition="Exists('$(_GitInfoFile)') And '$(SkipReadGitCache)' != 'true' ">
- <PropertyGroup>
- <_GitCachedInfo>$([System.IO.File]::ReadAllText('$(_GitInfoFile)'))</_GitCachedInfo>
- </PropertyGroup>
- <CreateItem Include="GitInfo" AdditionalMetadata="$(_GitCachedInfo.Split(';'))">
- <Output TaskParameter="Include" ItemName="GitInfo" />
- </CreateItem>
- <PropertyGroup>
- <GitBranch Condition="'$(GitBranch)' == ''">%(GitInfo.GitBranch)</GitBranch>
- <GitCommit Condition="'$(GitCommit)' == ''">%(GitInfo.GitCommit)</GitCommit>
- <GitSha Condition="'$(GitSha)' == ''">%(GitInfo.GitSha)</GitSha>
- <GitBaseVersion Condition="'$(GitBaseVersion)' == ''">%(GitInfo.GitBaseVersion)</GitBaseVersion>
- <GitBaseVersionSource Condition="'$(GitBaseVersionSource)' == ''">%(GitInfo.GitBaseVersionSource)</GitBaseVersionSource>
- <GitBaseVersionMajor Condition="'$(GitBaseVersionMajor)' == ''">%(GitInfo.GitBaseVersionMajor)</GitBaseVersionMajor>
- <GitBaseVersionMinor Condition="'$(GitBaseVersionMinor)' == ''">%(GitInfo.GitBaseVersionMinor)</GitBaseVersionMinor>
- <GitBaseVersionPatch Condition="'$(GitBaseVersionPatch)' == ''">%(GitInfo.GitBaseVersionPatch)</GitBaseVersionPatch>
- <GitCommits Condition="'$(GitCommits)' == '' Or '$(GitCommits)' == '0'">%(GitInfo.GitCommits)</GitCommits>
- <GitTag Condition="'$(GitTag)' == ''">%(GitInfo.GitTag)</GitTag>
- <GitBaseTag Condition="'$(GitBaseTag)' == ''">%(GitInfo.GitBaseTag)</GitBaseTag>
- <GitSemVerMajor Condition="'$(GitSemVerMajor)' == ''">%(GitInfo.GitSemVerMajor)</GitSemVerMajor>
- <GitSemVerMinor Condition="'$(GitSemVerMinor)' == ''">%(GitInfo.GitSemVerMinor)</GitSemVerMinor>
- <GitSemVerPatch Condition="'$(GitSemVerPatch)' == ''">%(GitInfo.GitSemVerPatch)</GitSemVerPatch>
- <GitSemVerLabel Condition="'$(GitSemVerLabel)' == ''">%(GitInfo.GitSemVerLabel)</GitSemVerLabel>
- <GitSemVerDashLabel Condition="'$(GitSemVerDashLabel)' == ''">%(GitInfo.GitSemVerDashLabel)</GitSemVerDashLabel>
- <GitSemVerSource Condition="'$(GitSemVerSource)' == ''">%(GitInfo.GitSemVerSource)</GitSemVerSource>
- </PropertyGroup>
- </Target>
- <Target Name="_GitBranch" Returns="$(GitBranch)"
- DependsOnTargets="_GitInputs"
- Condition="'$(GitBranch)' == ''"
- Inputs="@(_GitInput)"
- Outputs="$(_GitInfoFile)">
- <PropertyGroup Condition="'$(GitRoot)' != ''">
- <_GitHead>$([System.IO.Path]::Combine($(GitDir), 'HEAD'))</_GitHead>
- <_GitHead>$([System.IO.Path]::GetFullPath($(_GitHead)))</_GitHead>
- <_GitHead>$([System.IO.File]::ReadAllText('$(_GitHead)'))</_GitHead>
- <GitBranch>$([System.Text.RegularExpressions.Regex]::Match($(_GitHead), '(?<=refs/heads/).+$'))</GitBranch>
- <GitBranch>$(GitBranch.Trim())</GitBranch>
- </PropertyGroup>
- <!-- CI systems may checkout the specific commit, rather than the branch, so we need to fallback -->
- <Exec Command='$(GitExe) name-rev --name-only HEAD'
- Condition=" '$(GitBranch)' == '' "
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="GitBranch"/>
- </Exec>
- <PropertyGroup Condition="'$(GitRoot)' == ''">
- <GitBranch>$(GitDefaultBranch)</GitBranch>
- </PropertyGroup>
- </Target>
- <Target Name="_GitCommit" Returns="$(GitCommit)"
- DependsOnTargets="_GitRoot"
- Inputs="@(_GitInput)"
- Outputs="$(_GitInfoFile)"
- Condition="'$(GitRoot)' != '' And '$(GitCommit)' == ''">
- <Exec Command='$(GitExe) log --format=format:$(_ShortShaFormat) -n 1'
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="GitCommit"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup Condition="'$(MSBuildLastExitCode)' != '0'">
- <GitCommit>$(GitDefaultCommit)</GitCommit>
- </PropertyGroup>
- <Exec Command='$(GitExe) log --format=format:$(_LongShaFormat) -n 1'
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="GitSha"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup Condition="'$(MSBuildLastExitCode)' != '0'">
- <GitSha>$(GitDefaultCommit)</GitSha>
- </PropertyGroup>
- </Target>
- <Target Name="_GitPopulateInfo">
- <ItemGroup>
- <GitInfo Include="GitInfo">
- <GitRoot>$(GitRoot)</GitRoot>
- <GitBranch>$(GitBranch)</GitBranch>
- <GitCommit>$(GitCommit)</GitCommit>
- <GitSha>$(GitSha)</GitSha>
- </GitInfo>
- </ItemGroup>
- </Target>
- <PropertyGroup>
- <GitVersionDependsOn>
- GitInfo;
- _GitBaseVersionBranch;
- _GitBaseVersionTagExists;
- _GitBaseVersionTag;
- _GitBaseVersionFile;
- _GitBaseVersionFallback;
- _GitValidateBaseVersion;
- _GitPopulateVersionInfo;
- _GitWriteCache
- </GitVersionDependsOn>
- </PropertyGroup>
- <Target Name="GitVersion" DependsOnTargets="$(GitVersionDependsOn)" Returns="@(GitInfo)" />
- <Target Name="_GitBaseVersionFile" Returns="$(GitBaseVersion)"
- Inputs="@(_GitInput)"
- Outputs="$(_GitInfoFile)"
- Condition="'$(GitBaseVersion)' == '' And Exists('$(GitVersionFile)')">
- <PropertyGroup>
- <GitBaseVersion>$([System.IO.File]::ReadAllText('$(GitVersionFile)'))</GitBaseVersion>
- <GitBaseVersion>$(GitBaseVersion.Trim())</GitBaseVersion>
- <IsValidGitBaseVersion>
- $([System.Text.RegularExpressions.Regex]::IsMatch($(GitBaseVersion), $(_GitBaseVersionExpr)))
- </IsValidGitBaseVersion>
- <IsValidGitBaseVersion>$(IsValidGitBaseVersion.Trim())</IsValidGitBaseVersion>
- </PropertyGroup>
- <Error Text="$(GitVersionFile) does not contain a valid base version (found '$(GitBaseVersion)', regex: $(_GitBaseVersionExpr))."
- Condition="'$(IsValidGitBaseVersion)' == 'False'" />
- <PropertyGroup>
- <_GitVersionFile>$(GitVersionFile)</_GitVersionFile>
- <GitBaseVersionSource>$(GitVersionFile)</GitBaseVersionSource>
- <GitSemVerSource>File</GitSemVerSource>
- </PropertyGroup>
- <Message Text="Using base version from version file $(GitVersionFile)'" Importance="normal" />
- <!-- Account for cygwin/WSL separately -->
- <Exec Command='"$(CygPathExe)" -u "$(_GitVersionFile)"'
- EchoOff='true'
- WorkingDirectory="$(GitRoot)"
- StandardErrorImportance='high'
- StandardOutputImportance='low'
- ConsoleToMSBuild='true'
- Condition="'$(MSBuildLastExitCode)' == '0' And '$(CygPathExe)' != ''">
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitVersionFile" />
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <Exec Command='$(GitExe) log -n 1 --format=format:$(_ShortShaFormat) "$(_GitVersionFile)"'
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitLastBump"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <Warning Text="Could not retrieve last commit for $(GitVersionFile). Defaulting to its declared version '$(GitBaseVersion)' and no additional commits."
- Condition="'$(MSBuildLastExitCode)' != '0' Or '$(_GitLastBump)' == ''" />
- <PropertyGroup>
- <GitCommits Condition="'$(MSBuildLastExitCode)' != '0' Or '$(_GitLastBump)' == ''">0</GitCommits>
- <_GitLastBump>$(_GitLastBump.Trim())</_GitLastBump>
- <_GitCommitsRelativeTo>$(GitCommitsRelativeTo)</_GitCommitsRelativeTo>
- <!-- If the GitVersionFile is at the GitRoot dir, there won't be a directory to specify to base the rev-list count, so no need to quote anything -->
- <_GitCommitsRelativeTo Condition="'$(_GitCommitsRelativeTo)' == '' And '$([System.IO.Path]::GetDirectoryName($(GitVersionFile)))' != ''">"$([System.IO.Path]::GetDirectoryName("$(GitVersionFile)"))"</_GitCommitsRelativeTo>
- <!-- If the GitVersionFile is at the GitRoot dir, we use the current directory '.' for the count. This allows us to exclude submodule commits -->
- <_GitCommitsRelativeTo Condition="'$(_GitCommitsRelativeTo)' == ''">.</_GitCommitsRelativeTo>
- </PropertyGroup>
- <!-- Account for cygwin/WSL separately -->
- <Exec Command='"$(CygPathExe)" -u $(_GitCommitsRelativeTo)'
- EchoOff='true'
- WorkingDirectory="$(GitRoot)"
- StandardErrorImportance='high'
- StandardOutputImportance='low'
- ConsoleToMSBuild='true'
- Condition="'$(MSBuildLastExitCode)' == '0' And '$(CygPathExe)' != '' And '$(_GitCommitsRelativeTo)' != ''">
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitCommitsRelativeTo" />
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <Exec Command='$(GitExe) rev-list --count --full-history "$(_GitLastBump)"..HEAD $(_GitCommitsRelativeTo)'
- Condition="$(MSBuildLastExitCode) == '0' And '$(_GitLastBump)' != ''"
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="GitCommits"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- </Target>
- <Target Name="_GitBaseVersionBranch" Returns="$(GitBaseVersion)"
- Inputs="@(_GitInput)"
- Outputs="$(_GitInfoFile)"
- DependsOnTargets="_GitBranch"
- Condition="'$(GitBaseVersion)' == '' And '$(GitIgnoreBranchVersion)' != 'true' ">
- <PropertyGroup>
- <IsValidGitBaseVersion>
- $([System.Text.RegularExpressions.Regex]::IsMatch($(GitBranch), $(_GitBaseVersionExpr)))
- </IsValidGitBaseVersion>
- <IsValidGitBaseVersion>$(IsValidGitBaseVersion.Trim())</IsValidGitBaseVersion>
- </PropertyGroup>
- <Message Text="Git branch '$(GitBranch)' cannot be used as a version specifier. Skipping branch-based version processing."
- Importance="low" Condition="'$(IsValidGitBaseVersion)' == 'false'" />
- <PropertyGroup Condition="'$(IsValidGitBaseVersion)' == 'true'">
- <GitBaseVersion>$(GitBranch)</GitBaseVersion>
- <GitBaseVersionSource>GitBranch</GitBaseVersionSource>
- <GitSemVerSource>Branch</GitSemVerSource>
- </PropertyGroup>
- <!-- Get the initial commit when the current branch departed from the default branch -->
- <Exec Command='$(GitExe) merge-base --fork-point "$(GitDefaultBranch)"'
- Condition="'$(IsValidGitBaseVersion)' == 'true'"
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitForkPoint"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <Warning Text="Could not retrieve first commit where branch $(GitBranch) forked from $(GitDefaultBranch). Defaulting to zero commits."
- Condition="'$(IsValidGitBaseVersion)' == 'true' And '$(MSBuildLastExitCode)' != '0'" />
- <PropertyGroup Condition="'$(IsValidGitBaseVersion)' == 'true' And '$(MSBuildLastExitCode)' != '0'">
- <GitCommits>0</GitCommits>
- </PropertyGroup>
- <!-- Get the commit count from the fork point to the current branch head -->
- <Exec Command='$(GitExe) rev-list --count "$(_GitForkPoint)"..HEAD'
- Condition="'$(IsValidGitBaseVersion)' == 'true' and '$(MSBuildLastExitCode)' == '0'"
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="GitCommits"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- </Target>
- <Target Name="_GitBaseVersionTagExists" Returns="$(GitBaseTag)"
- Inputs="@(_GitInput)"
- Outputs="$(_GitInfoFile)"
- DependsOnTargets="_GitBranch;_GitCommit"
- Condition="'$(GitBaseVersion)' == '' And '$(GitIgnoreTagVersion)' != 'true' ">
- <Exec Command='$(GitExe) describe --tags --abbrev=0'
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true"
- IgnoreExitCode="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="GitBaseTag"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup Condition="'$(MSBuildLastExitCode)' != '0'">
- <GitCommits>0</GitCommits>
- <GitBaseTag></GitBaseTag>
- </PropertyGroup>
- <Message Text="No git tags exist. Skipping tag processing."
- Importance="low" Condition="'$(GitBaseTag)' == ''" />
- </Target>
- <Target Name="_GitBaseVersionTag" Returns="$(GitBaseVersion)"
- Inputs="@(_GitInput)"
- Outputs="$(_GitInfoFile)"
- DependsOnTargets="_GitBaseVersionTagExists"
- Condition="'$(GitBaseVersion)' == '' And '$(GitIgnoreTagVersion)' != 'true' And '$(GitBaseTag)' != ''">
- <!-- At this point, we now there is a base tag already we can leverage -->
- <Exec Command='$(GitExe) describe --tags'
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="GitTag"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup>
- <IsValidGitBaseVersion>
- $([System.Text.RegularExpressions.Regex]::IsMatch($(GitBaseTag), $(_GitBaseVersionExpr)))
- </IsValidGitBaseVersion>
- <IsValidGitBaseVersion>$(IsValidGitBaseVersion.Trim())</IsValidGitBaseVersion>
- <GitBaseVersion Condition="'$(IsValidGitBaseVersion)' == 'true'">$(GitBaseTag)</GitBaseVersion>
- </PropertyGroup>
- <Message Text="Current tag '$(GitBaseTag)' cannot be used as a version specifier. Skipping tag-based version processing."
- Importance="low" Condition="'$(IsValidGitBaseVersion)' == 'false'" />
- <PropertyGroup Condition="'$(IsValidGitBaseVersion)' == 'true'" >
- <GitBaseVersionSource>GitBaseTag</GitBaseVersionSource>
- <GitSemVerSource>Tag</GitSemVerSource>
- <GitCommits>0</GitCommits>
- </PropertyGroup>
- <Exec Command='$(GitExe) rev-list "$(GitBaseTag)" -n 1'
- Condition="'$(IsValidGitBaseVersion)' == 'true'"
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="_GitBaseTagCommit"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <Exec Command='$(GitExe) rev-list --count "$(_GitBaseTagCommit)".."$(GitCommit)"'
- Condition="'$(IsValidGitBaseVersion)' == 'true' And '$(_GitBaseTagCommit)' != '' And '$(GitCommit)' != '' And '$(GitCommit)' != '$(GitDefaultCommit)'"
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="GitCommits"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <Warning Text="Failed to retrieve commit count from tag '$(GitBaseTag)' to tip $(GitCommit). Defaulting to zero commits."
- Condition="'$(IsValidGitBaseVersion)' == 'true' And '$(MSBuildLastExitCode)' != '0'" />
- <PropertyGroup>
- <GitCommits Condition="'$(MSBuildLastExitCode)' != '0'">0</GitCommits>
- </PropertyGroup>
- </Target>
- <Target Name="_GitBaseVersionFallback" Returns="$(GitBaseVersion)"
- Inputs="@(_GitInput)"
- Outputs="$(_GitInfoFile)"
- Condition="'$(GitBaseVersion)' == '' And '$(GitDefaultVersion)' != ''">
- <PropertyGroup>
- <IsValidGitDefaultVersion>
- $([System.Text.RegularExpressions.Regex]::IsMatch($(GitDefaultVersion), $(_GitBaseVersionExpr)))
- </IsValidGitDefaultVersion>
- <IsValidGitDefaultVersion>$(IsValidGitDefaultVersion.Trim())</IsValidGitDefaultVersion>
- <GitCommits>0</GitCommits>
- </PropertyGroup>
- <!-- If $(GitBaseVersion) == '' And $(IsValidGitBaseVersion) == '' -->
- <Error Text="Fallback version %24(GitDefaultVersion) value of '$(GitDefaultVersion)' is not a valid SemVer 2.0 string."
- Condition="'$(IsValidGitDefaultVersion)' == 'false'" />
- <Exec Command='$(GitExe) rev-list --count $(GitCommit)'
- Condition="'$(IsValidGitDefaultVersion)' == 'true' And '$(GitCommit)' != '' And '$(GitCommit)' != '$(GitDefaultCommit)'"
- EchoOff='true'
- StandardErrorImportance="low"
- StandardOutputImportance="low"
- ConsoleToMSBuild="true"
- WorkingDirectory="$(GitRoot)"
- ContinueOnError="true">
- <Output TaskParameter="ConsoleOutput" PropertyName="GitCommits"/>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup>
- <GitBaseVersion>$(GitDefaultVersion)</GitBaseVersion>
- <GitSemVerSource>Default</GitSemVerSource>
- </PropertyGroup>
- </Target>
- <Target Name="_GitValidateBaseVersion"
- Inputs="@(_GitInput)"
- Outputs="$(_GitInfoFile)">
- <!-- If $(GitBaseVersion) == '', it means we couldn't determine a base version by any probing mechanism -->
- <Error Text="Failed to find a valid base version to use. Please make sure you have a %24(GitVersionFile) file (defaults to '$(GitVersionFile)'), branch, tag or %24(GitDefaultVersion) property with a valid SemVer 2.0 string."
- Condition="'$(GitBaseVersion)' == ''" />
- <PropertyGroup>
- <IsValidGitBaseVersion>
- $([System.Text.RegularExpressions.Regex]::IsMatch($(GitBaseVersion), $(_GitBaseVersionExpr)))
- </IsValidGitBaseVersion>
- <IsValidGitBaseVersion>$(IsValidGitBaseVersion.Trim())</IsValidGitBaseVersion>
- </PropertyGroup>
- <Error Text="Current %24(GitBaseVersion) value of '$(GitBaseVersion)' is not a valid SemVer 2.0 string."
- Condition="'$(IsValidGitBaseVersion)' == 'false'" />
- </Target>
- <Target Name="_GitPopulateVersionInfo">
- <PropertyGroup>
- <!-- Remove the initial optional 'v' or 'V' from the base version. -->
- <GitBaseVersion Condition="$(GitBaseVersion.StartsWith('v'))">$(GitBaseVersion.TrimStart('v'))</GitBaseVersion>
- <GitBaseVersion Condition="$(GitBaseVersion.StartsWith('V'))">$(GitBaseVersion.TrimStart('V'))</GitBaseVersion>
- <GitBaseVersionMajor>$([System.Text.RegularExpressions.Regex]::Match($(GitBaseVersion), $(_GitBaseVersionExpr)).Groups['MAJOR'].Value)</GitBaseVersionMajor>
- <GitBaseVersionMinor>$([System.Text.RegularExpressions.Regex]::Match($(GitBaseVersion), $(_GitBaseVersionExpr)).Groups['MINOR'].Value)</GitBaseVersionMinor>
- <GitBaseVersionPatch>$([System.Text.RegularExpressions.Regex]::Match($(GitBaseVersion), $(_GitBaseVersionExpr)).Groups['PATCH'].Value)</GitBaseVersionPatch>
- <GitSemVerMajor>$(GitBaseVersionMajor)</GitSemVerMajor>
- <GitSemVerMinor>$(GitBaseVersionMinor)</GitSemVerMinor>
- <GitSemVerPatch>$([MSBuild]::Add('$(GitBaseVersionPatch)', '$(GitCommits)'))</GitSemVerPatch>
- <GitSemVerLabel>$([System.Text.RegularExpressions.Regex]::Match($(GitBaseVersion), $(_GitBaseVersionExpr)).Groups['LABEL'].Value)</GitSemVerLabel>
- <GitSemVerDashLabel Condition="'$(GitSemVerLabel)' != ''" >-$(GitSemVerLabel)</GitSemVerDashLabel>
- </PropertyGroup>
- <ItemGroup>
- <_GitInfo Include="@(GitInfo -> Distinct())">
- <GitBaseVersion>$(GitBaseVersion)</GitBaseVersion>
- <GitBaseVersionSource>$(GitBaseVersionSource)</GitBaseVersionSource>
- <GitBaseVersionMajor>$(GitBaseVersionMajor)</GitBaseVersionMajor>
- <GitBaseVersionMinor>$(GitBaseVersionMinor)</GitBaseVersionMinor>
- <GitBaseVersionPatch>$(GitBaseVersionPatch)</GitBaseVersionPatch>
- <GitCommits>$(GitCommits)</GitCommits>
- <GitTag>$(GitTag)</GitTag>
- <GitBaseTag>$(GitBaseTag)</GitBaseTag>
- <GitSemVerMajor>$(GitSemVerMajor)</GitSemVerMajor>
- <GitSemVerMinor>$(GitSemVerMinor)</GitSemVerMinor>
- <GitSemVerPatch>$(GitSemVerPatch)</GitSemVerPatch>
- <GitSemVerLabel>$(GitSemVerLabel)</GitSemVerLabel>
- <GitSemVerDashLabel>$(GitSemVerDashLabel)</GitSemVerDashLabel>
- <GitSemVerSource>$(GitSemVerSource)</GitSemVerSource>
- </_GitInfo>
- <GitInfo Remove="@(GitInfo)" />
- <GitInfo Include="@(_GitInfo)" />
- </ItemGroup>
-
- </Target>
- <Target Name="_GitWriteCache" Inputs="@(_GitInput)" Outputs="$(_GitInfoFile)" Condition="'$(SkipWriteGitCache)' != 'true'">
- <PropertyGroup>
- <_GitInfoContent>$([System.IO.File]::ReadAllText('$(MSBuildThisFileDirectory)GitInfo.cache.pp'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitBranch$', '$(GitBranch)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitCommits$', '$(GitCommits)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitCommit$', '$(GitCommit)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitSha$', '$(GitSha)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitBaseVersion$', '$(GitBaseVersion)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitBaseVersionSource$', '$(GitBaseVersionSource)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitBaseVersionMajor$', '$(GitBaseVersionMajor)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitBaseVersionMinor$', '$(GitBaseVersionMinor)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitBaseVersionPatch$', '$(GitBaseVersionPatch)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitTag$', '$(GitTag)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitBaseTag$', '$(GitBaseTag)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitSemVerMajor$', '$(GitSemVerMajor)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitSemVerMinor$', '$(GitSemVerMinor)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitSemVerPatch$', '$(GitSemVerPatch)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitSemVerLabel$', '$(GitSemVerLabel)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitSemVerDashLabel$', '$(GitSemVerDashLabel)'))</_GitInfoContent>
- <_GitInfoContent>$(_GitInfoContent.Replace('$GitSemVerSource$', '$(GitSemVerSource)'))</_GitInfoContent>
- </PropertyGroup>
- <PropertyGroup>
- <_GitInfoFileDir>$([System.IO.Path]::GetDirectoryName('$(_GitInfoFile)'))</_GitInfoFileDir>
- </PropertyGroup>
- <MakeDir Directories="$(_GitInfoFileDir)" Condition="!Exists('$(_GitInfoFileDir)')" />
- <WriteLinesToFile File="$(_GitInfoFile)" Lines="$(_GitInfoContent)" Overwrite="true" />
- <ItemGroup>
- <FileWrites Include="$(_GitInfoFile)" />
- </ItemGroup>
- </Target>
- <PropertyGroup>
- <GitThisAssemblyDependsOn>
- GitInfo;
- GitVersion;
- _GitInputs;
- _GitGenerateThisAssembly
- </GitThisAssemblyDependsOn>
- </PropertyGroup>
- <Target Name="GitThisAssembly" DependsOnTargets="$(GitThisAssemblyDependsOn)"
- BeforeTargets="BuildOnlySettings" Condition="'$(GitThisAssembly)' == 'true'">
- <ItemGroup>
- <Compile Remove="$(GitInfoThisAssemblyFile)" />
- <Compile Include="$(GitInfoThisAssemblyFile)" />
- <!-- For the double compilation happening with XAML projects. -->
- <_GeneratedCodeFiles Include="$(GitInfoThisAssemblyFile)" />
- </ItemGroup>
- </Target>
- <Target Name="_GitGenerateThisAssembly" Condition="'$(GitThisAssembly)' == 'true'"
- Inputs="@(_GitInput)" Outputs="$(GitInfoThisAssemblyFile)">
- <PropertyGroup>
- <_ThisAssemblyContent>$([System.IO.File]::ReadAllText('$(MSBuildThisFileDirectory)GitInfo$(DefaultLanguageSourceExtension).pp'))</_ThisAssemblyContent>
- <!-- The $NamespaceDefine$ replacement is turned into the GLOBALNAMESPACE define if the ThisAssemblyNamespace isn't empty. -->
- <_ThisAssemblyContent Condition="'$(ThisAssemblyNamespace)' != ''">$(_ThisAssemblyContent.Replace('$NamespaceDefine$', 'LOCALNAMESPACE'))</_ThisAssemblyContent>
- <_ThisAssemblyContent Condition="'$(ThisAssemblyNamespace)' == ''">$(_ThisAssemblyContent.Replace('$NamespaceDefine$', 'GLOBALNAMESPACE'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$MetadataDefine$', '$(GitThisAssemblyMetadataDefine)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent Condition="'$(ThisAssemblyNamespace)' != ''">$(_ThisAssemblyContent.Replace('RootNamespace.', '$(ThisAssemblyNamespace).'))</_ThisAssemblyContent>
- <_ThisAssemblyContent Condition="'$(ThisAssemblyNamespace)' == ''">$(_ThisAssemblyContent.Replace('RootNamespace.', ''))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('_RootNamespace_', '$(ThisAssemblyNamespace)'))</_ThisAssemblyContent>
- <!-- no git repository -->
- <_ThisAssemblyContent Condition="'$(Language)' == 'C#' And '$(GitRoot)' == ''">$(_ThisAssemblyContent.Replace('$GitIsDirty$', 'false'))</_ThisAssemblyContent>
- <_ThisAssemblyContent Condition="'$(Language)' == 'C#' And '$(GitIsDirty)' == '1'">$(_ThisAssemblyContent.Replace('$GitIsDirty$', 'true'))</_ThisAssemblyContent>
- <_ThisAssemblyContent Condition="'$(Language)' == 'C#' And '$(GitIsDirty)' == '0'">$(_ThisAssemblyContent.Replace('$GitIsDirty$', 'false'))</_ThisAssemblyContent>
- <!-- no git repository -->
- <_ThisAssemblyContent Condition="'$(Language)' == 'VB' And '$(GitRoot)' == ''">$(_ThisAssemblyContent.Replace('$GitIsDirty$', 'False'))</_ThisAssemblyContent>
- <_ThisAssemblyContent Condition="'$(Language)' == 'VB' And '$(GitIsDirty)' == '1'">$(_ThisAssemblyContent.Replace('$GitIsDirty$', 'True'))</_ThisAssemblyContent>
- <_ThisAssemblyContent Condition="'$(Language)' == 'VB' And '$(GitIsDirty)' == '0'">$(_ThisAssemblyContent.Replace('$GitIsDirty$', 'False'))</_ThisAssemblyContent>
-
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitBranch$', '$(GitBranch)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitCommits$', '$(GitCommits)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitCommit$', '$(GitCommit)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitSha$', '$(GitSha)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitBaseVersion$', '$(GitBaseVersion)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitBaseVersionSource$', '$(GitBaseVersionSource)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitBaseVersionMajor$', '$(GitBaseVersionMajor)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitBaseVersionMinor$', '$(GitBaseVersionMinor)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitBaseVersionPatch$', '$(GitBaseVersionPatch)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitTag$', '$(GitTag)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitBaseTag$', '$(GitBaseTag)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitSemVerMajor$', '$(GitSemVerMajor)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitSemVerMinor$', '$(GitSemVerMinor)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitSemVerPatch$', '$(GitSemVerPatch)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitSemVerLabel$', '$(GitSemVerLabel)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitSemVerDashLabel$', '$(GitSemVerDashLabel)'))</_ThisAssemblyContent>
- <_ThisAssemblyContent>$(_ThisAssemblyContent.Replace('$GitSemVerSource$', '$(GitSemVerSource)'))</_ThisAssemblyContent>
- </PropertyGroup>
- <PropertyGroup>
- <GitInfoThisAssemblyDir>$([System.IO.Path]::GetDirectoryName('$(GitInfoThisAssemblyFile)'))</GitInfoThisAssemblyDir>
- </PropertyGroup>
- <MakeDir Directories="$(GitInfoThisAssemblyDir)" Condition="!Exists('$(GitInfoThisAssemblyDir)')" />
- <WriteLinesToFile File='$(GitInfoThisAssemblyFile)' Lines='$(_ThisAssemblyContent)' Overwrite='true' />
- </Target>
- <!--
- ============================================================
- GitExe Property
-
- Cascading probing mechanism will try to locate an installed
- version of git, msysgit, WSL git or cygwin git.
- ============================================================
- -->
- <PropertyGroup Condition="'$(GitExe)' == '' And '$(OS)' != 'Windows_NT'">
- <GitExe>git</GitExe>
- </PropertyGroup>
- <Target Name="SetGitExe" Condition="'$(GitExe)' == '' And '$(OS)' == 'Windows_NT'">
- <!-- If git from %PATH% works, just use that -->
- <Exec Command='git --version'
- EchoOff='true'
- ContinueOnError='true'
- StandardErrorImportance='high'
- StandardOutputImportance='low'>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup Condition="'$(MSBuildLastExitCode)' == '0'">
- <GitExe>git</GitExe>
- </PropertyGroup>
- <PropertyGroup Condition="'$(GitExe)' == ''">
- <!-- We probe multiple places, with the first matching one winning -->
- <GitExe Condition="'$(GitExe)' == '' And Exists('C:\Program Files\Git\bin\git.exe')">"C:\Program Files\Git\bin\git.exe"</GitExe>
- <GitExe Condition="'$(GitExe)' == '' And Exists('C:\Program Files (x86)\Git\bin\git.exe')">"C:\Program Files (x86)\Git\bin\git.exe"</GitExe>
- <GitExe Condition="'$(GitExe)' == '' And Exists('C:\msysgit\bin\git.exe')">C:\msysgit\bin\git.exe</GitExe>
- </PropertyGroup>
- <!-- If we didn't find it in the PATH nor the above locations, check for git installed in WSL -->
- <Exec Condition="'$(GitExe)' == ''"
- Command="$(MSBuildThisFileDirectory)wslrun.cmd git --version"
- EchoOff='true'
- ContinueOnError='true'
- StandardErrorImportance='high'
- StandardOutputImportance='low'>
- <Output TaskParameter="ExitCode" PropertyName="MSBuildLastExitCode" />
- </Exec>
- <PropertyGroup Condition="'$(GitExe)' == '' And '$(MSBuildLastExitCode)' == '0'">
- <GitExe>$(MSBuildThisFileDirectory)wslrun.cmd git</GitExe>
- <CygPathExe>$(MSBuildThisFileDirectory)wslpath.cmd</CygPathExe>
- </PropertyGroup>
- <PropertyGroup Condition="'$(GitExe)' == ''">
- <!-- Only consider cygwin as a last resort, as it tends to be slower -->
- <GitExe Condition="'$(GitExe)' == '' And Exists('C:\cygwin\bin\git.exe')">C:\cygwin\bin\git.exe</GitExe>
- <GitExe Condition="'$(GitExe)' == '' And Exists('C:\cygwin64\bin\git.exe')">C:\cygwin64\bin\git.exe</GitExe>
- </PropertyGroup>
- <!--
- ============================================================
- CygPathExe Property
- If we are using cygwin git, we need to pipe the path to
- cygpath to convert it into a Windows path. If the path is
- already a Windows path, it will be returned unchanged.
- ============================================================
- -->
- <PropertyGroup>
- <CygPathExe Condition="'$(CygPathExe)' == '' And Exists('C:\cygwin\bin\cygpath.exe') And $(GitExe.Contains('cygwin'))">C:\cygwin\bin\cygpath.exe</CygPathExe>
- <CygPathExe Condition="'$(CygPathExe)' == '' And Exists('C:\cygwin64\bin\cygpath.exe') And $(GitExe.Contains('cygwin64'))">C:\cygwin64\bin\cygpath.exe</CygPathExe>
- </PropertyGroup>
- </Target>
- <PropertyGroup>
- <GitInfoImported>true</GitInfoImported>
- </PropertyGroup>
- </Project>
|