Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/aspnetcore.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate McMaster <nate.mcmaster@microsoft.com>2017-11-15 02:26:51 +0300
committerNate McMaster <nate.mcmaster@microsoft.com>2017-11-15 02:26:51 +0300
commitd7785d618702319eb83646b7ef24dfce0eab5f15 (patch)
tree9284770f7f0d5c33d409f2ef2a7b9f5a6f95bb65
parent7235918051266f1d75f82d4ab44a87de17aa8fdb (diff)
Add tag repos script2.0.3
-rwxr-xr-xscripts/TagRepos.ps166
-rw-r--r--scripts/common.psm166
2 files changed, 132 insertions, 0 deletions
diff --git a/scripts/TagRepos.ps1 b/scripts/TagRepos.ps1
new file mode 100755
index 0000000000..bd21163c6e
--- /dev/null
+++ b/scripts/TagRepos.ps1
@@ -0,0 +1,66 @@
+#!/usr/bin/env pwsh
+
+<#
+.SYNOPSIS
+ Tags each repo according to VersionPrefix in version.props of that repo
+.PARAMETER Push
+ Push all updated tags
+.PARAMETER ForceUpdateTag
+ This will call git tag --force
+#>
+[cmdletbinding(SupportsShouldProcess = $true)]
+param(
+ [switch]$Push = $false,
+ [switch]$ForceUpdateTag = $false
+)
+
+Set-StrictMode -Version 2
+$ErrorActionPreference = 'Stop'
+
+Import-Module -Scope Local -Force "$PSScriptRoot/common.psm1"
+
+Assert-Git
+
+$RepoRoot = Resolve-Path "$PSScriptRoot/../"
+
+Get-Submodules $RepoRoot -Shipping | % {
+ Push-Location $_.path | Out-Null
+ try {
+
+ if (-not $_.versionPrefix) {
+ Write-Warning "Could not determine tag version for $(_.path)"
+ }
+ else {
+ $tag = $_.versionPrefix
+ Write-Host "$($_.module) => $tag"
+
+ $gitTagArgs = @()
+ if ($ForceUpdateTag) {
+ $gitTagArgs += '--force'
+ }
+
+ Invoke-Block { & git tag @gitTagArgs $tag }
+
+ if ($Push) {
+ $gitPushArgs = @()
+ if ($WhatIfPreference) {
+ $gitPushArgs += '--dry-run'
+ }
+ Invoke-Block { & git push --dry-run @gitPushArgs origin "refs/tags/${tag}" }
+ }
+
+ if ($WhatIfPreference) {
+ Invoke-Block { & git tag -d $tag } | Out-Null
+ }
+ }
+ }
+ catch {
+ Write-Host -ForegroundColor Red "Could not update $_"
+ throw
+ }
+ finally {
+ Pop-Location
+ }
+}
+
+
diff --git a/scripts/common.psm1 b/scripts/common.psm1
new file mode 100644
index 0000000000..3eeca4b250
--- /dev/null
+++ b/scripts/common.psm1
@@ -0,0 +1,66 @@
+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
+ } else {
+ $versionPrefix = ''
+ }
+
+ try {
+ $data = @{
+ path = $_
+ module = $_.Name
+ commit = $(git rev-parse HEAD)
+ newCommit = $null
+ changed = $false
+ branch = $(git config -f $moduleConfigFile --get submodule.modules/$($_.Name).branch )
+ versionPrefix = $versionPrefix
+ }
+
+ $submodules += $data
+ }
+ finally {
+ Pop-Location | Out-Null
+ }
+ }
+
+ return $submodules
+}