@@ -382,9 +382,9 @@ class UpdatePackagesCommand extends FlutterCommand {
382
382
final File fakePackage = _pubspecFor (tempDir);
383
383
fakePackage.createSync ();
384
384
fakePackage.writeAsStringSync (
385
- _generateFakePubspec (
385
+ generateFakePubspec (
386
386
dependencies,
387
- useAnyVersion : doUpgrade,
387
+ doUpgrade : doUpgrade,
388
388
),
389
389
);
390
390
// Create a synthetic flutter SDK so that transitive flutter SDK
@@ -1321,8 +1321,22 @@ class PubspecDependency extends PubspecLine {
1321
1321
1322
1322
/// This generates the entry for this dependency for the pubspec.yaml for the
1323
1323
/// fake package that we'll use to get the version numbers figured out.
1324
- void describeForFakePubspec (StringBuffer dependencies, StringBuffer overrides, { bool useAnyVersion = true }) {
1325
- final String versionToUse = useAnyVersion || version.isEmpty ? 'any' : version;
1324
+ ///
1325
+ /// When called with [doUpgrade] as [true] , the version constrains will be set
1326
+ /// to >= whatever the previous version was. If [doUpgrade] is [false] , then
1327
+ /// the previous version is used again as an exact pin.
1328
+ void describeForFakePubspec (StringBuffer dependencies, StringBuffer overrides, { bool doUpgrade = true }) {
1329
+ final String versionToUse;
1330
+ // This should only happen when manually adding new dependencies; otherwise
1331
+ // versions should always be pinned exactly
1332
+ if (version.isEmpty || version == 'any' ) {
1333
+ versionToUse = 'any' ;
1334
+ } else if (doUpgrade) {
1335
+ // Must wrap in quotes for Yaml parsing
1336
+ versionToUse = "'>= $version '" ;
1337
+ } else {
1338
+ versionToUse = version;
1339
+ }
1326
1340
switch (kind) {
1327
1341
case DependencyKind .unknown:
1328
1342
case DependencyKind .overridden:
@@ -1362,6 +1376,7 @@ class PubspecDependency extends PubspecLine {
1362
1376
dependencies.writeln (' $name :' );
1363
1377
dependencies.writeln (lockLine);
1364
1378
}
1379
+ break ;
1365
1380
}
1366
1381
}
1367
1382
@@ -1379,13 +1394,14 @@ File _pubspecFor(Directory directory) {
1379
1394
1380
1395
/// Generates the source of a fake pubspec.yaml file given a list of
1381
1396
/// dependencies.
1382
- String _generateFakePubspec (
1397
+ @visibleForTesting
1398
+ String generateFakePubspec (
1383
1399
Iterable <PubspecDependency > dependencies, {
1384
- bool useAnyVersion = false
1400
+ bool doUpgrade = false
1385
1401
}) {
1386
1402
final StringBuffer result = StringBuffer ();
1387
1403
final StringBuffer overrides = StringBuffer ();
1388
- final bool verbose = useAnyVersion ;
1404
+ final bool verbose = doUpgrade ;
1389
1405
result.writeln ('name: flutter_update_packages' );
1390
1406
result.writeln ('environment:' );
1391
1407
result.writeln (" sdk: '>=2.10.0 <3.0.0'" );
@@ -1415,7 +1431,7 @@ String _generateFakePubspec(
1415
1431
}
1416
1432
for (final PubspecDependency dependency in dependencies) {
1417
1433
if (! dependency.pointsToSdk) {
1418
- dependency.describeForFakePubspec (result, overrides, useAnyVersion : useAnyVersion );
1434
+ dependency.describeForFakePubspec (result, overrides, doUpgrade : doUpgrade );
1419
1435
}
1420
1436
}
1421
1437
result.write (overrides.toString ());
0 commit comments