diff --git a/lib/src/solver/report.dart b/lib/src/solver/report.dart index bfc426da0c..0d4006f6a7 100644 --- a/lib/src/solver/report.dart +++ b/lib/src/solver/report.dart @@ -495,7 +495,6 @@ $contentHashesDocumentationUrl oldId != null && newId != null && oldDependencyType != newDependencyType; - if (!(alwaysShow || changed || addedOrRemoved || diff --git a/lib/src/solver/version_solver.dart b/lib/src/solver/version_solver.dart index 0d0f119e79..70b7a2d8e6 100644 --- a/lib/src/solver/version_solver.dart +++ b/lib/src/solver/version_solver.dart @@ -610,7 +610,8 @@ class VersionSolver { return range.constraint as Version?; } } - return _lockFile.packages[package]?.version; + final locked = _getLocked(package); + return locked?.version; } /// Logs [message] in the context of the current selected packages. diff --git a/test/get/hosted/resolve_with_retracted_package_versions_test.dart b/test/get/hosted/resolve_with_retracted_package_versions_test.dart index c32cdc6d23..4924f064be 100644 --- a/test/get/hosted/resolve_with_retracted_package_versions_test.dart +++ b/test/get/hosted/resolve_with_retracted_package_versions_test.dart @@ -45,11 +45,6 @@ void main() { ); }); - // Currently retraction does not affect prioritization. I.e., if - // pubspec.lock already contains a retracted version, which is the newest - // satisfying the dependency constraint we will not choose to downgrade. - // In this case we expect a newer version to be published at some point which - // will then cause pub upgrade to choose that one. test('Allow retracted version when it was already in pubspec.lock', () async { final server = await servePackages() @@ -66,28 +61,12 @@ void main() { ]).validate(); server.retractPackageVersion('bar', '1.1.0'); - await pubUpgrade(); - await d.cacheDir({'foo': '1.0.0', 'bar': '1.1.0'}).validate(); - await d.appPackageConfigFile([ - d.packageConfigEntry(name: 'foo', version: '1.0.0'), - d.packageConfigEntry(name: 'bar', version: '1.1.0'), - ]).validate(); - - server.serve('bar', '2.0.0'); - await pubUpgrade(); + await pubGet(); await d.cacheDir({'foo': '1.0.0', 'bar': '1.1.0'}).validate(); await d.appPackageConfigFile([ d.packageConfigEntry(name: 'foo', version: '1.0.0'), d.packageConfigEntry(name: 'bar', version: '1.1.0'), ]).validate(); - - server.serve('bar', '1.2.0'); - await pubUpgrade(); - await d.cacheDir({'foo': '1.0.0', 'bar': '1.2.0'}).validate(); - await d.appPackageConfigFile([ - d.packageConfigEntry(name: 'foo', version: '1.0.0'), - d.packageConfigEntry(name: 'bar', version: '1.2.0'), - ]).validate(); }); test( @@ -124,10 +103,9 @@ void main() { await pubUpgrade(args: ['--offline']); - // We choose bar 1.1.0 since we already have it in pubspec.lock await d.appPackageConfigFile([ d.packageConfigEntry(name: 'foo', version: '1.0.0'), - d.packageConfigEntry(name: 'bar', version: '1.1.0'), + d.packageConfigEntry(name: 'bar', version: '1.0.0'), ]).validate(); // Delete lockfile so that retracted versions are not considered. @@ -183,7 +161,7 @@ void main() { await pubUpgrade(); await d.appPackageConfigFile([ - d.packageConfigEntry(name: 'foo', version: '3.0.0'), + d.packageConfigEntry(name: 'foo', version: '1.0.0'), ]).validate(); await d.dir(appPath, [ diff --git a/test/testdata/goldens/outdated/outdated_test/newer versions available.txt b/test/testdata/goldens/outdated/outdated_test/newer versions available.txt index d71ce8f082..fd8b217887 100644 --- a/test/testdata/goldens/outdated/outdated_test/newer versions available.txt +++ b/test/testdata/goldens/outdated/outdated_test/newer versions available.txt @@ -69,10 +69,10 @@ $ pub outdated --json "version": "1.0.1" }, "upgradable": { - "version": "1.0.1" + "version": "1.0.0" }, "resolvable": { - "version": "1.0.1" + "version": "1.0.0" }, "latest": { "version": "1.0.0" @@ -137,22 +137,22 @@ $ pub outdated --no-color Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 *1.3.0 *2.0.0 3.0.0 -retracted *1.0.1 (retracted) *1.0.1 (retracted) *1.0.1 (retracted) 1.0.0 +foo *1.2.3 *1.3.0 *2.0.0 3.0.0 +retracted *1.0.1 (retracted) 1.0.0 1.0.0 1.0.0 dev_dependencies: -builder *1.2.3 *1.3.0 2.0.0 2.0.0 +builder *1.2.3 *1.3.0 2.0.0 2.0.0 transitive dependencies: -transitive *1.2.3 *1.3.0 *1.3.0 2.0.0 -transitive2 - - 1.0.0 1.0.0 +transitive *1.2.3 *1.3.0 *1.3.0 2.0.0 +transitive2 - - 1.0.0 1.0.0 transitive dev_dependencies: -dev_trans *1.0.0 - *1.0.0 2.0.0 -transitive3 - - 1.0.0 1.0.0 +dev_trans *1.0.0 - *1.0.0 2.0.0 +transitive3 - - 1.0.0 1.0.0 3 upgradable dependencies are locked (in pubspec.lock) to older versions. To update these dependencies, use `dart pub upgrade`. @@ -170,14 +170,14 @@ $ pub outdated --no-color --no-transitive Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 *1.3.0 *2.0.0 3.0.0 -retracted *1.0.1 (retracted) *1.0.1 (retracted) *1.0.1 (retracted) 1.0.0 +foo *1.2.3 *1.3.0 *2.0.0 3.0.0 +retracted *1.0.1 (retracted) 1.0.0 1.0.0 1.0.0 dev_dependencies: -builder *1.2.3 *1.3.0 2.0.0 2.0.0 +builder *1.2.3 *1.3.0 2.0.0 2.0.0 2 upgradable dependencies are locked (in pubspec.lock) to older versions. To update these dependencies, use `dart pub upgrade`. @@ -195,24 +195,24 @@ $ pub outdated --no-color --up-to-date Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -bar 1.0.0 1.0.0 1.0.0 1.0.0 -foo *1.2.3 *1.3.0 *2.0.0 3.0.0 -local_package 0.0.1 (path) 0.0.1 (path) 0.0.1 (path) 0.0.1 (path) -retracted *1.0.1 (retracted) *1.0.1 (retracted) *1.0.1 (retracted) 1.0.0 +bar 1.0.0 1.0.0 1.0.0 1.0.0 +foo *1.2.3 *1.3.0 *2.0.0 3.0.0 +local_package 0.0.1 (path) 0.0.1 (path) 0.0.1 (path) 0.0.1 (path) +retracted *1.0.1 (retracted) 1.0.0 1.0.0 1.0.0 dev_dependencies: -builder *1.2.3 *1.3.0 2.0.0 2.0.0 +builder *1.2.3 *1.3.0 2.0.0 2.0.0 transitive dependencies: -transitive *1.2.3 *1.3.0 *1.3.0 2.0.0 -transitive2 - - 1.0.0 1.0.0 +transitive *1.2.3 *1.3.0 *1.3.0 2.0.0 +transitive2 - - 1.0.0 1.0.0 transitive dev_dependencies: -dev_trans *1.0.0 - *1.0.0 2.0.0 -transitive3 - - 1.0.0 1.0.0 +dev_trans *1.0.0 - *1.0.0 2.0.0 +transitive3 - - 1.0.0 1.0.0 3 upgradable dependencies are locked (in pubspec.lock) to older versions. To update these dependencies, use `dart pub upgrade`. @@ -230,22 +230,22 @@ $ pub outdated --no-color --prereleases Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 *1.3.0 *2.0.0 3.0.0 -retracted *1.0.1 (retracted) *1.0.1 (retracted) *1.0.1 (retracted) 1.0.0 +foo *1.2.3 *1.3.0 *2.0.0 3.0.0 +retracted *1.0.1 (retracted) 1.0.0 1.0.0 1.0.0 dev_dependencies: -builder *1.2.3 *1.3.0 *2.0.0 3.0.0-alpha +builder *1.2.3 *1.3.0 *2.0.0 3.0.0-alpha transitive dependencies: -transitive *1.2.3 *1.3.0 *1.3.0 2.0.0 -transitive2 - - 1.0.0 1.0.0 +transitive *1.2.3 *1.3.0 *1.3.0 2.0.0 +transitive2 - - 1.0.0 1.0.0 transitive dev_dependencies: -dev_trans *1.0.0 - *1.0.0 2.0.0 -transitive3 - - 1.0.0 1.0.0 +dev_trans *1.0.0 - *1.0.0 2.0.0 +transitive3 - - 1.0.0 1.0.0 3 upgradable dependencies are locked (in pubspec.lock) to older versions. To update these dependencies, use `dart pub upgrade`. @@ -263,14 +263,14 @@ $ pub outdated --no-color --no-dev-dependencies Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 *1.3.0 3.0.0 3.0.0 -retracted *1.0.1 (retracted) *1.0.1 (retracted) *1.0.1 (retracted) 1.0.0 +foo *1.2.3 *1.3.0 3.0.0 3.0.0 +retracted *1.0.1 (retracted) 1.0.0 1.0.0 1.0.0 transitive dependencies: -transitive *1.2.3 2.0.0 2.0.0 2.0.0 +transitive *1.2.3 2.0.0 2.0.0 2.0.0 2 upgradable dependencies are locked (in pubspec.lock) to older versions. To update these dependencies, use `dart pub upgrade`. @@ -288,22 +288,22 @@ $ pub outdated --no-color --no-dependency-overrides Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 *1.3.0 *2.0.0 3.0.0 -retracted *1.0.1 (retracted) *1.0.1 (retracted) *1.0.1 (retracted) 1.0.0 +foo *1.2.3 *1.3.0 *2.0.0 3.0.0 +retracted *1.0.1 (retracted) 1.0.0 1.0.0 1.0.0 dev_dependencies: -builder *1.2.3 *1.3.0 2.0.0 2.0.0 +builder *1.2.3 *1.3.0 2.0.0 2.0.0 transitive dependencies: -transitive *1.2.3 *1.3.0 *1.3.0 2.0.0 -transitive2 - - 1.0.0 1.0.0 +transitive *1.2.3 *1.3.0 *1.3.0 2.0.0 +transitive2 - - 1.0.0 1.0.0 transitive dev_dependencies: -dev_trans *1.0.0 - *1.0.0 2.0.0 -transitive3 - - 1.0.0 1.0.0 +dev_trans *1.0.0 - *1.0.0 2.0.0 +transitive3 - - 1.0.0 1.0.0 3 upgradable dependencies are locked (in pubspec.lock) to older versions. To update these dependencies, use `dart pub upgrade`. @@ -349,10 +349,10 @@ $ pub outdated --json --no-dev-dependencies "version": "1.0.1" }, "upgradable": { - "version": "1.0.1" + "version": "1.0.0" }, "resolvable": { - "version": "1.0.1" + "version": "1.0.0" }, "latest": { "version": "1.0.0" diff --git a/test/testdata/goldens/outdated/outdated_test/show discontinued and retracted.txt b/test/testdata/goldens/outdated/outdated_test/show discontinued and retracted.txt index d3b9547729..cefc4a1022 100644 --- a/test/testdata/goldens/outdated/outdated_test/show discontinued and retracted.txt +++ b/test/testdata/goldens/outdated/outdated_test/show discontinued and retracted.txt @@ -13,12 +13,8 @@ $ pub outdated --json "current": { "version": "1.0.0" }, - "upgradable": { - "version": "1.0.0" - }, - "resolvable": { - "version": "1.0.0" - }, + "upgradable": null, + "resolvable": null, "latest": null }, { @@ -30,12 +26,8 @@ $ pub outdated --json "current": { "version": "1.0.0" }, - "upgradable": { - "version": "1.2.0" - }, - "resolvable": { - "version": "1.2.0" - }, + "upgradable": null, + "resolvable": null, "latest": { "version": "1.2.0" } @@ -50,14 +42,12 @@ $ pub outdated --no-color Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -bar *1.0.0 (retracted) *1.0.0 (retracted) *1.0.0 (retracted) - (discontinued) -foo *1.0.0 (retracted) 1.2.0 1.2.0 1.2.0 (discontinued) - -1 upgradable dependency is locked (in pubspec.lock) to an older version. -To update it, use `dart pub upgrade`. +bar *1.0.0 (retracted) - - - (discontinued) +foo *1.0.0 (retracted) - - 1.2.0 (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. bar Package bar has been discontinued. See https://dart.dev/go/package-discontinue @@ -73,14 +63,12 @@ $ pub outdated --no-color --no-transitive Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -bar *1.0.0 (retracted) *1.0.0 (retracted) *1.0.0 (retracted) - (discontinued) -foo *1.0.0 (retracted) 1.2.0 1.2.0 1.2.0 (discontinued) - -1 upgradable dependency is locked (in pubspec.lock) to an older version. -To update it, use `dart pub upgrade`. +bar *1.0.0 (retracted) - - - (discontinued) +foo *1.0.0 (retracted) - - 1.2.0 (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. bar Package bar has been discontinued. See https://dart.dev/go/package-discontinue @@ -96,17 +84,15 @@ $ pub outdated --no-color --up-to-date Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -bar *1.0.0 (retracted) *1.0.0 (retracted) *1.0.0 (retracted) - (discontinued) -foo *1.0.0 (retracted) 1.2.0 1.2.0 1.2.0 (discontinued) +bar *1.0.0 (retracted) - - - (discontinued) +foo *1.0.0 (retracted) - - 1.2.0 (discontinued) transitive dependencies: -transitive 1.2.3 1.2.3 1.2.3 1.2.3 - -1 upgradable dependency is locked (in pubspec.lock) to an older version. -To update it, use `dart pub upgrade`. +transitive 1.2.3 - - 1.2.3 +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. bar Package bar has been discontinued. See https://dart.dev/go/package-discontinue @@ -122,14 +108,12 @@ $ pub outdated --no-color --prereleases Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -bar *1.0.0 (retracted) *1.0.0 (retracted) *1.0.0 (retracted) - (discontinued) -foo *1.0.0 (retracted) 1.2.0 1.2.0 1.2.0 (discontinued) - -1 upgradable dependency is locked (in pubspec.lock) to an older version. -To update it, use `dart pub upgrade`. +bar *1.0.0 (retracted) - - - (discontinued) +foo *1.0.0 (retracted) - - 1.2.0 (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. bar Package bar has been discontinued. See https://dart.dev/go/package-discontinue @@ -145,14 +129,12 @@ $ pub outdated --no-color --no-dev-dependencies Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -bar *1.0.0 (retracted) *1.0.0 (retracted) *1.0.0 (retracted) - (discontinued) -foo *1.0.0 (retracted) 1.2.0 1.2.0 1.2.0 (discontinued) - -1 upgradable dependency is locked (in pubspec.lock) to an older version. -To update it, use `dart pub upgrade`. +bar *1.0.0 (retracted) - - - (discontinued) +foo *1.0.0 (retracted) - - 1.2.0 (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. bar Package bar has been discontinued. See https://dart.dev/go/package-discontinue @@ -168,14 +150,12 @@ $ pub outdated --no-color --no-dependency-overrides Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -bar *1.0.0 (retracted) *1.0.0 (retracted) *1.0.0 (retracted) - (discontinued) -foo *1.0.0 (retracted) 1.2.0 1.2.0 1.2.0 (discontinued) - -1 upgradable dependency is locked (in pubspec.lock) to an older version. -To update it, use `dart pub upgrade`. +bar *1.0.0 (retracted) - - - (discontinued) +foo *1.0.0 (retracted) - - 1.2.0 (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. bar Package bar has been discontinued. See https://dart.dev/go/package-discontinue @@ -199,12 +179,8 @@ $ pub outdated --json --no-dev-dependencies "current": { "version": "1.0.0" }, - "upgradable": { - "version": "1.0.0" - }, - "resolvable": { - "version": "1.0.0" - }, + "upgradable": null, + "resolvable": null, "latest": null }, { @@ -216,12 +192,8 @@ $ pub outdated --json --no-dev-dependencies "current": { "version": "1.0.0" }, - "upgradable": { - "version": "1.2.0" - }, - "resolvable": { - "version": "1.2.0" - }, + "upgradable": null, + "resolvable": null, "latest": { "version": "1.2.0" } diff --git a/test/testdata/goldens/outdated/outdated_test/show discontinued with no latest version.txt b/test/testdata/goldens/outdated/outdated_test/show discontinued with no latest version.txt index 6f171e6ac3..6481a2d8f0 100644 --- a/test/testdata/goldens/outdated/outdated_test/show discontinued with no latest version.txt +++ b/test/testdata/goldens/outdated/outdated_test/show discontinued with no latest version.txt @@ -13,12 +13,8 @@ $ pub outdated --json "current": { "version": "1.2.3" }, - "upgradable": { - "version": "1.2.3" - }, - "resolvable": { - "version": "1.2.3" - }, + "upgradable": null, + "resolvable": null, "latest": null } ] @@ -31,12 +27,11 @@ $ pub outdated --no-color Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 (retracted) *1.2.3 (retracted) *1.2.3 (retracted) - (discontinued) -You are already using the newest resolvable versions listed in the 'Resolvable' column. -Newer versions, listed in 'Latest', may not be mutually compatible. +foo *1.2.3 (retracted) - - - (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. foo Package foo has been discontinued. See https://dart.dev/go/package-discontinue @@ -49,12 +44,11 @@ $ pub outdated --no-color --no-transitive Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 (retracted) *1.2.3 (retracted) *1.2.3 (retracted) - (discontinued) -You are already using the newest resolvable versions listed in the 'Resolvable' column. -Newer versions, listed in 'Latest', may not be mutually compatible. +foo *1.2.3 (retracted) - - - (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. foo Package foo has been discontinued. See https://dart.dev/go/package-discontinue @@ -67,17 +61,16 @@ $ pub outdated --no-color --up-to-date Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -bar 1.0.0 1.0.0 1.0.0 1.0.0 -baz 1.0.0 1.0.0 1.0.0 1.0.0 (discontinued) -foo *1.2.3 (retracted) *1.2.3 (retracted) *1.2.3 (retracted) - (discontinued) +bar 1.0.0 - - 1.0.0 +baz 1.0.0 - - 1.0.0 (discontinued) +foo *1.2.3 (retracted) - - - (discontinued) transitive dependencies: -transitive 1.2.3 1.2.3 1.2.3 1.2.3 -You are already using the newest resolvable versions listed in the 'Resolvable' column. -Newer versions, listed in 'Latest', may not be mutually compatible. +transitive 1.2.3 - - 1.2.3 +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. baz Package baz has been discontinued, replaced by newbaz. See https://dart.dev/go/package-discontinue @@ -92,12 +85,11 @@ $ pub outdated --no-color --prereleases Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 (retracted) *1.2.3 (retracted) *1.2.3 (retracted) - (discontinued) -You are already using the newest resolvable versions listed in the 'Resolvable' column. -Newer versions, listed in 'Latest', may not be mutually compatible. +foo *1.2.3 (retracted) - - - (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. foo Package foo has been discontinued. See https://dart.dev/go/package-discontinue @@ -110,12 +102,11 @@ $ pub outdated --no-color --no-dev-dependencies Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 (retracted) *1.2.3 (retracted) *1.2.3 (retracted) - (discontinued) -You are already using the newest resolvable versions listed in the 'Resolvable' column. -Newer versions, listed in 'Latest', may not be mutually compatible. +foo *1.2.3 (retracted) - - - (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. foo Package foo has been discontinued. See https://dart.dev/go/package-discontinue @@ -128,12 +119,11 @@ $ pub outdated --no-color --no-dependency-overrides Showing outdated packages. [*] indicates versions that are not the latest available. -Package Name Current Upgradable Resolvable Latest +Package Name Current Upgradable Resolvable Latest direct dependencies: -foo *1.2.3 (retracted) *1.2.3 (retracted) *1.2.3 (retracted) - (discontinued) -You are already using the newest resolvable versions listed in the 'Resolvable' column. -Newer versions, listed in 'Latest', may not be mutually compatible. +foo *1.2.3 (retracted) - - - (discontinued) +No resolution was found. Try running `dart pub upgrade --dry-run` to explore why. foo Package foo has been discontinued. See https://dart.dev/go/package-discontinue @@ -154,12 +144,8 @@ $ pub outdated --json --no-dev-dependencies "current": { "version": "1.2.3" }, - "upgradable": { - "version": "1.2.3" - }, - "resolvable": { - "version": "1.2.3" - }, + "upgradable": null, + "resolvable": null, "latest": null } ] diff --git a/test/upgrade/hosted/upgrade_away_from_retracted_test.dart b/test/upgrade/hosted/upgrade_away_from_retracted_test.dart new file mode 100644 index 0000000000..a790e7ed57 --- /dev/null +++ b/test/upgrade/hosted/upgrade_away_from_retracted_test.dart @@ -0,0 +1,82 @@ +// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:test/test.dart'; + +import '../../descriptor.dart' as d; +import '../../test_pub.dart'; + +void main() { + test('upgrade will downgrade if current version is retracted', () async { + final server = await servePackages(); + + server.serve('foo', '1.0.0'); + server.serve('foo', '1.5.0'); + + await d.appDir(dependencies: {'foo': '^1.0.0'}).create(); + + await pubGet(output: contains('+ foo 1.5.0')); + server.retractPackageVersion('foo', '1.5.0'); + await pubUpgrade(output: contains('< foo 1.0.0')); + }); + + test('Versions pinned in dependency_overrides are allowed', () async { + final server = await servePackages(); + + server.serve('foo', '1.0.0'); + server.serve('foo', '1.5.0'); + + await d + .appDir( + dependencies: {'foo': '^1.0.0'}, + pubspec: { + 'dependency_overrides': {'foo': '1.5.0'}, + }, + ) + .create(); + + await pubGet(output: contains('! foo 1.5.0 (overridden)')); + server.retractPackageVersion('foo', '1.5.0'); + await pubUpgrade(output: contains('! foo 1.5.0 (overridden) (retracted)')); + }); + + test( + 'upgrade will not downgrade if current version is not unlocked', + () async { + final server = await servePackages(); + + server.serve('foo', '1.0.0'); + server.serve('foo', '1.5.0'); + + server.serve('bar', '1.0.0'); + server.serve('bar', '1.5.0'); + + await d.appDir(dependencies: {'foo': '^1.0.0', 'bar': '^1.0.0'}).create(); + + await pubGet( + output: allOf(contains('+ foo 1.5.0'), contains('+ bar 1.5.0')), + ); + server.retractPackageVersion('foo', '1.5.0'); + server.retractPackageVersion('bar', '1.5.0'); + + await pubUpgrade( + args: ['foo'], // bar stays locked, we are only upgrading foo. + output: allOf(contains('< foo 1.0.0'), isNot(contains('bar'))), + ); + }, + ); + + test('downgrade will upgrade if current version is retracted', () async { + final server = await servePackages(); + + server.serve('foo', '1.0.0'); + + await d.appDir(dependencies: {'foo': '^1.0.0'}).create(); + await pubGet(output: contains('+ foo 1.0.0')); + server.serve('foo', '1.5.0'); + + server.retractPackageVersion('foo', '1.0.0'); + await pubDowngrade(output: contains('> foo 1.5.0')); + }); +}