ps/Modules/Alkami.PowerShell.Choco/Public/Get-PackageNuspecXmlV2.ps1

79 lines
2.5 KiB
PowerShell
Raw Normal View History

2023-05-30 22:51:22 -07:00
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
}