BuildScripts/Tasks/restore.manifest.build.ps1
param( [Parameter()] [string]$ManifestBackupPath = ( Get-BuildProperty ManifestBackupPath (Join-Path $Artifact 'backup') ), [Parameter()] [switch]$KeepManifestBackup = ( Get-BuildProperty KeepManifestBackup $false ) ) #synopsis: Restore the manifests from the last backup task restore.manifest { if (Test-Path $ManifestBackupPath) { $BuildInfo | Foreach-Module { $config = $_ $name = $config.Name $manifest = Get-Item (Join-Path $config.Source $config.ManifestFile) $backups = Get-ChildItem -Path $ManifestBackupPath -Filter "$($manifest.BaseName).v*" switch ($backups.Count) { 0 { logDebug "No backups found for $name manifest in $ManifestBackupPath" } 1 { logInfo "Restoring $name manifest from $(Resolve-Path $backups[0].FullName)" $backups[0] | Copy-Item -Destination $ManifestBackupPath -Force } Default { logDebug "$($backups.Count) backups found" #? I probably could just sort the backups and take the last one, but this way #? I'm guaranteed to get a "versioned" backup $lastBackup = $backups[0] foreach ($backup in $backups) { $lastVersion = [System.Version]($lastBackup.BaseName -replace [regex]::Escape("$($manifest.BaseName).v") , '') $itemVersion = [System.Version]($backup.BaseName -replace [regex]::Escape("$($manifest.BaseName).v") , '') if ($itemVersion -gt $lastVersion) { $lastBackup = $backup } } logDebug "Restoring manifest from $(Resolve-Path $backup.FullName)" if ($KeepManifestBackup) { $backup | Copy-Item -Destination $manifest.FullName -Force } else { $backup | Move-Item -Destination $manifest.FullName -Force } } } } } else { logWarn "$ManifestBackupPath does not exist" } } |