| # 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" | |
| $engineStamp = "$cachePath\engine-dart-sdk.stamp" | |
| $engineVersion = (Get-Content "$flutterRoot\bin\internal\engine.version") | |
| $oldDartSdkPrefix = "dart-sdk.old" | |
| if ((Test-Path $engineStamp) -and ($engineVersion -eq (Get-Content $engineStamp))) { | |
| return | |
| } | |
| Write-Host "Downloading Dart SDK from Flutter engine $engineVersion..." | |
| $dartSdkBaseUrl = $Env:FLUTTER_STORAGE_BASE_URL | |
| if (-not $dartSdkBaseUrl) { | |
| $dartSdkBaseUrl = "https://storage.googleapis.com" | |
| } | |
| $dartZipName = "dart-sdk-windows-x64.zip" | |
| $dartSdkUrl = "$dartSdkBaseUrl/flutter_infra/flutter/$engineVersion/$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\$dartZipName" | |
| Try { | |
| Import-Module BitsTransfer | |
| Start-BitsTransfer -Source $dartSdkUrl -Destination $dartSdkZip | |
| } | |
| Catch { | |
| Write-Host "Downloading the Dart SDK using the BITS service failed, retrying with WebRequest..." | |
| Invoke-WebRequest -Uri $dartSdkUrl -OutFile $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 7za -errorAction SilentlyContinue) { | |
| # Use 7-Zip's standalone version 7za.exe, if available. | |
| & 7za 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 | |
| $engineVersion | Out-File $engineStamp -Encoding ASCII | |
| # Try to delete all old SDKs. | |
| Get-ChildItem -Path $cachePath | Where {$_.BaseName.StartsWith($oldDartSdkPrefix)} | Remove-Item -Recurse -ErrorAction SilentlyContinue |