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'; ...@@ -29,6 +29,7 @@ import '../build_info.dart';
import '../bundle.dart'; import '../bundle.dart';
import '../cache.dart'; import '../cache.dart';
import '../dart/package_map.dart'; import '../dart/package_map.dart';
import '../dart/pub.dart';
import '../device.dart'; import '../device.dart';
import '../globals.dart'; import '../globals.dart';
import '../platform_plugins.dart'; import '../platform_plugins.dart';
...@@ -176,6 +177,18 @@ class WebFs { ...@@ -176,6 +177,18 @@ class WebFs {
if (!flutterProject.dartTool.existsSync()) { if (!flutterProject.dartTool.existsSync()) {
flutterProject.dartTool.createSync(recursive: true); 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>(); final Completer<bool> firstBuildCompleter = Completer<bool>();
// Initialize the asset bundle. // Initialize the asset bundle.
......
...@@ -8,7 +8,9 @@ import 'package:built_collection/built_collection.dart'; ...@@ -8,7 +8,9 @@ import 'package:built_collection/built_collection.dart';
import 'package:dwds/dwds.dart'; import 'package:dwds/dwds.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/os.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/build_info.dart';
import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/project.dart';
import 'package:flutter_tools/src/web/chrome.dart'; import 'package:flutter_tools/src/web/chrome.dart';
import 'package:flutter_tools/src/build_runner/web_fs.dart'; import 'package:flutter_tools/src/build_runner/web_fs.dart';
...@@ -27,6 +29,7 @@ void main() { ...@@ -27,6 +29,7 @@ void main() {
MockHttpMultiServer mockHttpMultiServer; MockHttpMultiServer mockHttpMultiServer;
MockBuildDaemonClient mockBuildDaemonClient; MockBuildDaemonClient mockBuildDaemonClient;
MockOperatingSystemUtils mockOperatingSystemUtils; MockOperatingSystemUtils mockOperatingSystemUtils;
MockProcessUtils mockProcessUtils;
bool lastInitializePlatform; bool lastInitializePlatform;
dynamic lastAddress; dynamic lastAddress;
int lastPort; int lastPort;
...@@ -41,6 +44,7 @@ void main() { ...@@ -41,6 +44,7 @@ void main() {
mockBuildDaemonClient = MockBuildDaemonClient(); mockBuildDaemonClient = MockBuildDaemonClient();
mockOperatingSystemUtils = MockOperatingSystemUtils(); mockOperatingSystemUtils = MockOperatingSystemUtils();
mockDwds = MockDwds(); mockDwds = MockDwds();
mockProcessUtils = MockProcessUtils();
when(mockBuildDaemonCreator.startBuildDaemon(any, release: anyNamed('release'), initializePlatform: anyNamed('initializePlatform'))) when(mockBuildDaemonCreator.startBuildDaemon(any, release: anyNamed('release'), initializePlatform: anyNamed('initializePlatform')))
.thenAnswer((Invocation invocation) async { .thenAnswer((Invocation invocation) async {
lastInitializePlatform = invocation.namedArguments[#initializePlatform]; lastInitializePlatform = invocation.namedArguments[#initializePlatform];
...@@ -49,6 +53,17 @@ void main() { ...@@ -49,6 +53,17 @@ void main() {
when(mockOperatingSystemUtils.findFreePort()).thenAnswer((Invocation _) async { when(mockOperatingSystemUtils.findFreePort()).thenAnswer((Invocation _) async {
return 1234; 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 _) { when(mockBuildDaemonClient.buildResults).thenAnswer((Invocation _) {
return Stream<BuildResults>.fromFuture(Future<BuildResults>.value( return Stream<BuildResults>.fromFuture(Future<BuildResults>.value(
BuildResults((BuildResultsBuilder builder) { BuildResults((BuildResultsBuilder builder) {
...@@ -74,6 +89,7 @@ void main() { ...@@ -74,6 +89,7 @@ void main() {
OperatingSystemUtils: () => mockOperatingSystemUtils, OperatingSystemUtils: () => mockOperatingSystemUtils,
BuildDaemonCreator: () => mockBuildDaemonCreator, BuildDaemonCreator: () => mockBuildDaemonCreator,
ChromeLauncher: () => mockChromeLauncher, ChromeLauncher: () => mockChromeLauncher,
ProcessUtils: () => mockProcessUtils,
HttpMultiServerFactory: () => (dynamic address, int port) async { HttpMultiServerFactory: () => (dynamic address, int port) async {
lastAddress = address; lastAddress = address;
lastPort = port; lastPort = port;
...@@ -109,6 +125,12 @@ void main() { ...@@ -109,6 +125,12 @@ void main() {
hostname: null, hostname: null,
port: 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. // The build daemon is told to build once.
verify(mockBuildDaemonClient.startBuild()).called(1); verify(mockBuildDaemonClient.startBuild()).called(1);
...@@ -189,4 +211,4 @@ class MockDwds extends Mock implements Dwds {} ...@@ -189,4 +211,4 @@ class MockDwds extends Mock implements Dwds {}
class MockHttpMultiServer extends Mock implements HttpMultiServer {} class MockHttpMultiServer extends Mock implements HttpMultiServer {}
class MockChromeLauncher extends Mock implements ChromeLauncher {} class MockChromeLauncher extends Mock implements ChromeLauncher {}
class MockOperatingSystemUtils extends Mock implements OperatingSystemUtils {} 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