flutter.bat 6.03 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
@ECHO off
REM Copyright 2017 The Chromium Authors. All rights reserved.
REM Use of this source code is governed by a BSD-style license that can be
REM found in the LICENSE file.


REM ---------------------------------- NOTE ----------------------------------
REM
REM Please keep the logic in this file consistent with the logic in the
REM `flutter` script in the same directory to ensure that Flutter continues to
REM work across all platforms!
REM
REM --------------------------------------------------------------------------

SETLOCAL ENABLEDELAYEDEXPANSION

FOR %%i IN ("%~dp0..") DO SET FLUTTER_ROOT=%%~fi

SET flutter_tools_dir=%FLUTTER_ROOT%\packages\flutter_tools
20
SET cache_dir=%FLUTTER_ROOT%\bin\cache
21 22
SET snapshot_path=%cache_dir%\flutter_tools.snapshot
SET stamp_path=%cache_dir%\flutter_tools.stamp
23
SET script_path=%flutter_tools_dir%\bin\flutter_tools.dart
24
SET dart_sdk_path=%cache_dir%\dart-sdk
25 26
SET engine_stamp=%cache_dir%\engine-dart-sdk.stamp
SET engine_version_path=%FLUTTER_ROOT%\bin\internal\engine.version
27
SET pub_cache_path=%FLUTTER_ROOT%\.pub-cache
28 29 30 31

SET dart=%dart_sdk_path%\bin\dart.exe
SET pub=%dart_sdk_path%\bin\pub.bat

32 33 34 35
REM If available, add location of bundled mingit to PATH
SET mingit_path=%FLUTTER_ROOT%\bin\mingit\cmd
IF EXIST "%mingit_path%" SET PATH=%PATH%;%mingit_path%

36
REM Test if Git is available on the Host
37
where /q git || ECHO Error: Unable to find git in your PATH. && EXIT /B 1
38 39 40
REM  Test if the flutter directory is a git clone, otherwise git rev-parse HEAD would fail
IF NOT EXIST "%flutter_root%\.git" (
  ECHO Error: The Flutter directory is not a clone of the GitHub project.
41 42 43
  ECHO        The flutter tool requires Git in order to operate properly;
  ECHO        to set up Flutter, run the following command:
  ECHO        git clone -b beta https://github.com/flutter/flutter.git
44
  EXIT /B 1
45 46
)

47 48 49
REM Ensure that bin/cache exists.
IF NOT EXIST "%cache_dir%" MKDIR "%cache_dir%"

50 51
REM To debug the tool, you can uncomment the following lines to enable checked mode and set an observatory port:
REM SET FLUTTER_TOOL_ARGS="--checked %FLUTTER_TOOL_ARGS%"
52
REM SET FLUTTER_TOOL_ARGS="%FLUTTER_TOOL_ARGS% --observe=65432"
53

54 55 56 57 58 59 60 61 62 63
:acquire_lock
2>NUL (
  REM "3" is now stderr because of "2>NUL".
  CALL :subroutine %* 2>&3 9> "%cache_dir%\flutter.bat.lock" || GOTO acquire_lock
)
GOTO :after_subroutine

:subroutine
  PUSHD "%flutter_root%"
  FOR /f %%r IN ('git rev-parse HEAD') DO SET revision=%%r
64 65
  POPD

66 67
  REM The following IF conditions are all linked with a logical OR. However,
  REM there is no OR operator in batch and a GOTO construct is used as replacement.
68

69 70 71
  IF NOT EXIST "%engine_stamp%" GOTO do_sdk_update_and_snapshot
  SET /P dart_required_version=<"%engine_version_path%"
  SET /P dart_installed_version=<"%engine_stamp%"
72
  IF !dart_required_version! NEQ !dart_installed_version! GOTO do_sdk_update_and_snapshot
73 74
  IF NOT EXIST "%snapshot_path%" GOTO do_snapshot
  IF NOT EXIST "%stamp_path%" GOTO do_snapshot
75
  SET /P stamp_value=<"%stamp_path%"
76
  IF !stamp_value! NEQ !revision! GOTO do_snapshot
77 78 79 80 81 82 83 84
  REM Compare "last modified" timestamps
  SET pubspec_yaml_path=%flutter_tools_dir%\pubspec.yaml
  SET pubspec_lock_path=%flutter_tools_dir%\pubspec.lock
  FOR %%i IN ("%pubspec_yaml_path%") DO SET yaml_timestamp=%%~ti
  FOR %%i IN ("%pubspec_lock_path%") DO SET lock_timestamp=%%~ti
  IF !yaml_timestamp! EQU !lock_timestamp! GOTO do_snapshot
  FOR /F %%i IN ('DIR /B /O:D "%pubspec_yaml_path%" "%pubspec_lock_path%"') DO SET newer_file=%%i
  IF "%newer_file%" EQU "pubspec.yaml" GOTO do_snapshot
85 86 87 88

  REM Everything is uptodate - exit subroutine
  EXIT /B

89
  :do_sdk_update_and_snapshot
90
    ECHO Checking Dart SDK version...
91 92 93 94
    SET update_dart_bin=%FLUTTER_ROOT%/bin/internal/update_dart_sdk.ps1
    REM Escape apostrophes from the executable path
    SET "update_dart_bin=!update_dart_bin:'=''!"
    CALL PowerShell.exe -ExecutionPolicy Bypass -Command "& '%update_dart_bin%'"
95 96 97
    IF "%ERRORLEVEL%" NEQ "0" (
      ECHO Error: Unable to update Dart SDK. Retrying...
      timeout /t 5 /nobreak
98
      GOTO :do_sdk_update_and_snapshot
99
    )
100

101
  :do_snapshot
102
    IF EXIST "%FLUTTER_ROOT%\version" DEL "%FLUTTER_ROOT%\version"
103
    ECHO: > "%cache_dir%\.dartignore"
104 105
    ECHO Updating flutter tool...
    PUSHD "%flutter_tools_dir%"
106 107 108

    REM Makes changes to PUB_ENVIRONMENT only visible to commands within SETLOCAL/ENDLOCAL
    SETLOCAL
109 110 111 112 113 114 115 116 117 118 119
      IF "%TRAVIS%" == "true" GOTO on_bot
      IF "%BOT%" == "true" GOTO on_bot
      IF "%CONTINUOUS_INTEGRATION%" == "true" GOTO on_bot
      IF "%CHROME_HEADLESS%" == "1" GOTO on_bot
      IF "%APPVEYOR%" == "true" GOTO on_bot
      IF "%CI%" == "true" GOTO on_bot
      GOTO not_on_bot
      :on_bot
        SET PUB_ENVIRONMENT=%PUB_ENVIRONMENT%:flutter_bot
      :not_on_bot
      SET PUB_ENVIRONMENT=%PUB_ENVIRONMENT%:flutter_install
120 121 122
      IF "%PUB_CACHE%" == "" (
       IF EXIST "%pub_cache_path%" SET PUB_CACHE=%pub_cache_path%
      )
123 124 125
      :retry_pub_upgrade
      CALL "%pub%" upgrade --verbosity=error --no-packages-dir
      IF "%ERRORLEVEL%" NEQ "0" (
126
        ECHO Error: Unable to 'pub upgrade' flutter tool. Retrying in five seconds...
127 128 129
        timeout /t 5 /nobreak
        GOTO :retry_pub_upgrade
      )
130 131
    ENDLOCAL

132
    POPD
133 134

    :retry_dart_snapshot
135
    CALL "%dart%" --snapshot="%snapshot_path%" --packages="%flutter_tools_dir%\.packages" "%script_path%"
136 137 138 139 140
    IF "%ERRORLEVEL%" NEQ "0" (
      ECHO Error: Unable to create dart snapshot for flutter tool. Retrying...
      timeout /t 5 /nobreak
      GOTO :retry_dart_snapshot
    )
141 142 143 144 145 146
    >"%stamp_path%" ECHO %revision%

  REM Exit Subroutine
  EXIT /B

:after_subroutine
147

148
CALL "%dart%" %FLUTTER_TOOL_ARGS% "%snapshot_path%" %*
149
SET exit_code=%ERRORLEVEL%
150 151

REM The VM exits with code 253 if the snapshot version is out-of-date.
152
IF "%exit_code%" EQU "253" (
153
  CALL "%dart%" --snapshot="%snapshot_path%" --packages="%flutter_tools_dir%\.packages" "%script_path%"
154 155 156 157 158
  SET exit_code=%ERRORLEVEL%
  IF "%exit_code%" EQU "253" (
    ECHO Error: Unable to create dart snapshot for flutter tool.
    EXIT /B %exit_code%
  )
159 160
  CALL "%dart%" %FLUTTER_TOOL_ARGS% "%snapshot_path%" %*
  SET exit_code=%ERRORLEVEL%
161
)
162

163
EXIT /B %exit_code%