functions/Copy-FromStaging.ps1


function Copy-FromStaging
{
[cmdletbinding()]
param (
[string] $Path = ".",
$stagingdir = $null,
[Alias("NoConfig", "IgnoreConfig")][switch][bool] $ExcludeConfig = $false,
$Exclude = @("log/", "App_Data/"),
[switch][bool]$ClearDest = $false
) 
    $verbose = ($PSCmdlet.MyInvocation.BoundParameters["Verbose"].IsPresent -eq $true)
    if ([string]::IsNullOrEmpty($Path)) {
    }

    $projectName = split-path -leaf $Path
    if ($stagingDir -eq $null) {
        $stagingDir = "$Path\..\$projectName-staging"
    }

    if ($ExcludeConfig) {
        $f = Get-ConfigFile $stagingDir
        if ($f -ne $null) {
            $exclude += $f.Name
        }
    }

    Write-Host "Copy-FromStaging: exclude list=($Exclude). copying $stagingDir -> $path"

    if (test-path "$stagingDir\web.config") {
        write-host "copying web.config from '$stagingDir\web.config'"
        # start with web.config to force iis app pool recycle
        copy-item "$stagingDir\web.config" $path -Exclude $exclude -Force -Verbose:$verbose
        # give IIS some time
        start-sleep -Seconds 1
    } else {
        write-host "web.config at '$stagingDir\web.config' not found"
    }
    Copy-ItemFiltered -SourceDir $stagingDir -TargetDir $path -Excludes $exclude -Force -Verbose:$verbose -ClearDest:$ClearDest

    #copy-item $stagingDir\* $path -Force -Recurse -Exclude $exclude -Verbose:$verbose -ErrorAction:Continue
}