Unverified Commit aeede207 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Handle missing .packages file in the flutter tool for prebuilt artifacts (#41697)

parent 41584048
......@@ -29,6 +29,7 @@ import '../build_info.dart';
import '../bundle.dart';
import '../cache.dart';
import '../dart/package_map.dart';
import '../dart/pub.dart';
import '../device.dart';
import '../globals.dart';
import '../platform_plugins.dart';
......@@ -176,6 +177,18 @@ class WebFs {
if (!flutterProject.dartTool.existsSync()) {
flutterProject.dartTool.createSync(recursive: true);
}
// Workaround for https://github.com/flutter/flutter/issues/41681.
final String toolPath = fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools');
if (!fs.isFileSync(fs.path.join(toolPath, '.packages'))) {
await pubGet(
context: PubContext.pubGet,
directory: toolPath,
offline: true,
skipPubspecYamlCheck: true,
checkLastModified: false,
);
}
final Completer<bool> firstBuildCompleter = Completer<bool>();
// Initialize the asset bundle.
......
......@@ -8,7 +8,9 @@ import 'package:built_collection/built_collection.dart';
import 'package:dwds/dwds.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/os.dart';
import 'package:flutter_tools/src/base/process.dart';
import 'package:flutter_tools/src/build_info.dart';
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/project.dart';
import 'package:flutter_tools/src/web/chrome.dart';
import 'package:flutter_tools/src/build_runner/web_fs.dart';
......@@ -27,6 +29,7 @@ void main() {
MockHttpMultiServer mockHttpMultiServer;
MockBuildDaemonClient mockBuildDaemonClient;
MockOperatingSystemUtils mockOperatingSystemUtils;
MockProcessUtils mockProcessUtils;
bool lastInitializePlatform;
dynamic lastAddress;
int lastPort;
......@@ -41,6 +44,7 @@ void main() {
mockBuildDaemonClient = MockBuildDaemonClient();
mockOperatingSystemUtils = MockOperatingSystemUtils();
mockDwds = MockDwds();
mockProcessUtils = MockProcessUtils();
when(mockBuildDaemonCreator.startBuildDaemon(any, release: anyNamed('release'), initializePlatform: anyNamed('initializePlatform')))
.thenAnswer((Invocation invocation) async {
lastInitializePlatform = invocation.namedArguments[#initializePlatform];
......@@ -49,6 +53,17 @@ void main() {
when(mockOperatingSystemUtils.findFreePort()).thenAnswer((Invocation _) async {
return 1234;
});
when(mockProcessUtils.stream(
any,
workingDirectory: anyNamed('workingDirectory'),
mapFunction: anyNamed('mapFunction'),
environment: anyNamed('environment'),
)).thenAnswer((Invocation invocation) async {
final String workingDirectory = invocation.namedArguments[#workingDirectory];
fs.file(fs.path.join(workingDirectory, '.packages')).createSync(recursive: true);
fs.file(fs.path.join(workingDirectory, 'pubspec.yaml')).createSync();
return 0;
});
when(mockBuildDaemonClient.buildResults).thenAnswer((Invocation _) {
return Stream<BuildResults>.fromFuture(Future<BuildResults>.value(
BuildResults((BuildResultsBuilder builder) {
......@@ -74,6 +89,7 @@ void main() {
OperatingSystemUtils: () => mockOperatingSystemUtils,
BuildDaemonCreator: () => mockBuildDaemonCreator,
ChromeLauncher: () => mockChromeLauncher,
ProcessUtils: () => mockProcessUtils,
HttpMultiServerFactory: () => (dynamic address, int port) async {
lastAddress = address;
lastPort = port;
......@@ -109,6 +125,12 @@ void main() {
hostname: null,
port: null,
);
// Since the .packages file is missing in the memory filesystem, this should
// be called.
verify(processUtils.stream(any,
workingDirectory: fs.path.join(Cache.flutterRoot, 'packages', 'flutter_tools'),
mapFunction: anyNamed('mapFunction'),
environment: anyNamed('environment'),)).called(1);
// The build daemon is told to build once.
verify(mockBuildDaemonClient.startBuild()).called(1);
......@@ -189,4 +211,4 @@ class MockDwds extends Mock implements Dwds {}
class MockHttpMultiServer extends Mock implements HttpMultiServer {}
class MockChromeLauncher extends Mock implements ChromeLauncher {}
class MockOperatingSystemUtils extends Mock implements OperatingSystemUtils {}
class MockProcessUtils extends Mock implements ProcessUtils {}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment