Fix UpdateRepos.ps1

This commit is contained in:
Ryan Brandenburg 2017-11-01 15:13:00 -07:00
parent f276890f62
commit 639d49713e
2 changed files with 34 additions and 31 deletions

View File

@ -9,20 +9,22 @@
The ID of the Lineup to determine which versions to use.
.PARAMETER LineupVersion
The version of the Lineup to be used.
.PARAMETER NoPush
Make commits without pusing.
.PARAMETER GitAuthorName
The author name to use in the commit message. (Optional)
.PARAMETER GitAuthorEmail
The author email to use in the commit message. (Optional)
.PARAMETER NoPush
Make commits without pusing.
.PARAMETER GitCommitArgs
Any remaining arguments are passed as arguments to 'git commit' actions in each repo.
#>
[cmdletbinding(SupportsShouldProcess = $true)]
param(
[Parameter(Mandatory=$true)]
[Parameter(Mandatory = $true)]
[string]$Source,
[Parameter(Mandatory=$true)]
[Parameter(Mandatory = $true)]
[string]$LineupID,
[Parameter(Mandatory=$true)]
[Parameter(Mandatory = $true)]
[string]$LineupVersion,
[switch]$NoPush,
[string]$GitAuthorName = $null,
@ -40,46 +42,44 @@ $ModuleDirectory = Join-Path $RepoRoot "modules"
$gitConfigArgs = @()
if ($GitAuthorName) {
$gitConfigArgs += '-c',"user.name=$GitAuthorName"
$gitConfigArgs += '-c', "user.name=$GitAuthorName"
}
if ($GitAuthorEmail) {
$gitConfigArgs += '-c',"user.email=$GitAuthorEmail"
$gitConfigArgs += '-c', "user.email=$GitAuthorEmail"
}
Push-Location $ModuleDirectory
try {
# Init all submodules
Invoke-Block { & git submodule update --init }
Write-Verbose "Updating submodules..."
Invoke-Block { & git submodule update --init } | Out-Null
Write-Verbose "Submodules updated."
$update_errors = @()
$submodules = Get-Submodules $RepoRoot
$updated_submodules = @()
foreach($submodule in $submodules)
{
foreach ($submodule in $submodules) {
Push-Location $submodule.path
try {
$depsFile = Join-Path (Join-Path $($submodule.path) "build") "dependencies.props"
if (!Test-Path $depsFile)
{
Write-Warning "No build\dependencies.props file exists for $($submodule.module). "
if (!(Test-Path $depsFile)) {
Write-Warning "No build\dependencies.props file exists for $($submodule.module)."
continue
}
# Move to latest commit on tracked branch
Invoke-Block { & git checkout --quiet $submodule.branch }
Invoke-Block { & .\run.ps1 -Update upgrade deps --source $Source --id $LineupID --version $LineupVersion --deps-file $depsFile }
Invoke-Block { & git add $depsFile }
Write-Verbose "About to update dependencies.props for $($submodule.module)"
& .\run.ps1 -Update upgrade deps --source $Source --id $LineupID --version $LineupVersion --deps-file $depsFile
Invoke-Block { & git @gitConfigArgs commit --quiet -m "Update dependencies.props`n`n[auto-updated: dependencies]" @GitCommitArgs }
$sshUrl = "git@github.com:aspnet/$($submodule.module)"
Invoke-Block { & git remote set-url --push origin $sshUrl }
$updated_submodules += $submodule
}
catch
{
catch {
Write-Warning "Error in $($submodule.module)"
$update_errors += $_
}
finally {
@ -87,22 +87,25 @@ try {
}
}
if ($update_errors.Count -gt 0 )
{
if ($update_errors.Count -gt 0 ) {
foreach ($update_error in $update_errors) {
Write-Error "$update_error"
}
throw 'Failed to update'
}
else {
Write-Verbose "All updates successful!"
}
if (-not $NoPush -and ($Force -or ($PSCmdlet.ShouldContinue($shortMessage, 'Push the changes to these repos?'))))
{
if (-not $NoPush -and ($Force -or ($PSCmdlet.ShouldContinue($shortMessage, 'Push the changes to these repos?')))) {
$push_errors = @()
foreach($submodule in $updated_submodules)
{
foreach ($submodule in $updated_submodules) {
Push-Location $submodule.path
try {
Invoke-Block { & git @gitConfigArgs push origin $submodule.branch}
Invoke-Block { & git @gitConfigArgs push origin HEAD:$submodule.branch}
}
catch
{
catch {
$push_errors += $_
}
finally {
@ -110,8 +113,7 @@ try {
}
}
if ($push_errors.Count -gt 0 )
{
if ($push_errors.Count -gt 0 ) {
throw 'Failed to push'
}
}

View File

@ -13,6 +13,7 @@ function Invoke-Block([scriptblock]$cmd) {
# - $?: 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"
}
}