mirror of
https://github.com/flutter/flutter
synced 2024-10-13 11:42:54 +00:00
[flutter_tools] Make Config context-free (#49834)
This commit is contained in:
parent
1eb5bb653c
commit
2c51efef29
|
@ -189,7 +189,11 @@ FileSystem crashFileSystem = const LocalFileSystem();
|
||||||
|
|
||||||
/// Saves the crash report to a local file.
|
/// Saves the crash report to a local file.
|
||||||
Future<File> _createLocalCrashReport(List<String> args, dynamic error, StackTrace stackTrace, String doctorText) async {
|
Future<File> _createLocalCrashReport(List<String> args, dynamic error, StackTrace stackTrace, String doctorText) async {
|
||||||
File crashFile = fsUtils.getUniqueFile(crashFileSystem.currentDirectory, 'flutter', 'log');
|
File crashFile = globals.fsUtils.getUniqueFile(
|
||||||
|
crashFileSystem.currentDirectory,
|
||||||
|
'flutter',
|
||||||
|
'log',
|
||||||
|
);
|
||||||
|
|
||||||
final StringBuffer buffer = StringBuffer();
|
final StringBuffer buffer = StringBuffer();
|
||||||
|
|
||||||
|
@ -209,7 +213,11 @@ Future<File> _createLocalCrashReport(List<String> args, dynamic error, StackTrac
|
||||||
crashFile.writeAsStringSync(buffer.toString());
|
crashFile.writeAsStringSync(buffer.toString());
|
||||||
} on FileSystemException catch (_) {
|
} on FileSystemException catch (_) {
|
||||||
// Fallback to the system temporary directory.
|
// Fallback to the system temporary directory.
|
||||||
crashFile = fsUtils.getUniqueFile(crashFileSystem.systemTempDirectory, 'flutter', 'log');
|
crashFile = globals.fsUtils.getUniqueFile(
|
||||||
|
crashFileSystem.systemTempDirectory,
|
||||||
|
'flutter',
|
||||||
|
'log',
|
||||||
|
);
|
||||||
try {
|
try {
|
||||||
crashFile.writeAsStringSync(buffer.toString());
|
crashFile.writeAsStringSync(buffer.toString());
|
||||||
} on FileSystemException catch (e) {
|
} on FileSystemException catch (e) {
|
||||||
|
|
|
@ -549,7 +549,7 @@ Future<void> buildGradleAar({
|
||||||
|
|
||||||
// Copy the local engine repo in the output directory.
|
// Copy the local engine repo in the output directory.
|
||||||
try {
|
try {
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
localEngineRepo,
|
localEngineRepo,
|
||||||
getRepoDirectory(outputDirectory),
|
getRepoDirectory(outputDirectory),
|
||||||
);
|
);
|
||||||
|
|
|
@ -97,7 +97,7 @@ class GradleUtils {
|
||||||
|
|
||||||
/// Injects the Gradle wrapper files if any of these files don't exist in [directory].
|
/// Injects the Gradle wrapper files if any of these files don't exist in [directory].
|
||||||
void injectGradleWrapperIfNeeded(Directory directory) {
|
void injectGradleWrapperIfNeeded(Directory directory) {
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
globals.cache.getArtifactDirectory('gradle_wrapper'),
|
globals.cache.getArtifactDirectory('gradle_wrapper'),
|
||||||
directory,
|
directory,
|
||||||
shouldCopyFile: (File sourceFile, File destinationFile) {
|
shouldCopyFile: (File sourceFile, File destinationFile) {
|
||||||
|
@ -266,10 +266,10 @@ void updateLocalProperties({
|
||||||
}
|
}
|
||||||
|
|
||||||
if (androidSdk != null) {
|
if (androidSdk != null) {
|
||||||
changeIfNecessary('sdk.dir', fsUtils.escapePath(androidSdk.directory));
|
changeIfNecessary('sdk.dir', globals.fsUtils.escapePath(androidSdk.directory));
|
||||||
}
|
}
|
||||||
|
|
||||||
changeIfNecessary('flutter.sdk', fsUtils.escapePath(Cache.flutterRoot));
|
changeIfNecessary('flutter.sdk', globals.fsUtils.escapePath(Cache.flutterRoot));
|
||||||
if (buildInfo != null) {
|
if (buildInfo != null) {
|
||||||
changeIfNecessary('flutter.buildMode', buildInfo.modeName);
|
changeIfNecessary('flutter.buildMode', buildInfo.modeName);
|
||||||
final String buildName = validatedBuildNameForPlatform(
|
final String buildName = validatedBuildNameForPlatform(
|
||||||
|
@ -295,7 +295,7 @@ void updateLocalProperties({
|
||||||
void writeLocalProperties(File properties) {
|
void writeLocalProperties(File properties) {
|
||||||
final SettingsFile settings = SettingsFile();
|
final SettingsFile settings = SettingsFile();
|
||||||
if (androidSdk != null) {
|
if (androidSdk != null) {
|
||||||
settings.values['sdk.dir'] = fsUtils.escapePath(androidSdk.directory);
|
settings.values['sdk.dir'] = globals.fsUtils.escapePath(androidSdk.directory);
|
||||||
}
|
}
|
||||||
settings.writeContents(properties);
|
settings.writeContents(properties);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,36 +2,40 @@
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
import 'package:meta/meta.dart';
|
||||||
|
|
||||||
import '../convert.dart';
|
import '../convert.dart';
|
||||||
import '../globals.dart' as globals;
|
|
||||||
import 'file_system.dart';
|
import 'file_system.dart';
|
||||||
import 'logger.dart';
|
import 'logger.dart';
|
||||||
import 'utils.dart';
|
import 'utils.dart';
|
||||||
|
|
||||||
class Config {
|
class Config {
|
||||||
Config([File configFile, Logger localLogger]) {
|
Config({
|
||||||
final Logger loggerInstance = localLogger ?? globals.logger;
|
@required File file,
|
||||||
_configFile = configFile ?? globals.fs.file(globals.fs.path.join(
|
@required Logger logger,
|
||||||
fsUtils.userHomePath,
|
}) : _file = file, _logger = logger {
|
||||||
'.flutter_settings',
|
if (!_file.existsSync()) {
|
||||||
));
|
return;
|
||||||
if (_configFile.existsSync()) {
|
}
|
||||||
try {
|
try {
|
||||||
_values = castStringKeyedMap(json.decode(_configFile.readAsStringSync()));
|
_values = castStringKeyedMap(json.decode(_file.readAsStringSync()));
|
||||||
} on FormatException {
|
} on FormatException {
|
||||||
loggerInstance
|
_logger
|
||||||
..printError('Failed to decode preferences in ${_configFile.path}.')
|
..printError('Failed to decode preferences in ${_file.path}.')
|
||||||
..printError(
|
..printError(
|
||||||
'You may need to reapply any previously saved configuration '
|
'You may need to reapply any previously saved configuration '
|
||||||
'with the "flutter config" command.',
|
'with the "flutter config" command.',
|
||||||
);
|
);
|
||||||
_configFile.deleteSync();
|
_file.deleteSync();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
File _configFile;
|
static const String kFlutterSettings = '.flutter_settings';
|
||||||
String get configPath => _configFile.path;
|
|
||||||
|
final File _file;
|
||||||
|
final Logger _logger;
|
||||||
|
|
||||||
|
String get configPath => _file.path;
|
||||||
|
|
||||||
Map<String, dynamic> _values = <String, dynamic>{};
|
Map<String, dynamic> _values = <String, dynamic>{};
|
||||||
|
|
||||||
|
@ -54,6 +58,6 @@ class Config {
|
||||||
void _flushValues() {
|
void _flushValues() {
|
||||||
String json = const JsonEncoder.withIndent(' ').convert(_values);
|
String json = const JsonEncoder.withIndent(' ').convert(_values);
|
||||||
json = '$json\n';
|
json = '$json\n';
|
||||||
_configFile.writeAsStringSync(json);
|
_file.writeAsStringSync(json);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,7 @@ import 'package:file/file.dart';
|
||||||
import 'package:meta/meta.dart';
|
import 'package:meta/meta.dart';
|
||||||
import 'package:platform/platform.dart';
|
import 'package:platform/platform.dart';
|
||||||
|
|
||||||
import '../globals.dart' as globals;
|
|
||||||
import 'common.dart' show throwToolExit;
|
import 'common.dart' show throwToolExit;
|
||||||
import 'context.dart';
|
|
||||||
|
|
||||||
export 'package:file/file.dart';
|
export 'package:file/file.dart';
|
||||||
export 'package:file/local.dart';
|
export 'package:file/local.dart';
|
||||||
|
@ -23,13 +21,6 @@ class FileNotFoundException implements IOException {
|
||||||
String toString() => 'File not found: $path';
|
String toString() => 'File not found: $path';
|
||||||
}
|
}
|
||||||
|
|
||||||
final FileSystemUtils _defaultFileSystemUtils = FileSystemUtils(
|
|
||||||
fileSystem: globals.fs,
|
|
||||||
platform: globals.platform,
|
|
||||||
);
|
|
||||||
|
|
||||||
FileSystemUtils get fsUtils => context.get<FileSystemUtils>() ?? _defaultFileSystemUtils;
|
|
||||||
|
|
||||||
/// Various convenience file system methods.
|
/// Various convenience file system methods.
|
||||||
class FileSystemUtils {
|
class FileSystemUtils {
|
||||||
FileSystemUtils({
|
FileSystemUtils({
|
||||||
|
|
|
@ -397,7 +397,7 @@ class _ExperimentalResidentWebRunner extends ResidentWebRunner {
|
||||||
}
|
}
|
||||||
final String modeName = debuggingOptions.buildInfo.friendlyModeName;
|
final String modeName = debuggingOptions.buildInfo.friendlyModeName;
|
||||||
globals.printStatus(
|
globals.printStatus(
|
||||||
'Launching ${fsUtils.getDisplayPath(target)} '
|
'Launching ${globals.fsUtils.getDisplayPath(target)} '
|
||||||
'on ${device.device.name} in $modeName mode...',
|
'on ${device.device.name} in $modeName mode...',
|
||||||
);
|
);
|
||||||
final String effectiveHostname = debuggingOptions.hostname ?? 'localhost';
|
final String effectiveHostname = debuggingOptions.hostname ?? 'localhost';
|
||||||
|
@ -641,7 +641,7 @@ class _DwdsResidentWebRunner extends ResidentWebRunner {
|
||||||
}
|
}
|
||||||
final String modeName = debuggingOptions.buildInfo.friendlyModeName;
|
final String modeName = debuggingOptions.buildInfo.friendlyModeName;
|
||||||
globals.printStatus(
|
globals.printStatus(
|
||||||
'Launching ${fsUtils.getDisplayPath(target)} '
|
'Launching ${globals.fsUtils.getDisplayPath(target)} '
|
||||||
'on ${device.device.name} in $modeName mode...',
|
'on ${device.device.name} in $modeName mode...',
|
||||||
);
|
);
|
||||||
Status buildStatus;
|
Status buildStatus;
|
||||||
|
|
|
@ -87,7 +87,7 @@ class BuildRunnerWebCompilationProxy extends WebCompilationProxy {
|
||||||
'packages',
|
'packages',
|
||||||
globals.fs.path.basename(childDirectory.path),
|
globals.fs.path.basename(childDirectory.path),
|
||||||
);
|
);
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
childDirectory.childDirectory('lib'),
|
childDirectory.childDirectory('lib'),
|
||||||
globals.fs.directory(path),
|
globals.fs.directory(path),
|
||||||
);
|
);
|
||||||
|
@ -95,7 +95,7 @@ class BuildRunnerWebCompilationProxy extends WebCompilationProxy {
|
||||||
final Directory outputDirectory = rootDirectory
|
final Directory outputDirectory = rootDirectory
|
||||||
.childDirectory(projectName)
|
.childDirectory(projectName)
|
||||||
.childDirectory('test');
|
.childDirectory('test');
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
outputDirectory,
|
outputDirectory,
|
||||||
globals.fs.directory(globals.fs.path.join(testOutputDir)),
|
globals.fs.directory(globals.fs.path.join(testOutputDir)),
|
||||||
);
|
);
|
||||||
|
|
|
@ -124,7 +124,7 @@ class FlutterPlugins extends Target {
|
||||||
final FlutterProject project = FlutterProject.fromDirectory(environment.projectDir);
|
final FlutterProject project = FlutterProject.fromDirectory(environment.projectDir);
|
||||||
final List<Plugin> plugins = findPlugins(project);
|
final List<Plugin> plugins = findPlugins(project);
|
||||||
final String pluginManifest = plugins
|
final String pluginManifest = plugins
|
||||||
.map<String>((Plugin p) => '${p.name}=${fsUtils.escapePath(p.path)}')
|
.map<String>((Plugin p) => '${p.name}=${globals.fsUtils.escapePath(p.path)}')
|
||||||
.join('\n');
|
.join('\n');
|
||||||
final File flutterPluginsFile = environment.projectDir.childFile('.flutter-plugins');
|
final File flutterPluginsFile = environment.projectDir.childFile('.flutter-plugins');
|
||||||
if (!flutterPluginsFile.existsSync() || flutterPluginsFile.readAsStringSync() != pluginManifest) {
|
if (!flutterPluginsFile.existsSync() || flutterPluginsFile.readAsStringSync() != pluginManifest) {
|
||||||
|
|
|
@ -106,6 +106,7 @@ class Cache {
|
||||||
// TODO(zra): Move to initializer list once logger and platform parameters
|
// TODO(zra): Move to initializer list once logger and platform parameters
|
||||||
// are required.
|
// are required.
|
||||||
_net = Net(logger: _logger, platform: _platform);
|
_net = Net(logger: _logger, platform: _platform);
|
||||||
|
_fsUtils = FileSystemUtils(fileSystem: _fileSystem, platform: _platform);
|
||||||
if (artifacts == null) {
|
if (artifacts == null) {
|
||||||
_artifacts.add(MaterialFonts(this));
|
_artifacts.add(MaterialFonts(this));
|
||||||
|
|
||||||
|
@ -139,6 +140,7 @@ class Cache {
|
||||||
final OperatingSystemUtils _osUtils;
|
final OperatingSystemUtils _osUtils;
|
||||||
|
|
||||||
Net _net;
|
Net _net;
|
||||||
|
FileSystemUtils _fsUtils;
|
||||||
|
|
||||||
static const List<String> _hostsBlockedInChina = <String> [
|
static const List<String> _hostsBlockedInChina = <String> [
|
||||||
'storage.googleapis.com',
|
'storage.googleapis.com',
|
||||||
|
@ -347,9 +349,12 @@ class Cache {
|
||||||
}
|
}
|
||||||
|
|
||||||
String getVersionFor(String artifactName) {
|
String getVersionFor(String artifactName) {
|
||||||
final File versionFile = _fileSystem.file(globals.fs.path.join(
|
final File versionFile = _fileSystem.file(_fileSystem.path.join(
|
||||||
_rootOverride?.path ?? flutterRoot, 'bin', 'internal',
|
_rootOverride?.path ?? flutterRoot,
|
||||||
'$artifactName.version'));
|
'bin',
|
||||||
|
'internal',
|
||||||
|
'$artifactName.version',
|
||||||
|
));
|
||||||
return versionFile.existsSync() ? versionFile.readAsStringSync().trim() : null;
|
return versionFile.existsSync() ? versionFile.readAsStringSync().trim() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -370,7 +375,7 @@ class Cache {
|
||||||
/// [entity] doesn't exist.
|
/// [entity] doesn't exist.
|
||||||
bool isOlderThanToolsStamp(FileSystemEntity entity) {
|
bool isOlderThanToolsStamp(FileSystemEntity entity) {
|
||||||
final File flutterToolsStamp = getStampFileFor('flutter_tools');
|
final File flutterToolsStamp = getStampFileFor('flutter_tools');
|
||||||
return fsUtils.isOlderThanReference(
|
return _fsUtils.isOlderThanReference(
|
||||||
entity: entity,
|
entity: entity,
|
||||||
referenceFile: flutterToolsStamp,
|
referenceFile: flutterToolsStamp,
|
||||||
);
|
);
|
||||||
|
@ -382,13 +387,19 @@ class Cache {
|
||||||
final Uri url = Uri.parse(urlStr);
|
final Uri url = Uri.parse(urlStr);
|
||||||
final Directory thirdPartyDir = getArtifactDirectory('third_party');
|
final Directory thirdPartyDir = getArtifactDirectory('third_party');
|
||||||
|
|
||||||
final Directory serviceDir = _fileSystem.directory(_fileSystem.path.join(thirdPartyDir.path, serviceName));
|
final Directory serviceDir = _fileSystem.directory(_fileSystem.path.join(
|
||||||
|
thirdPartyDir.path,
|
||||||
|
serviceName,
|
||||||
|
));
|
||||||
if (!serviceDir.existsSync()) {
|
if (!serviceDir.existsSync()) {
|
||||||
serviceDir.createSync(recursive: true);
|
serviceDir.createSync(recursive: true);
|
||||||
_osUtils.chmod(serviceDir, '755');
|
_osUtils.chmod(serviceDir, '755');
|
||||||
}
|
}
|
||||||
|
|
||||||
final File cachedFile = _fileSystem.file(_fileSystem.path.join(serviceDir.path, url.pathSegments.last));
|
final File cachedFile = _fileSystem.file(_fileSystem.path.join(
|
||||||
|
serviceDir.path,
|
||||||
|
url.pathSegments.last,
|
||||||
|
));
|
||||||
if (!cachedFile.existsSync()) {
|
if (!cachedFile.existsSync()) {
|
||||||
try {
|
try {
|
||||||
await downloadFile(url, cachedFile);
|
await downloadFile(url, cachedFile);
|
||||||
|
@ -452,7 +463,7 @@ class Cache {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> doesRemoteExist(String message, Uri url) async {
|
Future<bool> doesRemoteExist(String message, Uri url) async {
|
||||||
final Status status = globals.logger.startProgress(
|
final Status status = _logger.startProgress(
|
||||||
message,
|
message,
|
||||||
timeout: timeoutConfiguration.slowOperation,
|
timeout: timeoutConfiguration.slowOperation,
|
||||||
);
|
);
|
||||||
|
@ -971,7 +982,7 @@ class AndroidMavenArtifacts extends ArtifactSet {
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
final String gradleExecutable = gradle.absolute.path;
|
final String gradleExecutable = gradle.absolute.path;
|
||||||
final String flutterSdk = fsUtils.escapePath(Cache.flutterRoot);
|
final String flutterSdk = globals.fsUtils.escapePath(Cache.flutterRoot);
|
||||||
final RunResult processResult = await processUtils.run(
|
final RunResult processResult = await processUtils.run(
|
||||||
<String>[
|
<String>[
|
||||||
gradleExecutable,
|
gradleExecutable,
|
||||||
|
|
|
@ -294,7 +294,7 @@ end
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Copy universal engine cache framework to mode directory.
|
// Copy universal engine cache framework to mode directory.
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
globals.fs.directory(engineCacheFlutterFrameworkDirectory),
|
globals.fs.directory(engineCacheFlutterFrameworkDirectory),
|
||||||
fatFlutterFrameworkCopy,
|
fatFlutterFrameworkCopy,
|
||||||
);
|
);
|
||||||
|
@ -523,7 +523,7 @@ end
|
||||||
}
|
}
|
||||||
final String binaryName = globals.fs.path.basenameWithoutExtension(podFrameworkName);
|
final String binaryName = globals.fs.path.basenameWithoutExtension(podFrameworkName);
|
||||||
if (boolArg('universal')) {
|
if (boolArg('universal')) {
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
podProduct as Directory,
|
podProduct as Directory,
|
||||||
modeDirectory.childDirectory(podFrameworkName),
|
modeDirectory.childDirectory(podFrameworkName),
|
||||||
);
|
);
|
||||||
|
@ -637,7 +637,7 @@ end
|
||||||
.childDirectory(frameworkFileName);
|
.childDirectory(frameworkFileName);
|
||||||
final File armFlutterFrameworkBinary = armFlutterFrameworkDirectory
|
final File armFlutterFrameworkBinary = armFlutterFrameworkDirectory
|
||||||
.childFile(frameworkBinaryName);
|
.childFile(frameworkBinaryName);
|
||||||
fsUtils.copyDirectorySync(fatFramework, armFlutterFrameworkDirectory);
|
globals.fsUtils.copyDirectorySync(fatFramework, armFlutterFrameworkDirectory);
|
||||||
|
|
||||||
// Create iOS framework.
|
// Create iOS framework.
|
||||||
List<String> lipoCommand = <String>[
|
List<String> lipoCommand = <String>[
|
||||||
|
@ -664,7 +664,7 @@ end
|
||||||
.childDirectory(frameworkFileName);
|
.childDirectory(frameworkFileName);
|
||||||
final File simulatorFlutterFrameworkBinary = simulatorFlutterFrameworkDirectory
|
final File simulatorFlutterFrameworkBinary = simulatorFlutterFrameworkDirectory
|
||||||
.childFile(frameworkBinaryName);
|
.childFile(frameworkBinaryName);
|
||||||
fsUtils.copyDirectorySync(fatFramework, simulatorFlutterFrameworkDirectory);
|
globals.fsUtils.copyDirectorySync(fatFramework, simulatorFlutterFrameworkDirectory);
|
||||||
|
|
||||||
lipoCommand = <String>[
|
lipoCommand = <String>[
|
||||||
'xcrun',
|
'xcrun',
|
||||||
|
|
|
@ -659,7 +659,7 @@ To edit platform code in an IDE see https://flutter.dev/developing-packages/#edi
|
||||||
|
|
||||||
int _injectGradleWrapper(FlutterProject project) {
|
int _injectGradleWrapper(FlutterProject project) {
|
||||||
int filesCreated = 0;
|
int filesCreated = 0;
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
globals.cache.getArtifactDirectory('gradle_wrapper'),
|
globals.cache.getArtifactDirectory('gradle_wrapper'),
|
||||||
project.android.hostAppGradleRoot,
|
project.android.hostAppGradleRoot,
|
||||||
onFileCopied: (File sourceFile, File destinationFile) {
|
onFileCopied: (File sourceFile, File destinationFile) {
|
||||||
|
|
|
@ -109,7 +109,7 @@ class ScreenshotCommand extends FlutterCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> runScreenshot(File outputFile) async {
|
Future<void> runScreenshot(File outputFile) async {
|
||||||
outputFile ??= fsUtils.getUniqueFile(
|
outputFile ??= globals.fsUtils.getUniqueFile(
|
||||||
globals.fs.currentDirectory,
|
globals.fs.currentDirectory,
|
||||||
'flutter',
|
'flutter',
|
||||||
'png',
|
'png',
|
||||||
|
@ -124,7 +124,7 @@ class ScreenshotCommand extends FlutterCommand {
|
||||||
|
|
||||||
Future<void> runSkia(File outputFile) async {
|
Future<void> runSkia(File outputFile) async {
|
||||||
final Map<String, dynamic> skp = await _invokeVmServiceRpc('_flutter.screenshotSkp');
|
final Map<String, dynamic> skp = await _invokeVmServiceRpc('_flutter.screenshotSkp');
|
||||||
outputFile ??= fsUtils.getUniqueFile(
|
outputFile ??= globals.fsUtils.getUniqueFile(
|
||||||
globals.fs.currentDirectory,
|
globals.fs.currentDirectory,
|
||||||
'flutter',
|
'flutter',
|
||||||
'skp',
|
'skp',
|
||||||
|
@ -138,7 +138,7 @@ class ScreenshotCommand extends FlutterCommand {
|
||||||
|
|
||||||
Future<void> runRasterizer(File outputFile) async {
|
Future<void> runRasterizer(File outputFile) async {
|
||||||
final Map<String, dynamic> response = await _invokeVmServiceRpc('_flutter.screenshot');
|
final Map<String, dynamic> response = await _invokeVmServiceRpc('_flutter.screenshot');
|
||||||
outputFile ??= fsUtils.getUniqueFile(
|
outputFile ??= globals.fsUtils.getUniqueFile(
|
||||||
globals.fs.currentDirectory,
|
globals.fs.currentDirectory,
|
||||||
'flutter',
|
'flutter',
|
||||||
'png',
|
'png',
|
||||||
|
|
|
@ -189,7 +189,7 @@ class ArtifactUnpacker {
|
||||||
final String sourcePath = globals.fs.path.join(sourceDirectory, entityName);
|
final String sourcePath = globals.fs.path.join(sourceDirectory, entityName);
|
||||||
final String targetPath = globals.fs.path.join(targetDirectory, entityName);
|
final String targetPath = globals.fs.path.join(targetDirectory, entityName);
|
||||||
if (entityName.endsWith('/')) {
|
if (entityName.endsWith('/')) {
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
globals.fs.directory(sourcePath),
|
globals.fs.directory(sourcePath),
|
||||||
globals.fs.directory(targetPath),
|
globals.fs.directory(targetPath),
|
||||||
);
|
);
|
||||||
|
|
|
@ -87,7 +87,13 @@ Future<T> runInContext<T>(
|
||||||
ChromeLauncher: () => const ChromeLauncher(),
|
ChromeLauncher: () => const ChromeLauncher(),
|
||||||
CocoaPods: () => CocoaPods(),
|
CocoaPods: () => CocoaPods(),
|
||||||
CocoaPodsValidator: () => const CocoaPodsValidator(),
|
CocoaPodsValidator: () => const CocoaPodsValidator(),
|
||||||
Config: () => Config(),
|
Config: () => Config(
|
||||||
|
file: globals.fs.file(globals.fs.path.join(
|
||||||
|
globals.fsUtils.userHomePath,
|
||||||
|
Config.kFlutterSettings,
|
||||||
|
)),
|
||||||
|
logger: globals.logger,
|
||||||
|
),
|
||||||
DevFSConfig: () => DevFSConfig(),
|
DevFSConfig: () => DevFSConfig(),
|
||||||
DeviceManager: () => DeviceManager(),
|
DeviceManager: () => DeviceManager(),
|
||||||
Doctor: () => const Doctor(),
|
Doctor: () => const Doctor(),
|
||||||
|
|
|
@ -35,6 +35,12 @@ FileSystem get fs => ErrorHandlingFileSystem(
|
||||||
context.get<FileSystem>() ?? _kLocalFs,
|
context.get<FileSystem>() ?? _kLocalFs,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
final FileSystemUtils _defaultFileSystemUtils = FileSystemUtils(
|
||||||
|
fileSystem: fs,
|
||||||
|
platform: platform,
|
||||||
|
);
|
||||||
|
|
||||||
|
FileSystemUtils get fsUtils => context.get<FileSystemUtils>() ?? _defaultFileSystemUtils;
|
||||||
|
|
||||||
const ProcessManager _kLocalProcessManager = LocalProcessManager();
|
const ProcessManager _kLocalProcessManager = LocalProcessManager();
|
||||||
|
|
||||||
|
|
|
@ -547,7 +547,7 @@ Future<XcodeBuildResult> buildXcodeProject({
|
||||||
// (for example, kernel binary files produced from previous run).
|
// (for example, kernel binary files produced from previous run).
|
||||||
globals.fs.directory(outputDir).deleteSync(recursive: true);
|
globals.fs.directory(outputDir).deleteSync(recursive: true);
|
||||||
}
|
}
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
globals.fs.directory(expectedOutputDirectory),
|
globals.fs.directory(expectedOutputDirectory),
|
||||||
globals.fs.directory(outputDir),
|
globals.fs.directory(outputDir),
|
||||||
);
|
);
|
||||||
|
|
|
@ -25,10 +25,13 @@ abstract class PersistentToolState {
|
||||||
|
|
||||||
class _DefaultPersistentToolState implements PersistentToolState {
|
class _DefaultPersistentToolState implements PersistentToolState {
|
||||||
_DefaultPersistentToolState([File configFile]) :
|
_DefaultPersistentToolState([File configFile]) :
|
||||||
_config = Config(configFile ?? globals.fs.file(globals.fs.path.join(
|
_config = Config(
|
||||||
fsUtils.userHomePath,
|
file: configFile ?? globals.fs.file(globals.fs.path.join(
|
||||||
_kFileName,
|
globals.fsUtils.userHomePath,
|
||||||
)));
|
_kFileName,
|
||||||
|
)),
|
||||||
|
logger: globals.logger,
|
||||||
|
);
|
||||||
|
|
||||||
static const String _kFileName = '.flutter_tool_state';
|
static const String _kFileName = '.flutter_tool_state';
|
||||||
static const String _kRedisplayWelcomeMessage = 'redisplay-welcome-message';
|
static const String _kRedisplayWelcomeMessage = 'redisplay-welcome-message';
|
||||||
|
|
|
@ -329,7 +329,7 @@ List<Plugin> findPlugins(FlutterProject project) {
|
||||||
for (final Plugin plugin in platformPlugins) {
|
for (final Plugin plugin in platformPlugins) {
|
||||||
list.add(<String, dynamic>{
|
list.add(<String, dynamic>{
|
||||||
'name': plugin.name,
|
'name': plugin.name,
|
||||||
'path': fsUtils.escapePath(plugin.path),
|
'path': globals.fsUtils.escapePath(plugin.path),
|
||||||
'dependencies': <String>[...plugin.dependencies.where(pluginNames.contains)],
|
'dependencies': <String>[...plugin.dependencies.where(pluginNames.contains)],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -468,7 +468,7 @@ bool _writeFlutterPluginsListLegacy(FlutterProject project, List<Plugin> plugins
|
||||||
final StringBuffer flutterPluginsBuffer = StringBuffer('# $info\n');
|
final StringBuffer flutterPluginsBuffer = StringBuffer('# $info\n');
|
||||||
|
|
||||||
for (final Plugin plugin in plugins) {
|
for (final Plugin plugin in plugins) {
|
||||||
flutterPluginsBuffer.write('${plugin.name}=${fsUtils.escapePath(plugin.path)}\n');
|
flutterPluginsBuffer.write('${plugin.name}=${globals.fsUtils.escapePath(plugin.path)}\n');
|
||||||
}
|
}
|
||||||
final String oldPluginFileContent = _readFileContent(pluginsFile);
|
final String oldPluginFileContent = _readFileContent(pluginsFile);
|
||||||
final String pluginFileContent = flutterPluginsBuffer.toString();
|
final String pluginFileContent = flutterPluginsBuffer.toString();
|
||||||
|
|
|
@ -481,7 +481,7 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject {
|
||||||
if (!isModule) {
|
if (!isModule) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final bool pubspecChanged = fsUtils.isOlderThanReference(
|
final bool pubspecChanged = globals.fsUtils.isOlderThanReference(
|
||||||
entity: ephemeralDirectory,
|
entity: ephemeralDirectory,
|
||||||
referenceFile: parent.pubspecFile,
|
referenceFile: parent.pubspecFile,
|
||||||
);
|
);
|
||||||
|
@ -528,7 +528,7 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject {
|
||||||
.childDirectory('Flutter')
|
.childDirectory('Flutter')
|
||||||
.childDirectory('engine');
|
.childDirectory('engine');
|
||||||
final File podspec = framework.parent.childFile('Flutter.podspec');
|
final File podspec = framework.parent.childFile('Flutter.podspec');
|
||||||
fsUtils.copyDirectorySync(
|
globals.fsUtils.copyDirectorySync(
|
||||||
framework,
|
framework,
|
||||||
engineDest.childDirectory('Flutter.framework'),
|
engineDest.childDirectory('Flutter.framework'),
|
||||||
);
|
);
|
||||||
|
@ -689,7 +689,7 @@ class AndroidProject extends FlutterProjectPlatform {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _shouldRegenerateFromTemplate() {
|
bool _shouldRegenerateFromTemplate() {
|
||||||
return fsUtils.isOlderThanReference(
|
return globals.fsUtils.isOlderThanReference(
|
||||||
entity: ephemeralDirectory,
|
entity: ephemeralDirectory,
|
||||||
referenceFile: parent.pubspecFile,
|
referenceFile: parent.pubspecFile,
|
||||||
) || globals.cache.isOlderThanToolsStamp(ephemeralDirectory);
|
) || globals.cache.isOlderThanToolsStamp(ephemeralDirectory);
|
||||||
|
|
|
@ -406,7 +406,7 @@ class FlutterDevice {
|
||||||
final bool prebuiltMode = hotRunner.applicationBinary != null;
|
final bool prebuiltMode = hotRunner.applicationBinary != null;
|
||||||
final String modeName = hotRunner.debuggingOptions.buildInfo.friendlyModeName;
|
final String modeName = hotRunner.debuggingOptions.buildInfo.friendlyModeName;
|
||||||
globals.printStatus(
|
globals.printStatus(
|
||||||
'Launching ${fsUtils.getDisplayPath(hotRunner.mainPath)} '
|
'Launching ${globals.fsUtils.getDisplayPath(hotRunner.mainPath)} '
|
||||||
'on ${device.name} in $modeName mode...',
|
'on ${device.name} in $modeName mode...',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -481,7 +481,7 @@ class FlutterDevice {
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
globals.printStatus(
|
globals.printStatus(
|
||||||
'Launching ${fsUtils.getDisplayPath(coldRunner.mainPath)} '
|
'Launching ${globals.fsUtils.getDisplayPath(coldRunner.mainPath)} '
|
||||||
'on ${device.name} in $modeName mode...',
|
'on ${device.name} in $modeName mode...',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -862,7 +862,7 @@ abstract class ResidentRunner {
|
||||||
'Taking screenshot for ${device.device.name}...',
|
'Taking screenshot for ${device.device.name}...',
|
||||||
timeout: timeoutConfiguration.fastOperation,
|
timeout: timeoutConfiguration.fastOperation,
|
||||||
);
|
);
|
||||||
final File outputFile = fsUtils.getUniqueFile(
|
final File outputFile = globals.fsUtils.getUniqueFile(
|
||||||
globals.fs.currentDirectory,
|
globals.fs.currentDirectory,
|
||||||
'flutter',
|
'flutter',
|
||||||
'png',
|
'png',
|
||||||
|
|
|
@ -160,7 +160,7 @@ class TestCompiler {
|
||||||
// The idea is to keep the cache file up-to-date and include as
|
// The idea is to keep the cache file up-to-date and include as
|
||||||
// much as possible in an effort to re-use as many packages as
|
// much as possible in an effort to re-use as many packages as
|
||||||
// possible.
|
// possible.
|
||||||
fsUtils.ensureDirectoryExists(testFilePath);
|
globals.fsUtils.ensureDirectoryExists(testFilePath);
|
||||||
await outputFile.copy(testFilePath);
|
await outputFile.copy(testFilePath);
|
||||||
}
|
}
|
||||||
request.result.complete(kernelReadyToRun.path);
|
request.result.complete(kernelReadyToRun.path);
|
||||||
|
|
|
@ -7,10 +7,13 @@ import 'package:flutter_tools/src/base/config.dart';
|
||||||
import 'package:flutter_tools/src/base/file_system.dart';
|
import 'package:flutter_tools/src/base/file_system.dart';
|
||||||
import 'package:flutter_tools/src/base/logger.dart';
|
import 'package:flutter_tools/src/base/logger.dart';
|
||||||
import 'package:flutter_tools/src/base/terminal.dart';
|
import 'package:flutter_tools/src/base/terminal.dart';
|
||||||
|
import 'package:mockito/mockito.dart';
|
||||||
import 'package:platform/platform.dart';
|
import 'package:platform/platform.dart';
|
||||||
|
|
||||||
import '../src/common.dart';
|
import '../src/common.dart';
|
||||||
|
|
||||||
|
class MockLogger extends Mock implements Logger {}
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
Config config;
|
Config config;
|
||||||
MemoryFileSystem memoryFileSystem;
|
MemoryFileSystem memoryFileSystem;
|
||||||
|
@ -18,29 +21,29 @@ void main() {
|
||||||
setUp(() {
|
setUp(() {
|
||||||
memoryFileSystem = MemoryFileSystem();
|
memoryFileSystem = MemoryFileSystem();
|
||||||
final File file = memoryFileSystem.file('example');
|
final File file = memoryFileSystem.file('example');
|
||||||
config = Config(file);
|
config = Config(file: file, logger: MockLogger());
|
||||||
});
|
});
|
||||||
test('Config get set value', () async {
|
testWithoutContext('Config get set value', () async {
|
||||||
expect(config.getValue('foo'), null);
|
expect(config.getValue('foo'), null);
|
||||||
config.setValue('foo', 'bar');
|
config.setValue('foo', 'bar');
|
||||||
expect(config.getValue('foo'), 'bar');
|
expect(config.getValue('foo'), 'bar');
|
||||||
expect(config.keys, contains('foo'));
|
expect(config.keys, contains('foo'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Config get set bool value', () async {
|
testWithoutContext('Config get set bool value', () async {
|
||||||
expect(config.getValue('foo'), null);
|
expect(config.getValue('foo'), null);
|
||||||
config.setValue('foo', true);
|
config.setValue('foo', true);
|
||||||
expect(config.getValue('foo'), true);
|
expect(config.getValue('foo'), true);
|
||||||
expect(config.keys, contains('foo'));
|
expect(config.keys, contains('foo'));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Config containsKey', () async {
|
testWithoutContext('Config containsKey', () async {
|
||||||
expect(config.containsKey('foo'), false);
|
expect(config.containsKey('foo'), false);
|
||||||
config.setValue('foo', 'bar');
|
config.setValue('foo', 'bar');
|
||||||
expect(config.containsKey('foo'), true);
|
expect(config.containsKey('foo'), true);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Config removeValue', () async {
|
testWithoutContext('Config removeValue', () async {
|
||||||
expect(config.getValue('foo'), null);
|
expect(config.getValue('foo'), null);
|
||||||
config.setValue('foo', 'bar');
|
config.setValue('foo', 'bar');
|
||||||
expect(config.getValue('foo'), 'bar');
|
expect(config.getValue('foo'), 'bar');
|
||||||
|
@ -50,7 +53,7 @@ void main() {
|
||||||
expect(config.keys, isNot(contains('foo')));
|
expect(config.keys, isNot(contains('foo')));
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Config parse error', () {
|
testWithoutContext('Config parse error', () {
|
||||||
final BufferLogger bufferLogger = BufferLogger(
|
final BufferLogger bufferLogger = BufferLogger(
|
||||||
terminal: AnsiTerminal(
|
terminal: AnsiTerminal(
|
||||||
stdio: null,
|
stdio: null,
|
||||||
|
@ -60,7 +63,7 @@ void main() {
|
||||||
);
|
);
|
||||||
final File file = memoryFileSystem.file('example')
|
final File file = memoryFileSystem.file('example')
|
||||||
..writeAsStringSync('{"hello":"bar');
|
..writeAsStringSync('{"hello":"bar');
|
||||||
config = Config(file, bufferLogger);
|
config = Config(file: file, logger: bufferLogger);
|
||||||
|
|
||||||
expect(file.existsSync(), false);
|
expect(file.existsSync(), false);
|
||||||
expect(bufferLogger.errorText, contains('Failed to decode preferences'));
|
expect(bufferLogger.errorText, contains('Failed to decode preferences'));
|
||||||
|
|
|
@ -82,7 +82,7 @@ void testUsingContext(
|
||||||
final File settingsFile = globals.fs.file(
|
final File settingsFile = globals.fs.file(
|
||||||
globals.fs.path.join(configDir.path, '.flutter_settings')
|
globals.fs.path.join(configDir.path, '.flutter_settings')
|
||||||
);
|
);
|
||||||
return Config(settingsFile);
|
return Config(file: settingsFile, logger: globals.logger);
|
||||||
}
|
}
|
||||||
PersistentToolState buildPersistentToolState(FileSystem fs) {
|
PersistentToolState buildPersistentToolState(FileSystem fs) {
|
||||||
configDir ??= globals.fs.systemTempDirectory.createTempSync('flutter_config_dir_test.');
|
configDir ??= globals.fs.systemTempDirectory.createTempSync('flutter_config_dir_test.');
|
||||||
|
|
Loading…
Reference in a new issue