diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart index ed42baea29..12941f733a 100644 --- a/packages/flutter_tools/lib/src/asset.dart +++ b/packages/flutter_tools/lib/src/asset.dart @@ -11,11 +11,11 @@ import 'base/file_system.dart'; import 'base/logger.dart'; import 'base/platform.dart'; import 'build_info.dart'; -import 'cache.dart'; import 'convert.dart'; import 'dart/package_map.dart'; import 'devfs.dart'; import 'flutter_manifest.dart'; +import 'globals.dart' as globals; import 'license_collector.dart'; import 'project.dart'; @@ -504,7 +504,7 @@ class ManifestAssetBundle implements AssetBundle { } final Uri entryUri = _fileSystem.path.toUri(asset); result.add(_Asset( - baseDir: _fileSystem.path.join(Cache.flutterRoot!, 'bin', 'cache', 'artifacts', 'material_fonts'), + baseDir: _fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter', 'artifacts', 'material_fonts'), relativeUri: Uri(path: entryUri.pathSegments.last), entryUri: entryUri, package: null, diff --git a/packages/flutter_tools/lib/src/cache.dart b/packages/flutter_tools/lib/src/cache.dart index defc86cc20..7fdf14d112 100644 --- a/packages/flutter_tools/lib/src/cache.dart +++ b/packages/flutter_tools/lib/src/cache.dart @@ -22,6 +22,7 @@ import 'base/user_messages.dart'; import 'build_info.dart'; import 'convert.dart'; import 'features.dart'; +import 'globals.dart' as globals; const String kFlutterRootEnvironmentVariableName = 'FLUTTER_ROOT'; // should point to //flutter/ (root of flutter/flutter repo) const String kFlutterEngineEnvironmentVariableName = 'FLUTTER_ENGINE'; // should point to //engine/src/ (root of flutter/engine repo) @@ -322,8 +323,13 @@ class Cache { return; } assert(_lock == null); + final Directory dir = _fileSystem.directory(_fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter')); + if (!dir.existsSync()) { + dir.createSync(recursive: true); + globals.os.chmod(dir, '755'); + } final File lockFile = - _fileSystem.file(_fileSystem.path.join(flutterRoot!, 'bin', 'cache', 'lockfile')); + _fileSystem.file(_fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter', 'lockfile')); try { _lock = lockFile.openSync(mode: FileMode.write); } on FileSystemException catch (e) { @@ -382,8 +388,7 @@ class Cache { String get devToolsVersion { if (_devToolsVersion == null) { - const String devToolsDirPath = 'dart-sdk/bin/resources/devtools'; - final Directory devToolsDir = getCacheDir(devToolsDirPath, shouldCreate: false); + final Directory devToolsDir = _fileSystem.directory(_fileSystem.path.join(flutterRoot!, 'bin/cache/dart-sdk/bin/resources/devtools')); if (!devToolsDir.existsSync()) { throw Exception('Could not find directory at ${devToolsDir.path}'); } @@ -536,7 +541,7 @@ class Cache { if (_rootOverride != null) { return _fileSystem.directory(_fileSystem.path.join(_rootOverride!.path, 'bin', 'cache')); } else { - return _fileSystem.directory(_fileSystem.path.join(flutterRoot!, 'bin', 'cache')); + return _fileSystem.directory(_fileSystem.path.join(globals.fsUtils.homeDirPath!, '.cache', 'flutter')); } } diff --git a/packages/flutter_tools/lib/src/artifacts.dart b/packages/flutter_tools/lib/src/artifacts.dart index 2aac9686e8..32c4b98b88 100644 --- a/packages/flutter_tools/lib/src/artifacts.dart +++ b/packages/flutter_tools/lib/src/artifacts.dart @@ -346,10 +346,10 @@ class CachedArtifacts implements Artifacts { ) { switch (artifact) { case HostArtifact.engineDartSdkPath: - final String path = _dartSdkPath(_cache); + final String path = _dartSdkPath(_fileSystem); return _fileSystem.directory(path); case HostArtifact.engineDartBinary: - final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', _hostArtifactToFileName(artifact, _platform.isWindows)); return _fileSystem.file(path); case HostArtifact.flutterWebSdk: final String path = _getFlutterWebSdkPath(); @@ -398,7 +398,7 @@ class CachedArtifacts implements Artifacts { case HostArtifact.dart2jsSnapshot: case HostArtifact.dartdevcSnapshot: case HostArtifact.kernelWorkerSnapshot: - final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); return _fileSystem.file(path); case HostArtifact.iosDeploy: final String artifactFileName = _hostArtifactToFileName(artifact, _platform.isWindows); @@ -461,11 +461,13 @@ class CachedArtifacts implements Artifacts { String _getAndroidArtifactPath(Artifact artifact, TargetPlatform platform, BuildMode mode) { final String engineDir = _getEngineArtifactsPath(platform, mode)!; switch (artifact) { + case Artifact.frontendServerSnapshotForEngineDartSdk: + assert(mode != BuildMode.debug, 'Artifact $artifact only available in non-debug mode.'); + return _fileSystem.path.join(engineDir, _artifactToFileName(artifact)); case Artifact.genSnapshot: assert(mode != BuildMode.debug, 'Artifact $artifact only available in non-debug mode.'); final String hostPlatform = getNameForHostPlatform(getCurrentHostPlatform()); return _fileSystem.path.join(engineDir, hostPlatform, _artifactToFileName(artifact)); - case Artifact.frontendServerSnapshotForEngineDartSdk: case Artifact.constFinder: case Artifact.flutterFramework: case Artifact.flutterMacOSFramework: @@ -497,13 +499,13 @@ class CachedArtifacts implements Artifacts { switch (artifact) { case Artifact.genSnapshot: case Artifact.flutterXcframework: + case Artifact.frontendServerSnapshotForEngineDartSdk: final String artifactFileName = _artifactToFileName(artifact)!; final String engineDir = _getEngineArtifactsPath(platform, mode)!; return _fileSystem.path.join(engineDir, artifactFileName); case Artifact.flutterFramework: final String engineDir = _getEngineArtifactsPath(platform, mode)!; return _getIosEngineArtifactPath(engineDir, environmentType, _fileSystem); - case Artifact.frontendServerSnapshotForEngineDartSdk: case Artifact.constFinder: case Artifact.flutterMacOSFramework: case Artifact.flutterMacOSPodspec: @@ -594,14 +596,10 @@ class CachedArtifacts implements Artifacts { // For script snapshots any gen_snapshot binary will do. Returning gen_snapshot for // android_arm in profile mode because it is available on all supported host platforms. return _getAndroidArtifactPath(artifact, TargetPlatform.android_arm, BuildMode.profile); - case Artifact.frontendServerSnapshotForEngineDartSdk: - return _fileSystem.path.join( - _dartSdkPath(_cache), 'bin', 'snapshots', - _artifactToFileName(artifact), - ); case Artifact.flutterTester: case Artifact.vmSnapshotData: case Artifact.isolateSnapshotData: + case Artifact.frontendServerSnapshotForEngineDartSdk: case Artifact.icuData: final String engineArtifactsPath = _cache.getArtifactDirectory('engine').path; final String platformDirName = _enginePlatformDirectoryName(platform); @@ -797,7 +795,7 @@ class CachedLocalEngineArtifacts implements LocalEngineArtifacts { final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); return _fileSystem.file(path); case HostArtifact.dartdevcSnapshot: - final String path = _fileSystem.path.join(_dartSdkPath(_cache), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); + final String path = _fileSystem.path.join(_dartSdkPath(_fileSystem), 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); return _fileSystem.file(path); case HostArtifact.kernelWorkerSnapshot: final String path = _fileSystem.path.join(_hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', _hostArtifactToFileName(artifact, _platform.isWindows)); @@ -922,9 +920,7 @@ class CachedLocalEngineArtifacts implements LocalEngineArtifacts { case Artifact.windowsUwpCppClientWrapper: return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); case Artifact.frontendServerSnapshotForEngineDartSdk: - return _fileSystem.path.join( - _hostEngineOutPath, 'dart-sdk', 'bin', 'snapshots', artifactFileName, - ); + return _fileSystem.path.join(_hostEngineOutPath, 'gen', artifactFileName); case Artifact.uwptool: return _fileSystem.path.join(_hostEngineOutPath, artifactFileName); } @@ -1034,8 +1030,8 @@ class OverrideArtifacts implements Artifacts { } /// Locate the Dart SDK. -String _dartSdkPath(Cache cache) { - return cache.getRoot().childDirectory('dart-sdk').path; +String _dartSdkPath(FileSystem fileSystem) { + return fileSystem.path.join(Cache.flutterRoot!, 'bin', 'cache', 'dart-sdk'); } class _TestArtifacts implements Artifacts { diff --git a/packages/flutter_tools/test/general.shard/artifacts_test.dart b/packages/flutter_tools/test/general.shard/artifacts_test.dart index d906511a15..adfdd4bb42 100644 --- a/packages/flutter_tools/test/general.shard/artifacts_test.dart +++ b/packages/flutter_tools/test/general.shard/artifacts_test.dart @@ -153,10 +153,6 @@ void main() { artifacts.getArtifactPath(Artifact.windowsUwpDesktopPath, platform: TargetPlatform.windows_uwp_x64, mode: BuildMode.release), fileSystem.path.join('root', 'bin', 'cache', 'artifacts', 'engine', 'windows-uwp-x64-release'), ); - expect( - artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk), - fileSystem.path.join('root', 'bin', 'cache', 'dart-sdk', 'bin', 'snapshots', 'frontend_server.dart.snapshot') - ); }); testWithoutContext('precompiled web artifact paths are correct', () { @@ -322,11 +318,6 @@ void main() { artifacts.getHostArtifact(HostArtifact.engineDartSdkPath).path, fileSystem.path.join('/out', 'host_debug_unopt', 'dart-sdk'), ); - expect( - artifacts.getArtifactPath(Artifact.frontendServerSnapshotForEngineDartSdk), - fileSystem.path.join('/out', 'host_debug_unopt', 'dart-sdk', 'bin', - 'snapshots', 'frontend_server.dart.snapshot') - ); }); testWithoutContext('getEngineType', () {