[flutter_tool] Fix crash in update-packages (#71950)
This commit is contained in:
parent
a56e616c0b
commit
52ea6c2a31
@ -320,6 +320,7 @@ class UpdatePackagesCommand extends FlutterCommand {
|
|||||||
Directory temporaryFlutterSdk;
|
Directory temporaryFlutterSdk;
|
||||||
if (upgrade) {
|
if (upgrade) {
|
||||||
temporaryFlutterSdk = createTemporaryFlutterSdk(
|
temporaryFlutterSdk = createTemporaryFlutterSdk(
|
||||||
|
globals.logger,
|
||||||
globals.fs,
|
globals.fs,
|
||||||
globals.fs.directory(Cache.flutterRoot),
|
globals.fs.directory(Cache.flutterRoot),
|
||||||
pubspecs,
|
pubspecs,
|
||||||
@ -1417,7 +1418,13 @@ String _computeChecksum(Iterable<String> names, String getVersion(String name))
|
|||||||
|
|
||||||
/// Create a synthetic Flutter SDK so that pub version solving does not get
|
/// Create a synthetic Flutter SDK so that pub version solving does not get
|
||||||
/// stuck on the old versions.
|
/// stuck on the old versions.
|
||||||
Directory createTemporaryFlutterSdk(FileSystem fileSystem, Directory realFlutter, List<PubspecYaml> pubspecs) {
|
@visibleForTesting
|
||||||
|
Directory createTemporaryFlutterSdk(
|
||||||
|
Logger logger,
|
||||||
|
FileSystem fileSystem,
|
||||||
|
Directory realFlutter,
|
||||||
|
List<PubspecYaml> pubspecs,
|
||||||
|
) {
|
||||||
final Set<String> currentPackages = realFlutter
|
final Set<String> currentPackages = realFlutter
|
||||||
.childDirectory('packages')
|
.childDirectory('packages')
|
||||||
.listSync()
|
.listSync()
|
||||||
@ -1445,6 +1452,12 @@ Directory createTemporaryFlutterSdk(FileSystem fileSystem, Directory realFlutter
|
|||||||
.childFile('pubspec.yaml')
|
.childFile('pubspec.yaml')
|
||||||
..createSync(recursive: true);
|
..createSync(recursive: true);
|
||||||
final PubspecYaml pubspecYaml = pubspecsByName[flutterPackage];
|
final PubspecYaml pubspecYaml = pubspecsByName[flutterPackage];
|
||||||
|
if (pubspecYaml == null) {
|
||||||
|
logger.printError(
|
||||||
|
"Unexpected package '$flutterPackage' found in packages directory",
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
final StringBuffer output = StringBuffer('name: $flutterPackage\n');
|
final StringBuffer output = StringBuffer('name: $flutterPackage\n');
|
||||||
|
|
||||||
// Fill in SDK dependency constraint.
|
// Fill in SDK dependency constraint.
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
import 'package:file/memory.dart';
|
import 'package:file/memory.dart';
|
||||||
import 'package:file_testing/file_testing.dart';
|
import 'package:file_testing/file_testing.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/logger.dart';
|
||||||
import 'package:flutter_tools/src/commands/update_packages.dart';
|
import 'package:flutter_tools/src/commands/update_packages.dart';
|
||||||
|
|
||||||
import '../src/common.dart';
|
import '../src/common.dart';
|
||||||
@ -47,6 +48,17 @@ dev_dependencies:
|
|||||||
# PUBSPEC CHECKSUM: 1437
|
# PUBSPEC CHECKSUM: 1437
|
||||||
''';
|
''';
|
||||||
|
|
||||||
|
const String kExtraPubspecYaml = r'''
|
||||||
|
name: nodeps
|
||||||
|
author: Flutter Authors <flutter-dev@googlegroups.com>
|
||||||
|
description: A dummy pubspec with no dependencies
|
||||||
|
homepage: http://flutter.dev
|
||||||
|
|
||||||
|
environment:
|
||||||
|
# The pub client defaults to an <2.0.0 sdk constraint which we need to explicitly overwrite.
|
||||||
|
sdk: ">=2.2.2 <3.0.0"
|
||||||
|
''';
|
||||||
|
|
||||||
const String kInvalidGitPubspec = '''
|
const String kInvalidGitPubspec = '''
|
||||||
name: flutter
|
name: flutter
|
||||||
author: Flutter Authors <flutter-dev@googlegroups.com>
|
author: Flutter Authors <flutter-dev@googlegroups.com>
|
||||||
@ -89,6 +101,15 @@ void main() {
|
|||||||
.childFile('pubspec.yaml')
|
.childFile('pubspec.yaml')
|
||||||
.writeAsStringSync(kFlutterPubspecYaml);
|
.writeAsStringSync(kFlutterPubspecYaml);
|
||||||
|
|
||||||
|
// A stray extra package should not cause a crash.
|
||||||
|
final Directory extra = flutterSdk
|
||||||
|
.childDirectory('packages')
|
||||||
|
.childDirectory('extra')
|
||||||
|
..createSync(recursive: true);
|
||||||
|
extra
|
||||||
|
.childFile('pubspec.yaml')
|
||||||
|
.writeAsStringSync(kExtraPubspecYaml);
|
||||||
|
|
||||||
// Create already parsed pubspecs.
|
// Create already parsed pubspecs.
|
||||||
final PubspecYaml flutterPubspec = PubspecYaml(flutter);
|
final PubspecYaml flutterPubspec = PubspecYaml(flutter);
|
||||||
|
|
||||||
@ -101,7 +122,9 @@ void main() {
|
|||||||
ref: d00362e6bdd0f9b30bba337c358b9e4a6e4ca950
|
ref: d00362e6bdd0f9b30bba337c358b9e4a6e4ca950
|
||||||
''',
|
''',
|
||||||
);
|
);
|
||||||
|
final BufferLogger bufferLogger = BufferLogger.test();
|
||||||
final Directory result = createTemporaryFlutterSdk(
|
final Directory result = createTemporaryFlutterSdk(
|
||||||
|
bufferLogger,
|
||||||
fileSystem,
|
fileSystem,
|
||||||
flutterSdk,
|
flutterSdk,
|
||||||
<PubspecYaml>[flutterPubspec],
|
<PubspecYaml>[flutterPubspec],
|
||||||
@ -109,6 +132,12 @@ void main() {
|
|||||||
|
|
||||||
expect(result, exists);
|
expect(result, exists);
|
||||||
|
|
||||||
|
// We get a warning about the unexpected package.
|
||||||
|
expect(
|
||||||
|
bufferLogger.errorText,
|
||||||
|
contains("Unexpected package 'extra' found in packages directory"),
|
||||||
|
);
|
||||||
|
|
||||||
// The version file exists.
|
// The version file exists.
|
||||||
expect(result.childFile('version'), exists);
|
expect(result.childFile('version'), exists);
|
||||||
expect(result.childFile('version').readAsStringSync(), '1.2.3');
|
expect(result.childFile('version').readAsStringSync(), '1.2.3');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user