Skip to content

Instantly share code, notes, and snippets.

@yeoupooh
Last active October 3, 2021 06:48
Show Gist options
  • Save yeoupooh/90b4b6a8964f067a8e1317dbfc3a629f to your computer and use it in GitHub Desktop.
Save yeoupooh/90b4b6a8964f067a8e1317dbfc3a629f to your computer and use it in GitHub Desktop.
Simple Flutter environment changer script inspired by FVM (https://fvm.app/). DISCLAIMER: This is only for my own environment. You can use/modify this what whatever you want but at your own risk.
@echo off
@setlocal
@REM Uncomment to debug
@REM SET _EXEC=echo
@REM Check permission
net session >nul 2>&1
if %errorLevel% neq 0 (
echo ERROR: This script should be run by Administrators.
goto :end
)
@REM Command parameters
set FENV_CMD=%1
set FENV_VERSION=%2
@REM Internal variables
@REM Change FENV_BASE_DIR variable as you want
set FENV_BASE_DIR=d:\Apps\fenv
set FENV_CURR_DIR=%FENV_BASE_DIR%\current
set FENV_VERSIONS_DIR=%FENV_BASE_DIR%\versions
set FENV_SELECTED_DIR=%FENV_VERSIONS_DIR%\%FENV_VERSION%
@REM Check parameters are valid
if "%FENV_CMD%"=="" (
goto :help
)
if "%FENV_CMD%"=="list" (
dir %FENV_SELECTED_DIR% /b
goto :end
)
if "%FENV_CMD%"=="releases" (
pushd %FENV_CURR_DIR%
git fetch --all --tags
git tag -l
popd
goto :end
)
if "%FENV_CMD%"=="install" (
if "%FENV_VERSION%"=="" (
echo ERROR: Version should be set.
goto :end
)
if exist %FENV_SELECTED_DIR% (
echo ERROR: Flutter %FENV_VERSION% is already installed.
goto :end
)
%_EXEC% pushd %FENV_VERSIONS_DIR%
echo INFO: Installing Flutter %FENV_VERSION%...
%_EXEC% git clone https://github.com/flutter/flutter.git %FENV_VERSION%
%_EXEC% cd %FENV_VERSION%
%_EXEC% git fetch --all --tags
%_EXEC% git checkout tags/%FENV_VERSION% -b %FENV_VERSION%
%_EXEC% popd
echo INFO: Flutter %FENV_VERSION% is installed.
goto :end
)
if "%FENV_CMD%"=="uninstall" (
if "%FENV_VERSION%"=="" (
echo ERROR: Version should be set.
goto :end
)
if not exist %FENV_SELECTED_DIR% (
echo ERROR: Flutter %FENV_VERSION% is not installed.
goto :end
)
echo INFO: Deleting Flutter %FENV_VERSION%...
%_EXEC% rd /s/q %FENV_SELECTED_DIR%
echo INFO: Flutter %FENV_VERSION% is uninstalled.
goto :end
)
if "%FENV_CMD%"=="use" (
if "%FENV_VERSION%"=="" (
echo ERROR: Version should be set.
goto :end
)
if not exist %FENV_SELECTED_DIR% (
echo ERROR: Flutter %FENV_VERSION% is not installed.
goto :end
)
if exist %FENV_CURR_DIR% (
%_EXEC% rmdir %FENV_CURR_DIR%
)
%_EXEC% mklink /d %FENV_CURR_DIR% %FENV_SELECTED_DIR%
echo INFO: Now Flutter %FENV_VERSION% is used.
goto :end
)
echo ERROR: Unknown command: %FENV_CMD%
echo.
:help
echo %0 ^<command^> [version]
echo.
echo commands:
echo list List installed Flutter versions locally.
echo releases List released Flutter on public.
echo use ^<version^> Change a Flutter version to use. Before 'use', the version should be installed.
echo install ^<version^> Install given Flutter version.
echo uninstall ^<version^> Uninstall given Flutter version.
:end
@endlocal
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment