Updated kvm.ps1
This commit is contained in:
parent
782e586c22
commit
980e28a79f
129
build/kvm.ps1
129
build/kvm.ps1
|
|
@ -1,9 +1,11 @@
|
|||
param(
|
||||
[parameter(Position=0)]
|
||||
[string] $command,
|
||||
[string] $proxy,
|
||||
[switch] $verbosity = $false,
|
||||
[alias("g")][switch] $global = $false,
|
||||
[alias("p")][switch] $persistent = $false,
|
||||
[alias("f")][switch] $force = $false,
|
||||
[switch] $x86 = $false,
|
||||
[switch] $x64 = $false,
|
||||
[switch] $svr50 = $false,
|
||||
|
|
@ -16,6 +18,12 @@ $userKrePath = $env:USERPROFILE + "\.kre"
|
|||
$userKrePackages = $userKrePath + "\packages"
|
||||
$globalKrePath = $env:ProgramFiles + "\KRE"
|
||||
$globalKrePackages = $globalKrePath + "\packages"
|
||||
$feed = $env:KRE_NUGET_API_URL
|
||||
|
||||
if (!$feed)
|
||||
{
|
||||
$feed = "https://www.myget.org/F/aspnetvnext/api/v2";
|
||||
}
|
||||
|
||||
$scriptPath = $myInvocation.MyCommand.Definition
|
||||
|
||||
|
|
@ -25,16 +33,19 @@ K Runtime Environment Version Manager - Build {{BUILD_NUMBER}}
|
|||
|
||||
USAGE: kvm <command> [options]
|
||||
|
||||
kvm upgrade [-x86][-x64] [-svr50][-svrc50] [-g|-global]
|
||||
kvm upgrade [-x86][-x64] [-svr50][-svrc50] [-g|-global] [-proxy <ADDRESS>]
|
||||
install latest KRE from feed
|
||||
set 'default' alias to installed version
|
||||
add KRE bin to user PATH environment variable persistently
|
||||
add KRE bin to user PATH environment variable
|
||||
-g|-global install to machine-wide location
|
||||
-f|-force upgrade even if latest is already installed
|
||||
-proxy <ADDRESS> use given address as proxy when accessing remote server
|
||||
|
||||
kvm install <semver>|<alias>|<nupkg> [-x86][-x64] [-svr50][-svrc50] [-g|-global]
|
||||
install requested KRE from feed
|
||||
add KRE bin to path of current command line
|
||||
-g|-global install to machine-wide location
|
||||
-f|-force install even if specified version is already installed
|
||||
|
||||
kvm use <semver>|<alias>|none [-x86][-x64] [-svr50][-svrc50] [-p|-persistent] [-g|-global]
|
||||
<semver>|<alias> add KRE bin to path of current command line
|
||||
|
|
@ -121,6 +132,25 @@ function Kvm-Upgrade {
|
|||
Kvm-Alias-Set "default" $version
|
||||
}
|
||||
|
||||
function Add-Proxy-If-Specified {
|
||||
param(
|
||||
[System.Net.WebClient] $wc
|
||||
)
|
||||
if (!$proxy) {
|
||||
$proxy = $env:http_proxy
|
||||
}
|
||||
if ($proxy) {
|
||||
$wp = New-Object System.Net.WebProxy($proxy)
|
||||
$pb = New-Object UriBuilder($proxy)
|
||||
if (!$pb.UserName) {
|
||||
$wp.Credentials = [System.Net.CredentialCache]::DefaultCredentials
|
||||
} else {
|
||||
$wp.Credentials = New-Object System.Net.NetworkCredential($pb.UserName, $pb.Password)
|
||||
}
|
||||
$wc.Proxy = $wp
|
||||
}
|
||||
}
|
||||
|
||||
function Kvm-Find-Latest {
|
||||
param(
|
||||
[string] $platform,
|
||||
|
|
@ -128,10 +158,11 @@ param(
|
|||
)
|
||||
Write-Host "Determining latest version"
|
||||
|
||||
$url = "https://www.myget.org/F/aspnetvnext/api/v2/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false"
|
||||
$url = "$feed/GetUpdates()?packageIds=%27KRE-$platform-$architecture%27&versions=%270.0%27&includePrerelease=true&includeAllVersions=false"
|
||||
|
||||
$wc = New-Object System.Net.WebClient
|
||||
$wc.Credentials = new-object System.Net.NetworkCredential("aspnetreadonly", "4d8a2d9c-7b80-4162-9978-47e918c9658c")
|
||||
Add-Proxy-If-Specified($wc)
|
||||
[xml]$xml = $wc.DownloadString($url)
|
||||
|
||||
$version = Select-Xml "//d:Version" -Namespace @{d='http://schemas.microsoft.com/ado/2007/08/dataservices'} $xml
|
||||
|
|
@ -146,27 +177,46 @@ function Kvm-Install-Latest {
|
|||
function Do-Kvm-Download {
|
||||
param(
|
||||
[string] $kreFullName,
|
||||
[string] $kreFolder
|
||||
[string] $packagesFolder
|
||||
)
|
||||
$parts = $kreFullName.Split(".", 2)
|
||||
|
||||
$url = "https://www.myget.org/F/aspnetvnext/api/v2/package/" + $parts[0] + "/" + $parts[1]
|
||||
$kreFile = "$kreFolder\$kreFullName.nupkg"
|
||||
$url = "$feed/package/" + $parts[0] + "/" + $parts[1]
|
||||
$kreFolder = Join-Path $packagesFolder $kreFullName
|
||||
$kreFile = Join-Path $kreFolder "$kreFullName.nupkg"
|
||||
|
||||
If (Test-Path $kreFolder) {
|
||||
Write-Host "$kreFullName already installed."
|
||||
return;
|
||||
if($force)
|
||||
{
|
||||
rm $kreFolder -Recurse -Force
|
||||
} else {
|
||||
Write-Host "$kreFullName already installed."
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "Downloading" $kreFullName "from https://www.myget.org/F/aspnetvnext/api/v2/"
|
||||
|
||||
md $kreFolder -Force | Out-Null
|
||||
#Downloading to temp location
|
||||
$kreTempDownload = Join-Path $packagesFolder "temp"
|
||||
$tempKreFile = Join-Path $kreTempDownload "$kreFullName.nupkg"
|
||||
|
||||
if(Test-Path $kreTempDownload) {
|
||||
del "$kreTempDownload\*" -recurse
|
||||
} else {
|
||||
md $kreTempDownload -Force | Out-Null
|
||||
}
|
||||
|
||||
$wc = New-Object System.Net.WebClient
|
||||
$wc.Credentials = new-object System.Net.NetworkCredential("aspnetreadonly", "4d8a2d9c-7b80-4162-9978-47e918c9658c")
|
||||
$wc.DownloadFile($url, $kreFile)
|
||||
Add-Proxy-If-Specified($wc)
|
||||
$wc.DownloadFile($url, $tempKreFile)
|
||||
|
||||
Do-Kvm-Unpack $kreFile $kreFolder
|
||||
Do-Kvm-Unpack $tempKreFile $kreTempDownload
|
||||
|
||||
md $kreFolder -Force | Out-Null
|
||||
Write-Host "Installing to $kreFolder"
|
||||
mv "$kreTempDownload\*" $kreFolder
|
||||
}
|
||||
|
||||
function Do-Kvm-Unpack {
|
||||
|
|
@ -174,11 +224,22 @@ param(
|
|||
[string] $kreFile,
|
||||
[string] $kreFolder
|
||||
)
|
||||
Write-Host "Installing to" $kreFolder
|
||||
|
||||
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') | Out-Null
|
||||
[System.IO.Compression.ZipFile]::ExtractToDirectory($kreFile, $kreFolder)
|
||||
|
||||
Write-Host "Unpacking to" $kreFolder
|
||||
try {
|
||||
#Shell will not recognize nupkg as a zip and throw, so rename it to zip
|
||||
$kreZip = [System.IO.Path]::ChangeExtension($kreFile, "zip")
|
||||
Rename-Item $kreFile $kreZip
|
||||
#Use the shell to uncompress the nupkg
|
||||
$shell_app=new-object -com shell.application
|
||||
$zip_file = $shell_app.namespace($kreZip)
|
||||
$destination = $shell_app.namespace($kreFolder)
|
||||
$destination.Copyhere($zip_file.items(), 0x14) #0x4 = don't show UI, 0x10 = overwrite files
|
||||
}
|
||||
finally {
|
||||
#make it a nupkg again
|
||||
Rename-Item $kreZip $kreFile
|
||||
}
|
||||
|
||||
If (Test-Path ($kreFolder + "\[Content_Types].xml")) {
|
||||
Remove-Item ($kreFolder + "\[Content_Types].xml")
|
||||
}
|
||||
|
|
@ -202,8 +263,8 @@ param(
|
|||
}
|
||||
|
||||
$kreFullName = Requested-VersionOrAlias $versionOrAlias
|
||||
$kreFolder = "$globalKrePackages\$kreFullName"
|
||||
Do-Kvm-Download $kreFullName $kreFolder
|
||||
|
||||
Do-Kvm-Download $kreFullName $globalKrePackages
|
||||
Kvm-Use $versionOrAlias
|
||||
}
|
||||
|
||||
|
|
@ -215,14 +276,30 @@ param(
|
|||
{
|
||||
$kreFullName = [System.IO.Path]::GetFileNameWithoutExtension($versionOrAlias)
|
||||
$kreFolder = "$userKrePackages\$kreFullName"
|
||||
$kreFile = "$kreFolder\$kreFullName.nupkg"
|
||||
$folderExists = Test-Path $kreFolder
|
||||
|
||||
if (Test-Path($kreFolder)) {
|
||||
Write-Host "Target folder '$kreFolder' already exists"
|
||||
if($folderExists -and $force) {
|
||||
del $kreFolder -Recurse -Force
|
||||
$folderExists = $false;
|
||||
}
|
||||
|
||||
if($folderExists) {
|
||||
Write-Host "Target folder '$kreFolder' already exists"
|
||||
} else {
|
||||
md $kreFolder -Force | Out-Null
|
||||
copy $versionOrAlias $kreFile
|
||||
Do-Kvm-Unpack $kreFile $kreFolder
|
||||
$tempUnpackFolder = Join-Path $userKrePackages "temp"
|
||||
$tempKreFile = Join-Path $tempUnpackFolder "$kreFullName.nupkg"
|
||||
|
||||
if(Test-Path $tempUnpackFolder) {
|
||||
del "$tempUnpackFolder\*" -recurse
|
||||
} else {
|
||||
md $tempUnpackFolder -Force | Out-Null
|
||||
}
|
||||
copy $versionOrAlias $tempKreFile
|
||||
|
||||
Do-Kvm-Unpack $tempKreFile $tempUnpackFolder
|
||||
md $kreFolder -Force | Out-Null
|
||||
Write-Host "Installing to $kreFolder"
|
||||
mv "$tempUnpackFolder\*" $kreFolder
|
||||
}
|
||||
|
||||
$kreBin = "$kreFolder\bin"
|
||||
|
|
@ -233,9 +310,7 @@ param(
|
|||
{
|
||||
$kreFullName = Requested-VersionOrAlias $versionOrAlias
|
||||
|
||||
$kreFolder = "$userKrePackages\$kreFullName"
|
||||
|
||||
Do-Kvm-Download $kreFullName $kreFolder
|
||||
Do-Kvm-Download $kreFullName $userKrePackages
|
||||
Kvm-Use $versionOrAlias
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue