From 6d468d13770452de1b7506eb5908ed28b106ae25 Mon Sep 17 00:00:00 2001 From: Keerti Parthasarathy Date: Mon, 14 Oct 2019 15:50:21 +0000 Subject: [PATCH] Add a script and target to run dartfix Change-Id: I68df635359b898ef4b6054292f6523d81f46448a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121149 Reviewed-by: Paul Berry Reviewed-by: Alexander Thomas Commit-Queue: Keerti Parthasarathy --- BUILD.gn | 6 ++++++ sdk/bin/dartfix | 28 +++++++++++++++++++++++++ sdk/bin/dartfix.bat | 44 ++++++++++++++++++++++++++++++++++++++++ sdk_nnbd/bin/dartfix | 28 +++++++++++++++++++++++++ sdk_nnbd/bin/dartfix.bat | 44 ++++++++++++++++++++++++++++++++++++++++ utils/dartfix/BUILD.gn | 10 +++++++++ 6 files changed, 160 insertions(+) create mode 100755 sdk/bin/dartfix create mode 100644 sdk/bin/dartfix.bat create mode 100755 sdk_nnbd/bin/dartfix create mode 100644 sdk_nnbd/bin/dartfix.bat create mode 100644 utils/dartfix/BUILD.gn diff --git a/BUILD.gn b/BUILD.gn index 4cc5f592406..bafc1214690 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -116,6 +116,12 @@ group("dartfmt") { ] } +group("dartfix") { + deps = [ + "utils/dartfix", + ] +} + group("analysis_server") { deps = [ "utils/analysis_server", diff --git a/sdk/bin/dartfix b/sdk/bin/dartfix new file mode 100755 index 00000000000..bbeb80d42bb --- /dev/null +++ b/sdk/bin/dartfix @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +# for details. All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. + +# Run dartfix.dart on the Dart VM. This script assumes the Dart SDK's +# directory structure. + +function follow_links() { + file="$1" + while [ -h "$file" ]; do + # On Mac OS, readlink -f doesn't work. + file="$(readlink "$file")" + done + echo "$file" +} + +# Unlike $0, $BASH_SOURCE points to the absolute path of this file. +PROG_NAME="$(follow_links "$BASH_SOURCE")" + +# Handle the case where dart-sdk/bin has been symlinked to. +BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)" + +SNAPSHOT="$BIN_DIR/snapshots/dartfix.dart.snapshot" + +# We are running the snapshot in the built SDK. +DART="$BIN_DIR/dart" +exec "$DART" "$SNAPSHOT" "$@" diff --git a/sdk/bin/dartfix.bat b/sdk/bin/dartfix.bat new file mode 100644 index 00000000000..4241694f990 --- /dev/null +++ b/sdk/bin/dartfix.bat @@ -0,0 +1,44 @@ +@echo off +REM Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +REM for details. All rights reserved. Use of this source code is governed by a +REM BSD-style license that can be found in the LICENSE file. + +setlocal +rem Handle the case where dart-sdk/bin has been symlinked to. +set DIR_NAME_WITH_SLASH=%~dp0 +set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%% +call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR +rem Get rid of surrounding quotes. +for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi + +set DART=%BIN_DIR%\dart +set SNAPSHOT=%BIN_DIR%\snapshots\dartfix.dart.snapshot + +"%DART%" "%SNAPSHOT%" %* + +endlocal + +exit /b %errorlevel% + +rem Follow the symbolic links (junctions points) using `dir to determine the +rem canonical path. Output with a link looks something like this +rem +rem 01/03/2013 10:11 PM abc def +rem [c:\dart_bleeding\dart-repo.9\dart\out\ReleaseIA32\dart-sdk] +rem +rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename +rem surrounded by right angle bracket and left square bracket. Once we get +rem the filename, which is name of the link, we recursively follow that. +:follow_links +setlocal +for %%i in (%1) do set result=%%~fi +set current= +for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^ + ^| find "> %~n1 [" 2^>nul`) do ( + set current=%%i +) +if not "%current%"=="" call :follow_links "%current%", result +endlocal & set %~2=%result% +goto :eof + +:end diff --git a/sdk_nnbd/bin/dartfix b/sdk_nnbd/bin/dartfix new file mode 100755 index 00000000000..bbeb80d42bb --- /dev/null +++ b/sdk_nnbd/bin/dartfix @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +# for details. All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. + +# Run dartfix.dart on the Dart VM. This script assumes the Dart SDK's +# directory structure. + +function follow_links() { + file="$1" + while [ -h "$file" ]; do + # On Mac OS, readlink -f doesn't work. + file="$(readlink "$file")" + done + echo "$file" +} + +# Unlike $0, $BASH_SOURCE points to the absolute path of this file. +PROG_NAME="$(follow_links "$BASH_SOURCE")" + +# Handle the case where dart-sdk/bin has been symlinked to. +BIN_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)" + +SNAPSHOT="$BIN_DIR/snapshots/dartfix.dart.snapshot" + +# We are running the snapshot in the built SDK. +DART="$BIN_DIR/dart" +exec "$DART" "$SNAPSHOT" "$@" diff --git a/sdk_nnbd/bin/dartfix.bat b/sdk_nnbd/bin/dartfix.bat new file mode 100644 index 00000000000..4241694f990 --- /dev/null +++ b/sdk_nnbd/bin/dartfix.bat @@ -0,0 +1,44 @@ +@echo off +REM Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +REM for details. All rights reserved. Use of this source code is governed by a +REM BSD-style license that can be found in the LICENSE file. + +setlocal +rem Handle the case where dart-sdk/bin has been symlinked to. +set DIR_NAME_WITH_SLASH=%~dp0 +set DIR_NAME=%DIR_NAME_WITH_SLASH:~0,-1%% +call :follow_links "%DIR_NAME%", RETURNED_BIN_DIR +rem Get rid of surrounding quotes. +for %%i in ("%RETURNED_BIN_DIR%") do set BIN_DIR=%%~fi + +set DART=%BIN_DIR%\dart +set SNAPSHOT=%BIN_DIR%\snapshots\dartfix.dart.snapshot + +"%DART%" "%SNAPSHOT%" %* + +endlocal + +exit /b %errorlevel% + +rem Follow the symbolic links (junctions points) using `dir to determine the +rem canonical path. Output with a link looks something like this +rem +rem 01/03/2013 10:11 PM abc def +rem [c:\dart_bleeding\dart-repo.9\dart\out\ReleaseIA32\dart-sdk] +rem +rem So in the output of 'dir /a:l "targetdir"' we are looking for a filename +rem surrounded by right angle bracket and left square bracket. Once we get +rem the filename, which is name of the link, we recursively follow that. +:follow_links +setlocal +for %%i in (%1) do set result=%%~fi +set current= +for /f "usebackq tokens=2 delims=[]" %%i in (`dir /a:l "%~dp1" 2^>nul ^ + ^| find "> %~n1 [" 2^>nul`) do ( + set current=%%i +) +if not "%current%"=="" call :follow_links "%current%", result +endlocal & set %~2=%result% +goto :eof + +:end diff --git a/utils/dartfix/BUILD.gn b/utils/dartfix/BUILD.gn new file mode 100644 index 00000000000..e8043465c5f --- /dev/null +++ b/utils/dartfix/BUILD.gn @@ -0,0 +1,10 @@ +# Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file +# for details. All rights reserved. Use of this source code is governed by a +# BSD-style license that can be found in the LICENSE file. + +import("../application_snapshot.gni") + +application_snapshot("dartfix") { + main_dart = "../../pkg/dartfix/bin/dartfix.dart" + training_args = [ "--help" ] +}