// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:file/file.dart'; import 'package:file/local.dart'; import 'package:platform/platform.dart'; const String kIncrement = 'increment'; const String kCommit = 'commit'; const String kRemoteName = 'remote'; const String kJustPrint = 'just-print'; const String kYes = 'yes'; const String kForce = 'force'; const String kSkipTagging = 'skip-tagging'; const String kUpstreamRemote = 'https://github.com/flutter/flutter.git'; const List kReleaseChannels = [ 'stable', 'beta', 'dev', 'master', ]; /// Cast a dynamic to String and trim. String stdoutToString(dynamic input) { final String str = input as String; return str.trim(); } class ConductorException implements Exception { ConductorException(this.message); final String message; @override String toString() => 'Exception: $message'; } Directory _flutterRoot; Directory get localFlutterRoot { if (_flutterRoot != null) { return _flutterRoot; } String filePath; const FileSystem fileSystem = LocalFileSystem(); const Platform platform = LocalPlatform(); // If a test if (platform.script.scheme == 'data') { final RegExp pattern = RegExp( r'(file:\/\/[^"]*[/\\]dev\/tools[/\\][^"]+\.dart)', multiLine: true, ); final Match match = pattern.firstMatch(Uri.decodeFull(platform.script.path)); if (match == null) { throw Exception( 'Cannot determine path of script!\n${platform.script.path}', ); } filePath = Uri.parse(match.group(1)).path.replaceAll(r'%20', ' '); } else { filePath = platform.script.toFilePath(); } final String checkoutsDirname = fileSystem.path.normalize( fileSystem.path.join( fileSystem.path.dirname(filePath), '..', // flutter/dev/tools '..', // flutter/dev '..', // flutter ), ); _flutterRoot = fileSystem.directory(checkoutsDirname); return _flutterRoot; } bool assertsEnabled() { // Verify asserts enabled bool assertsEnabled = false; assert(() { assertsEnabled = true; return true; }()); return assertsEnabled; }