Output a summary when there are newer version, but they cannot resolv… (#2387)
diff --git a/lib/src/command/outdated.dart b/lib/src/command/outdated.dart
index a4d6419..5826688 100644
--- a/lib/src/command/outdated.dart
+++ b/lib/src/command/outdated.dart
@@ -322,6 +322,11 @@
'To update these dependencies, edit pubspec.yaml.');
}
}
+
+ if (notAtResolvable == 0 && upgradable == 0 && rows.isNotEmpty) {
+ log.message('\nDependencies are all on the latest resolvable versions.'
+ '\nNewer versions, while available, are not mutually compatible.');
+ }
}
Future<List<_FormattedString>> oudatedMarker(
diff --git a/test/outdated/goldens/mutually_incompatible.txt b/test/outdated/goldens/mutually_incompatible.txt
new file mode 100644
index 0000000..b88a3e1
--- /dev/null
+++ b/test/outdated/goldens/mutually_incompatible.txt
@@ -0,0 +1,89 @@
+$ pub outdated --format=json
+Resolving...
+{
+ "packages": [
+ {
+ "package": "bar",
+ "current": "1.0.0",
+ "upgradable": "1.0.0",
+ "resolvable": "1.0.0",
+ "latest": "2.0.0"
+ },
+ {
+ "package": "foo",
+ "current": "1.0.0",
+ "upgradable": "1.0.0",
+ "resolvable": "1.0.0",
+ "latest": "2.0.0"
+ }
+ ]
+}
+
+$ pub outdated --format=no-color
+Resolving...
+Package Current Upgradable Resolvable Latest
+dependencies
+bar *1.0.0 *1.0.0 *1.0.0 2.0.0
+foo *1.0.0 *1.0.0 *1.0.0 2.0.0
+
+dev_dependencies: all up-to-date
+
+transitive dependencies: all up-to-date
+
+Dependencies are all on the latest resolvable versions.
+Newer versions, while available, are not mutually compatible.
+
+$ pub outdated --format=no-color --mark=none
+Resolving...
+Package Current Upgradable Resolvable Latest
+dependencies
+bar 1.0.0 1.0.0 1.0.0 2.0.0
+foo 1.0.0 1.0.0 1.0.0 2.0.0
+
+dev_dependencies: all up-to-date
+
+transitive dependencies: all up-to-date
+
+Dependencies are all on the latest resolvable versions.
+Newer versions, while available, are not mutually compatible.
+
+$ pub outdated --format=no-color --up-to-date
+Resolving...
+Package Current Upgradable Resolvable Latest
+dependencies
+bar *1.0.0 *1.0.0 *1.0.0 2.0.0
+foo *1.0.0 *1.0.0 *1.0.0 2.0.0
+
+dev_dependencies: all up-to-date
+
+transitive dependencies: all up-to-date
+
+Dependencies are all on the latest resolvable versions.
+Newer versions, while available, are not mutually compatible.
+
+$ pub outdated --format=no-color --pre-releases
+Resolving...
+Package Current Upgradable Resolvable Latest
+dependencies
+bar *1.0.0 *1.0.0 *1.0.0 2.0.0
+foo *1.0.0 *1.0.0 *1.0.0 2.0.0
+
+dev_dependencies: all up-to-date
+
+transitive dependencies: all up-to-date
+
+Dependencies are all on the latest resolvable versions.
+Newer versions, while available, are not mutually compatible.
+
+$ pub outdated --format=no-color --no-dev-dependencies
+Resolving...
+Package Current Upgradable Resolvable Latest
+dependencies
+bar *1.0.0 *1.0.0 *1.0.0 2.0.0
+foo *1.0.0 *1.0.0 *1.0.0 2.0.0
+
+transitive dependencies: all up-to-date
+
+Dependencies are all on the latest resolvable versions.
+Newer versions, while available, are not mutually compatible.
+
diff --git a/test/outdated/outdated_test.dart b/test/outdated/outdated_test.dart
index 31a31ba..ef4ba37 100644
--- a/test/outdated/outdated_test.dart
+++ b/test/outdated/outdated_test.dart
@@ -103,4 +103,26 @@
);
await variations('circular_dependencies');
});
+
+ test('mutually incompatible newer versions', () async {
+ await d.dir(appPath, [
+ d.pubspec({
+ 'name': 'app',
+ 'version': '1.0.1',
+ 'dependencies': {
+ 'foo': '^1.0.0',
+ 'bar': '^1.0.0',
+ },
+ })
+ ]).create();
+
+ await servePackages((builder) => builder
+ ..serve('foo', '1.0.0', deps: {'bar': '^1.0.0'})
+ ..serve('bar', '1.0.0', deps: {'foo': '^1.0.0'})
+ ..serve('foo', '2.0.0', deps: {'bar': '^1.0.0'})
+ ..serve('bar', '2.0.0', deps: {'foo': '^1.0.0'}));
+ await pubGet();
+
+ await variations('mutually_incompatible');
+ });
}