| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- function Assert-Git {
- if (!(Get-Command git -ErrorAction Ignore)) {
- Write-Error 'git is required to execute this script'
- exit 1
- }
- }
- function Invoke-Block([scriptblock]$cmd) {
- $cmd | Out-String | Write-Verbose
- & $cmd
- # Need to check both of these cases for errors as they represent different items
- # - $?: did the powershell script block throw an error
- # - $lastexitcode: did a windows command executed by the script block end in error
- if ((-not $?) -or ($lastexitcode -ne 0)) {
- Write-Warning $error[0]
- throw "Command failed to execute: $cmd"
- }
- }
- function Get-Submodules {
- param(
- [Parameter(Mandatory = $true)]
- [string]$RepoRoot,
- [switch]$Shipping
- )
- $moduleConfigFile = Join-Path $RepoRoot ".gitmodules"
- $submodules = @()
- [xml] $submoduleConfig = Get-Content "$RepoRoot/build/submodules.props"
- $repos = $submoduleConfig.Project.ItemGroup.Repository | % { $_.Include }
- Get-ChildItem "$RepoRoot/modules/*" -Directory `
- | ? { (-not $Shipping) -or $($repos -contains $($_.Name)) -or $_.Name -eq 'Templating' } `
- | % {
- Push-Location $_ | Out-Null
- Write-Verbose "Attempting to get submodule info for $_"
- if (Test-Path 'version.props') {
- [xml] $versionXml = Get-Content 'version.props'
- $versionPrefix = $versionXml.Project.PropertyGroup.VersionPrefix | select-object -first 1
- $versionSuffix = $versionXml.Project.PropertyGroup.VersionSuffix | select-object -first 1
- }
- else {
- $versionPrefix = ''
- $versionSuffix = ''
- }
- try {
- $data = [PSCustomObject] @{
- path = $_
- module = $_.Name
- commit = $(git rev-parse HEAD)
- newCommit = $null
- changed = $false
- branch = $(git config -f $moduleConfigFile --get submodule.modules/$($_.Name).branch )
- versionPrefix = $versionPrefix
- versionSuffix = $versionSuffix
- }
- $submodules += $data
- }
- finally {
- Pop-Location | Out-Null
- }
- }
- return $submodules
- }
- function SaveXml([xml]$xml, [string]$path) {
- Write-Verbose "Saving to $path"
- $ErrorActionPreference = 'stop'
- $settings = New-Object System.XML.XmlWriterSettings
- $settings.OmitXmlDeclaration = $true
- $settings.Encoding = New-Object System.Text.UTF8Encoding( $true )
- $writer = [System.XML.XMLTextWriter]::Create($path, $settings)
- $xml.Save($writer)
- $writer.Close()
- }
- function LoadXml([string]$path) {
- Write-Verbose "Reading from $path"
- $ErrorActionPreference = 'stop'
- $obj = new-object xml
- $obj.PreserveWhitespace = $true
- $obj.Load($path)
- return $obj
- }
- function PackageIdVarName([string]$packageId) {
- $canonicalVarName = ''
- $upperCaseNext = $true
- for ($i = 0; $i -lt $packageId.Length; $i++) {
- $ch = $packageId[$i]
- if (-not [System.Char]::IsLetterOrDigit(($ch))) {
- $upperCaseNext = $true
- continue
- }
- if ($upperCaseNext) {
- $ch = [System.Char]::ToUpperInvariant($ch)
- $upperCaseNext = $false
- }
- $canonicalVarName += $ch
- }
- $canonicalVarName += "PackageVersion"
- return $canonicalVarName
- }
|