function Get-PackageNuspecXmlV2 { <# .SYNOPSIS Returns the .nuspec XML object for the given package. .PARAMETER FeedSource [string] Source feed used to look up the package by .PARAMETER Name [string] Package name to lookup .PARAMETER Version [string] Package version to lookup .PARAMETER Package [Object] Known package object with properties as { Feed={ Source=; Name=; } Name=; Version=; } .PARAMETER Credential [PSCredential] Credential used for talking to feeds as needed #> [CmdletBinding(DefaultParameterSetName='RawArgs')] Param( [Parameter(Mandatory = $true, ParameterSetName = 'RawArgs')] [string]$FeedSource, [Parameter(Mandatory = $true, ParameterSetName = 'RawArgs')] [string]$Name, [Parameter(Mandatory = $true, ParameterSetName = 'RawArgs')] [string]$Version, [Parameter(Mandatory = $true, ParameterSetName = 'Package')] [object]$Package, [Parameter(Mandatory = $false)] [PSCredential]$Credential = $null ) ## TODO: Can this pull from the local filesystem if it exists? ## This would let us fetch faster if the versions match as we could avoid network hops. $loglead = (Get-LogLeadName) if ($PSCmdlet.ParameterSetName -eq 'Package') { $FeedSource = $Package.Feed.Source $Name = $Package.Name $Version = $Package.Version } $splatVar = @{ FeedSource = $FeedSource Name = $Name Version = $Version Credential = $Credential PackagePath = "$Name.nuspec" } # See if the nuspec is cached in the session. $existsInCache = ($Script:GetPackageNuspecXmlCacheName -eq $Name) -and ($Script:GetPackageNuspecXmlCacheSource -eq $FeedSource) -and ($Script:GetPackageNuspecXmlCacheVersion -eq $Version) if($existsInCache -and ($null -ne $Script:GetPackageNuspecXmlCacheNuspec)) { Write-Verbose "$loglead : Nuspec for $name|$version is cached. Returning cached version." return $Script:GetPackageNuspecXmlCacheNuspec } # Query for the nuspec from Proget. Write-Verbose "$loglead : Nuspec for $name|$version is not cached. Querying for nuspec from proget." [xml]$result = [xml](Get-PackageFile @splatVar) # Cache the nuspec. $Script:GetPackageNuspecXmlCacheName = $Name $Script:GetPackageNuspecXmlCacheSource = $FeedSource $Script:GetPackageNuspecXmlCacheVersion = $Version $Script:GetPackageNuspecXmlCacheNuspec = $result return $result }