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 '../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 {
|
|||||||
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';
|
|||||||
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() {
|
|||||||
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() {
|
|||||||
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() {
|
|||||||
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() {
|
|||||||
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() {
|
|||||||
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 {}
|
|||||||
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 {}
|
||||||
|
Loading…
Reference in New Issue
Block a user