Upgrade other versions conservatively with --major-versions (#3295)
diff --git a/lib/src/command/upgrade.dart b/lib/src/command/upgrade.dart index a1bd2dd..0dc5fb7 100644 --- a/lib/src/command/upgrade.dart +++ b/lib/src/command/upgrade.dart
@@ -224,30 +224,34 @@ resolvedPackage.version, )); } + final newPubspecText = _updatePubspec(changes); if (_dryRun) { // Even if it is a dry run, run `acquireDependencies` so that the user // gets a report on changes. await Entrypoint.inMemory( - Package.inMemory(resolvablePubspec), + Package.inMemory( + Pubspec.parse(newPubspecText, cache.sources), + ), cache, lockFile: entrypoint.lockFile, solveResult: solveResult, ).acquireDependencies( - SolveType.upgrade, + SolveType.get, dryRun: true, precompile: _precompile, analytics: null, // No analytics for dry-run generateDotPackages: false, ); } else { - await _updatePubspec(changes); - + if (changes.isNotEmpty) { + writeTextFile(entrypoint.pubspecPath, newPubspecText); + } // TODO: Allow Entrypoint to be created with in-memory pubspec, so that // we can show the changes when not in --dry-run mode. For now we only show // the changes made to pubspec.yaml in dry-run mode. await Entrypoint(directory, cache).acquireDependencies( - SolveType.upgrade, + SolveType.get, precompile: _precompile, analytics: analytics, generateDotPackages: argResults['legacy-packages-file'], @@ -320,12 +324,13 @@ changes[dep] = dep.withConstraint(constraint); } + final newPubspecText = _updatePubspec(changes); if (_dryRun) { // Even if it is a dry run, run `acquireDependencies` so that the user // gets a report on changes. // TODO(jonasfj): Stop abusing Entrypoint.global for dry-run output await Entrypoint.inMemory( - Package.inMemory(nullsafetyPubspec), + Package.inMemory(Pubspec.parse(newPubspecText, cache.sources)), cache, lockFile: entrypoint.lockFile, solveResult: solveResult, @@ -337,8 +342,9 @@ generateDotPackages: false, ); } else { - await _updatePubspec(changes); - + if (changes.isNotEmpty) { + writeTextFile(entrypoint.pubspecPath, newPubspecText); + } // TODO: Allow Entrypoint to be created with in-memory pubspec, so that // we can show the changes in --dry-run mode. For now we only show // the changes made to pubspec.yaml in dry-run mode. @@ -390,13 +396,11 @@ } /// Updates `pubspec.yaml` with given [changes]. - Future<void> _updatePubspec( + String _updatePubspec( Map<PackageRange, PackageRange> changes, - ) async { + ) { ArgumentError.checkNotNull(changes, 'changes'); - if (changes.isEmpty) return; - final yamlEditor = YamlEditor(readTextFile(entrypoint.pubspecPath)); final deps = entrypoint.root.pubspec.dependencies.keys; final devDeps = entrypoint.root.pubspec.devDependencies.keys; @@ -416,9 +420,7 @@ ); } } - - /// Windows line endings are already handled by [yamlEditor] - writeTextFile(entrypoint.pubspecPath, yamlEditor.toString()); + return yamlEditor.toString(); } /// Outputs a summary of changes made to `pubspec.yaml`.
diff --git a/test/testdata/goldens/upgrade/example_warns_about_major_versions_test/pub upgrade --major-versions does not update major versions in example~.txt b/test/testdata/goldens/upgrade/example_warns_about_major_versions_test/pub upgrade --major-versions does not update major versions in example~.txt index 2cc96c0..ae304ea 100644 --- a/test/testdata/goldens/upgrade/example_warns_about_major_versions_test/pub upgrade --major-versions does not update major versions in example~.txt +++ b/test/testdata/goldens/upgrade/example_warns_about_major_versions_test/pub upgrade --major-versions does not update major versions in example~.txt
@@ -17,9 +17,7 @@ ## Section 1 $ pub upgrade --major-versions --directory example Resolving dependencies in example... - bar 2.0.0 > foo 2.0.0 (was 1.0.0) - myapp 0.0.0 from path . Changed 1 dependency in example! Changed 1 constraint in pubspec.yaml:
diff --git a/test/upgrade/upgrade_major_versions_test.dart b/test/upgrade/upgrade_major_versions_test.dart index 0f0b0f6..c5f0994 100644 --- a/test/upgrade/upgrade_major_versions_test.dart +++ b/test/upgrade/upgrade_major_versions_test.dart
@@ -99,11 +99,10 @@ }); test('upgrades only the selected package', () async { - await servePackages() + final server = await servePackages() ..serve('foo', '1.0.0') ..serve('foo', '2.0.0') - ..serve('bar', '0.1.0') - ..serve('bar', '0.2.0'); + ..serve('bar', '0.1.0'); await d.appDir({ 'foo': '^1.0.0', @@ -112,6 +111,8 @@ await pubGet(); + server.serve('bar', '0.1.1'); + // 1 constraint should be updated await pubUpgrade( args: ['--major-versions', 'foo'],