Skip to content

Commit dce232e

Browse files
authored
Read flutter version from new location (#4113)
1 parent 23edb45 commit dce232e

13 files changed

+56
-25
lines changed

lib/src/sdk/flutter.dart

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'dart:convert';
56
import 'dart:io';
67

78
import 'package:path/path.dart' as p;
89
import 'package:pub_semver/pub_semver.dart';
910

1011
import '../io.dart';
12+
import '../log.dart';
1113
import '../sdk.dart';
1214

1315
class FlutterSdk extends Sdk {
@@ -54,15 +56,34 @@ class FlutterSdk extends Sdk {
5456
return null;
5557
}();
5658
static final Version? _version = () {
57-
if (_rootDirectory == null) return null;
59+
final rootDirectory = _rootDirectory;
60+
if (rootDirectory == null) return null;
61+
if (!dirExists(rootDirectory)) {
62+
// $FLUTTER_ROOT has been set, but doesn't exist.
63+
return null;
64+
}
65+
final flutterVersionPath =
66+
p.join(_rootDirectory!, 'bin', 'cache', 'flutter.version.json');
5867

5968
try {
60-
return Version.parse(
61-
readTextFile(p.join(_rootDirectory!, 'version')).trim(),
69+
final versionJson = jsonDecode(
70+
readTextFile(flutterVersionPath),
71+
);
72+
if (versionJson is! Map) {
73+
return null;
74+
}
75+
final flutterVersion = versionJson['flutterVersion'];
76+
if (flutterVersion is! String) {
77+
throw FormatException('flutter-version is not a string');
78+
}
79+
return Version.parse(flutterVersion);
80+
} on IOException catch (e) {
81+
warning(
82+
'Could not open flutter version file at `$flutterVersionPath`: $e\n',
6283
);
63-
} on IOException {
64-
return null; // I guess the file doesn't exist
65-
} on FormatException {
84+
return null;
85+
} on FormatException catch (e) {
86+
fine('Bad flutter version file at `$flutterVersionPath` $e');
6687
return null; // I guess the file has the wrong format
6788
}
6889
}();

test/add/sdk/sdk_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ void main() {
2727
[d.libDir('baz', 'foo 0.0.1'), d.libPubspec('baz', '0.0.1')],
2828
),
2929
]),
30-
d.file('version', '1.2.3'),
30+
d.flutterVersion('1.2.3'),
3131
]).create();
3232
});
3333

test/deps_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ void main() {
271271
test('with the Flutter SDK, if applicable', () async {
272272
await pubGet();
273273

274-
await d.dir('flutter', [d.file('version', '4.3.2+1')]).create();
274+
await d.dir('flutter', [d.flutterVersion('4.3.2+1')]).create();
275275
await runPub(
276276
args: ['deps'],
277277
output: contains('Flutter SDK 4.3.2+1'),

test/descriptor.dart

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,3 +364,12 @@ PackageConfigEntry packageConfigEntry({
364364
languageVersion != null ? LanguageVersion.parse(languageVersion) : null,
365365
);
366366
}
367+
368+
Descriptor flutterVersion(String version) {
369+
return dir('bin', [
370+
dir(
371+
'cache',
372+
[file('flutter.version.json', '{"flutterVersion":"$version"}')],
373+
),
374+
]);
375+
}

test/embedding/ensure_pubspec_resolved.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ void testEnsurePubspecResolved() {
290290
},
291291
);
292292

293-
await d.dir('flutter', [d.file('version', '1.2.3')]).create();
293+
await d.dir('flutter', [d.flutterVersion('1.2.3')]).create();
294294

295295
await d.dir(appPath, [
296296
d.appPubspec(dependencies: {'foo': '^3.0.0'}),
@@ -300,7 +300,7 @@ void testEnsurePubspecResolved() {
300300
environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},
301301
);
302302

303-
await d.dir('flutter', [d.file('version', '0.9.0')]).create();
303+
await d.dir('flutter', [d.flutterVersion('0.9.0')]).create();
304304

305305
server.serve(
306306
'foo',
@@ -485,7 +485,7 @@ void testEnsurePubspecResolved() {
485485
},
486486
);
487487

488-
await d.dir('flutter', [d.file('version', '1.2.3')]).create();
488+
await d.dir('flutter', [d.flutterVersion('1.2.3')]).create();
489489

490490
await d.dir(appPath, [
491491
d.appPubspec(dependencies: {'foo': '3.0.0'}),
@@ -495,7 +495,7 @@ void testEnsurePubspecResolved() {
495495
environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},
496496
);
497497

498-
await d.dir('flutter', [d.file('version', '2.4.6')]).create();
498+
await d.dir('flutter', [d.flutterVersion('2.4.6')]).create();
499499

500500
// Run pub manually here because otherwise we don't have access to
501501
// d.sandbox.

test/get/flutter_constraint_upper_bound_ignored_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import '../test_pub.dart';
1111
void main() {
1212
test('pub get succeeds despite of "invalid" flutter upper bound', () async {
1313
final fakeFlutterRoot =
14-
d.dir('fake_flutter_root', [d.file('version', '1.23.0')]);
14+
d.dir('fake_flutter_root', [d.flutterVersion('1.23.0')]);
1515
await fakeFlutterRoot.create();
1616
await d.dir(appPath, [
1717
d.pubspec({

test/outdated/outdated_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,6 @@ Future<void> main() async {
435435
);
436436

437437
await d.dir('flutter-root', [
438-
d.file('version', '1.2.3'),
439438
d.dir('packages', [
440439
d.dir('flutter', [
441440
d.libPubspec('flutter', '1.0.0', sdk: '>=2.12.0 <3.0.0'),
@@ -444,6 +443,7 @@ Future<void> main() async {
444443
d.libPubspec('flutter_test', '1.0.0', sdk: '>=2.10.0 <3.0.0'),
445444
]),
446445
]),
446+
d.flutterVersion('1.2.3'),
447447
]).create();
448448

449449
await d.dir(appPath, [

test/pinned_dependency_hint_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ void main() {
2020
],
2121
),
2222
]),
23-
d.file('version', '1.2.3'),
23+
d.flutterVersion('1.2.3'),
2424
]).create();
2525
await servePackages()
2626
..serve('bar', '1.0.0', deps: {'tool': '^2.0.0'})
@@ -52,7 +52,7 @@ void main() {
5252
],
5353
),
5454
]),
55-
d.file('version', '1.2.3'),
55+
d.flutterVersion('1.2.3'),
5656
]).create();
5757
await servePackages()
5858
..serve('tool', '1.0.0', deps: {'bar': '^2.0.0'})

test/sdk_test.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ void main() {
2929
[d.libDir('baz', 'foo 0.0.1'), d.libPubspec('baz', '0.0.1')],
3030
),
3131
]),
32-
d.file('version', '1.2.3'),
32+
d.flutterVersion('1.2.3'),
3333
]).create();
3434
});
3535

@@ -109,7 +109,9 @@ void main() {
109109
"doesn't fail if the Flutter SDK's version file doesn't exist when "
110110
'nothing depends on Flutter', () async {
111111
await d.appDir().create();
112-
deleteEntry(p.join(d.sandbox, 'flutter', 'version'));
112+
deleteEntry(
113+
p.join(d.sandbox, 'flutter', 'bin', 'cache', 'flutterVersion'),
114+
);
113115
await pubCommand(
114116
command,
115117
environment: {'FLUTTER_ROOT': p.join(d.sandbox, 'flutter')},

test/solve_suggestions_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import 'test_pub.dart';
1212

1313
void main() {
1414
test('suggests an upgrade to the flutter sdk', () async {
15-
await d.dir('flutter', [d.file('version', '1.2.3')]).create();
15+
await d.dir('flutter', [d.flutterVersion('1.2.3')]).create();
1616
final server = await servePackages();
1717
server.serve(
1818
'foo',

test/validator/dependency_test.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ void main() {
124124
});
125125

126126
test('depends on Flutter from an SDK source', () async {
127-
await d.dir('flutter', [d.file('version', '1.2.3')]).create();
127+
await d.dir('flutter', [d.flutterVersion('1.2.3')]).create();
128128
await flutterPackage('flutter').create();
129129
await package(
130130
deps: {
@@ -140,9 +140,8 @@ void main() {
140140
test(
141141
'depends on a package from Flutter with an appropriate Dart SDK constraint',
142142
() async {
143-
await d.dir('flutter', [d.file('version', '1.2.3')]).create();
143+
await d.dir('flutter', [d.flutterVersion('1.2.3')]).create();
144144
await flutterPackage('foo').create();
145-
await d.dir('flutter', [d.file('version', '1.2.3')]).create();
146145
await package(
147146
deps: {
148147
'foo': {'sdk': 'flutter', 'version': '>=1.2.3 <2.0.0'},

test/validator/flutter_constraint_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ late d.DirectoryDescriptor fakeFlutterRoot;
2424
Future<void> setup({
2525
String? flutterConstraint,
2626
}) async {
27-
fakeFlutterRoot = d.dir('fake_flutter_root', [d.file('version', '1.23.0')]);
27+
fakeFlutterRoot = d.dir('fake_flutter_root', [d.flutterVersion('1.23.0')]);
2828
await fakeFlutterRoot.create();
2929
await d.validPackage().create();
3030
await d.dir(appPath, [

test/version_solver_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1363,7 +1363,7 @@ void sdkConstraint() {
13631363

13641364
group('with a Flutter SDK', () {
13651365
setUp(() {
1366-
return d.dir('flutter', [d.file('version', '1.2.3')]).create();
1366+
return d.dir('flutter', [d.flutterVersion('1.2.3')]).create();
13671367
});
13681368

13691369
test('succeeds with a matching constraint', () async {
@@ -2032,7 +2032,7 @@ void regressions() {
20322032
[d.libDir('baz', 'foo 0.0.1'), d.libPubspec('baz', '0.0.1')],
20332033
),
20342034
]),
2035-
d.file('version', '1.2.3'),
2035+
d.flutterVersion('1.2.3'),
20362036
]).create();
20372037
await servePackages()
20382038
..serve(

0 commit comments

Comments
 (0)