Add commands to swap dart imports for local development (#31925)

This commit is contained in:
Jonah Williams 2019-05-02 01:14:15 -07:00 committed by GitHub
parent e17f9e8ff8
commit 83aa065f6a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 119 additions and 3 deletions

View file

@ -0,0 +1,116 @@
// Copyright 2019 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.
import 'package:args/args.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/context_runner.dart';
import 'package:flutter_tools/src/globals.dart';
import 'package:flutter_tools/src/runner/flutter_command_runner.dart';
final ArgParser argParser = ArgParser()
..addFlag('back', help: 'Swap back to dart:ui from web_ui', defaultsTo: false);
/// Swap the dart:ui imports with web_ui for local development.
///
/// This is only intended as a temporary bridge to the new development
/// workflow and will be removed at a later time.
Future<void> main(List<String> arguments) async {
final ArgResults results = argParser.parse(arguments);
await runInContext(() {
// Normally this is initialized by the command runner.
Cache.flutterRoot = FlutterCommandRunner.defaultFlutterRoot;
printError(
'WARNING: This is only intended for use by flutter contributors.'
' Running this command will alter the code in your flutter checkout.'
);
final String engineDirectory = fs.path.join(Cache.flutterRoot, '..', 'engine', 'src', 'flutter', 'lib', 'stub_ui');
final String flutterPath = fs.path.join(Cache.flutterRoot, 'packages', 'flutter');
final String flutterTestPath = fs.path.join(Cache.flutterRoot, 'packages', 'flutter_test');
final List<List<Pattern>> codePatterns = <List<Pattern>>[
<Pattern>['import \'dart:ui\'', 'import \'package:flutter_web_ui/ui.dart\''],
<Pattern>['export \'dart:ui\'', 'export \'package:flutter_web_ui/ui.dart\''],
<Pattern>[
'export \'bitfield.dart\' if (dart.library.html) \'bitfield_unsupported.dart\';',
'export \'bitfield_unsupported.dart\';'
]
];
final List<List<Pattern>> configPatterns = <List<Pattern>>[
<Pattern>[
'''
sky_engine:
sdk: flutter
''',
'''
flutter_web_ui:
path: $engineDirectory
'''
],
<Pattern>[
'''
flutter:
sdk: flutter
''',
'''
flutter:
path: $flutterPath
'''
],
<Pattern>[
'''
flutter_driver:
sdk: flutter
''',
'''
# flutter_driver:
# sdk: flutter
'''
],
<Pattern>[
'''
flutter_test:
sdk: flutter
''',
'''
flutter_test:
path: $flutterTestPath
build_runner: '>=0.8.10 <2.0.0'
build_web_compilers: '>=0.3.6 <2.0.0'
'''
],
<Pattern>[
r'''
flutter_goldens:
sdk: flutter
''',
r'''
# flutter_goldens:
# sdk: flutter
'''
],
];
final Iterable<File> searchFiles = <Directory>[
fs.directory(fs.path.join(Cache.flutterRoot, 'packages')),
fs.directory(fs.path.join(Cache.flutterRoot, 'examples')),
].expand((Directory directory) => directory.listSync(recursive: true))
.whereType<File>()
.where((File file) => file.path.endsWith('.dart') || file.path.endsWith('pubspec.yaml'));
for (File file in searchFiles) {
String contents = file.readAsStringSync();
final List<List<Pattern>> patterns = file.path.endsWith('.dart')
? codePatterns
: configPatterns;
if (file.path.endsWith('.dart')) {
for (List<Pattern> patterns in patterns) {
contents = results['back']
? contents.replaceAll(patterns.last, patterns.first)
: contents.replaceAll(patterns.first, patterns.last);
}
file.writeAsStringSync(contents);
}
}
});
}

View file

@ -178,7 +178,7 @@ class FlutterCommandRunner extends CommandRunner<void> {
return '${wrapText(description)}\n\n$usageWithoutDescription';
}
static String get _defaultFlutterRoot {
static String get defaultFlutterRoot {
if (platform.environment.containsKey(kFlutterRootEnvironmentVariableName))
return platform.environment[kFlutterRootEnvironmentVariableName];
try {
@ -342,7 +342,7 @@ class FlutterCommandRunner extends CommandRunner<void> {
// We must set Cache.flutterRoot early because other features use it (e.g.
// enginePath's initializer uses it).
final String flutterRoot = topLevelResults['flutter-root'] ?? _defaultFlutterRoot;
final String flutterRoot = topLevelResults['flutter-root'] ?? defaultFlutterRoot;
Cache.flutterRoot = fs.path.normalize(fs.path.absolute(flutterRoot));
// Set up the tooling configuration.
@ -478,7 +478,7 @@ class FlutterCommandRunner extends CommandRunner<void> {
}
static void initFlutterRoot() {
Cache.flutterRoot ??= _defaultFlutterRoot;
Cache.flutterRoot ??= defaultFlutterRoot;
}
/// Get the root directories of the repo - the directories containing Dart packages.