| # Copyright 2017 The Chromium Authors. All rights reserved. | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 |  | 
 |  | 
 | # ---------------------------------- NOTE ---------------------------------- # | 
 | # | 
 | # Please keep the logic in this file consistent with the logic in the | 
 | # `update_dart_sdk.sh` script in the same directory to ensure that Flutter | 
 | # continues to work across all platforms! | 
 | # | 
 | # -------------------------------------------------------------------------- # | 
 |  | 
 | $ErrorActionPreference = "Stop" | 
 |  | 
 | $progName = Split-Path -parent $MyInvocation.MyCommand.Definition | 
 | $flutterRoot = (Get-Item $progName).parent.parent.FullName | 
 |  | 
 | $cachePath = "$flutterRoot\bin\cache" | 
 | $dartSdkPath = "$cachePath\dart-sdk" | 
 | $dartSdkStampPath = "$cachePath\dart-sdk.stamp" | 
 | $dartSdkVersion = (Get-Content "$flutterRoot\bin\internal\dart-sdk.version") | 
 |  | 
 | $oldDartSdkPrefix = "dart-sdk.old" | 
 |  | 
 | if ((Test-Path $dartSdkStampPath) -and ($dartSdkVersion -eq (Get-Content $dartSdkStampPath))) { | 
 |     return | 
 | } | 
 |  | 
 | Write-Host "Downloading Dart SDK $dartSdkVersion..." | 
 | $dartZipName = "dartsdk-windows-x64-release.zip" | 
 | $dartChannel = if ($dartSdkVersion.Contains("-dev.")) {"dev"} else {"stable"} | 
 | $dartSdkUrl = "https://storage.googleapis.com/dart-archive/channels/$dartChannel/raw/$dartSdkVersion/sdk/$dartZipName" | 
 |  | 
 | if (Test-Path $dartSdkPath) { | 
 |     # Move old SDK to a new location instead of deleting it in case it is still in use (e.g. by IntelliJ). | 
 |     $oldDartSdkSuffix = 1 | 
 |     while (Test-Path "$cachePath\$oldDartSdkPrefix$oldDartSdkSuffix") { $oldDartSdkSuffix++ } | 
 |     Rename-Item $dartSdkPath "$oldDartSdkPrefix$oldDartSdkSuffix" | 
 | } | 
 | New-Item $dartSdkPath -force -type directory | Out-Null | 
 | $dartSdkZip = "$cachePath\dart-sdk.zip" | 
 | Import-Module BitsTransfer | 
 | Start-BitsTransfer -Source $dartSdkUrl -Destination $dartSdkZip | 
 |  | 
 | Write-Host "Unzipping Dart SDK..." | 
 | If (Get-Command 7z -errorAction SilentlyContinue) { | 
 |     # The built-in unzippers are painfully slow. Use 7-Zip, if available. | 
 |     & 7z x $dartSdkZip -o"$cachePath" -bd | Out-Null | 
 | } ElseIf (Get-Command Expand-Archive -errorAction SilentlyContinue) { | 
 |     # Use PowerShell's built-in unzipper, if available (requires PowerShell 5+). | 
 |     Expand-Archive $dartSdkZip -DestinationPath $cachePath | 
 | } Else { | 
 |     # As last resort: fall back to the Windows GUI. | 
 |     $shell = New-Object -com shell.application | 
 |     $zip = $shell.NameSpace($dartSdkZip) | 
 |     foreach($item in $zip.items()) { | 
 |         $shell.Namespace($cachePath).copyhere($item) | 
 |     } | 
 | } | 
 |  | 
 | Remove-Item $dartSdkZip | 
 | $dartSdkVersion | Out-File $dartSdkStampPath -Encoding ASCII | 
 |  | 
 | # Try to delete all old SDKs. | 
 | Get-ChildItem -Path $cachePath | Where {$_.BaseName.StartsWith($oldDartSdkPrefix)} | Remove-Item -Recurse -ErrorAction SilentlyContinue |