mirror of
https://github.com/flutter/flutter
synced 2024-10-13 03:32:55 +00:00
[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;
|
||||
if (upgrade) {
|
||||
temporaryFlutterSdk = createTemporaryFlutterSdk(
|
||||
globals.logger,
|
||||
globals.fs,
|
||||
globals.fs.directory(Cache.flutterRoot),
|
||||
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
|
||||
/// 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
|
||||
.childDirectory('packages')
|
||||
.listSync()
|
||||
|
@ -1445,6 +1452,12 @@ Directory createTemporaryFlutterSdk(FileSystem fileSystem, Directory realFlutter
|
|||
.childFile('pubspec.yaml')
|
||||
..createSync(recursive: true);
|
||||
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');
|
||||
|
||||
// Fill in SDK dependency constraint.
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
import 'package:file/memory.dart';
|
||||
import 'package:file_testing/file_testing.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 '../src/common.dart';
|
||||
|
@ -47,6 +48,17 @@ dev_dependencies:
|
|||
# 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 = '''
|
||||
name: flutter
|
||||
author: Flutter Authors <flutter-dev@googlegroups.com>
|
||||
|
@ -89,6 +101,15 @@ void main() {
|
|||
.childFile('pubspec.yaml')
|
||||
.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.
|
||||
final PubspecYaml flutterPubspec = PubspecYaml(flutter);
|
||||
|
||||
|
@ -101,7 +122,9 @@ void main() {
|
|||
ref: d00362e6bdd0f9b30bba337c358b9e4a6e4ca950
|
||||
''',
|
||||
);
|
||||
final BufferLogger bufferLogger = BufferLogger.test();
|
||||
final Directory result = createTemporaryFlutterSdk(
|
||||
bufferLogger,
|
||||
fileSystem,
|
||||
flutterSdk,
|
||||
<PubspecYaml>[flutterPubspec],
|
||||
|
@ -109,6 +132,12 @@ void main() {
|
|||
|
||||
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.
|
||||
expect(result.childFile('version'), exists);
|
||||
expect(result.childFile('version').readAsStringSync(), '1.2.3');
|
||||
|
|
Loading…
Reference in a new issue