blob: 9a9083db349522799271edbe96c86322f63f46a2 [file] [log] [blame]
# Copyright 2015 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.
# How to use this script:
# - Allow the execution of PowerShell scripts (ByPass, etc.), for example:
# Set-ExecutionPolicy Unrestricted
# - Invoke any flutter command: Flutter.ps1 doctor
# - Force the path to Dart SDK: Flutter.ps1 -DartPath "c:\tools\dart\"
[CmdletBinding()]
param (
[Parameter(Mandatory=$False)]
[string]$DartPath,
[Parameter(Mandatory=$False)]
[switch]$Diag,
[parameter(mandatory=$False, position=1, ValueFromRemainingArguments=$true)]
$Remaining
)
# This function creates a snapshot of the latest version of flutter framework
function Do-Snapshot
{
Set-Location $flutterToolsDir
Write-Host "Info: Updating flutter tool..."
Invoke-Expression "pub.bat get $(&{If($Diag) {"--verbose"}})"
Set-Location $flutterDir
# Allows us to check if sky_engine's REVISION is correct
Write-Host "Info: Updating sky engine..."
Invoke-Expression "pub.bat get $(&{If($Diag) {"--verbose"}})"
Set-Location $flutterRoot
Invoke-Expression "$dartExe --snapshot=`"$snapshotPath`" `"$scriptPath`" --packages=`"$flutterToolsDir\.packages`""
$revision | Out-File $stampPath
}
# Save the current location
Push-Location
# Get the parent directory
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
$flutterRoot = (get-item $scriptPath ).parent.FullName
$flutterToolsDir = $flutterRoot + '\packages\flutter_tools'
$flutterDir = $flutterRoot + '\packages\flutter'
$snapshotPath = $flutterRoot + '\bin\cache\flutter_tools.snapshot'
$stampPath = $flutterRoot + '\bin\cache\flutter_tools.stamp'
$scriptPath = $flutterToolsDir + '\bin\flutter_tools.dart'
$dartExe = [io.path]::combine($DartPath, 'dart.exe')
# Set current working directory to the flutter directory
Set-Location $flutterRoot
# Test if Git is available on the Host
if ((Get-Command "git.exe" -ErrorAction SilentlyContinue) -eq $null) {
Write-Host "Error: Unable to find git.exe in your PATH"
Pop-Location
exit
}
# Test if the flutter directory is a git clone (otherwise git rev-parse HEAD would fail)
if (-not (Test-Path '.git')) {
Write-Host "Error: The flutter directory is not a clone of the GH project"
Pop-Location
exit
}
# Test if pub.bat is available on the Host
if ((Get-Command "pub.bat" -ErrorAction SilentlyContinue) -eq $null) {
Write-Host "Error: Unable to find Dart SDK in your PATH"
Pop-Location
exit
}
# Check if the snapshot version is out-of-date.
$revision = Invoke-Expression "git rev-parse HEAD"
if ( (-not (Test-Path $snapshotPath)) -Or (-not (Test-Path $stampPath)) ) {
Write-Host "Info: Snapshot doesn't exist"
Do-Snapshot
}
$stampValue = Get-Content $stampPath | Where-Object {$_ -match '\S'}
if ($stampValue -ne $revision) {
Write-Host "Info: Timestamp differs from revision"
Do-Snapshot
}
$yamltLastWriteTime = (ls "$flutterToolsDir\pubspec.yaml").LastWriteTime
$locktLastWriteTime = (ls "$flutterToolsDir\pubspec.lock").LastWriteTime
if ($locktLastWriteTime -lt $yamltLastWriteTime) {
Write-Host "Info: Mismatch between yaml and lock files"
Do-Snapshot
}
# Go back to last working directory
Pop-Location
Invoke-Expression "$dartExe `"$snapshotPath`" $Remaining"
# The VM exits with code 253 if the snapshot version is out-of-date.
if ($LASTEXITCODE -eq 253) {
Write-Host "Info: VM exited with code 253, we need to snapshot it again."
Invoke-Expression "$dartExe --snapshot=`"$snapshotPath`" `"$scriptPath`" --packages=`"$flutterToolsDir\.packages`""
Invoke-Expression "$dartExe `"$snapshotPath`" $Remaining"
}