mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Handle missing .packages file in the flutter tool for prebuilt artifacts (#41697)
This commit is contained in:
parent
415840485c
commit
aeede20785
@ -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 {}
|
||||
|
Loading…
Reference in New Issue
Block a user