Fix `pub outdated` for circular dependency on root. (#2379)

When root package is required by one of its dependencies, resolution
fails as the stripped `PubSpec` didn't retain the verion number.
This addresses this issue, and adds a test case covering circular
dependency on the root package.
diff --git a/lib/src/command/outdated.dart b/lib/src/command/outdated.dart
index 9b65a85..e4108f3 100644
--- a/lib/src/command/outdated.dart
+++ b/lib/src/command/outdated.dart
@@ -183,8 +183,11 @@
 Pubspec _stripDevDependencies(Pubspec original) {
   return Pubspec(
     original.name,
+    version: original.version,
     sdkConstraints: original.sdkConstraints,
     dependencies: original.dependencies.values,
+    devDependencies: [], // explicitly give empty list, to prevent lazy parsing
+    // TODO(sigurdm): consider dependency overrides.
   );
 }
 
@@ -211,6 +214,7 @@
 
   return Pubspec(
     original.name,
+    version: original.version,
     sdkConstraints: original.sdkConstraints,
     dependencies: _unconstrained(original.dependencies),
     devDependencies: _unconstrained(original.devDependencies),
diff --git a/test/outdated/goldens/circular_dependencies.txt b/test/outdated/goldens/circular_dependencies.txt
new file mode 100644
index 0000000..7f53199
--- /dev/null
+++ b/test/outdated/goldens/circular_dependencies.txt
@@ -0,0 +1,72 @@
+$ pub outdated --format=json
+Resolving...
+{
+  "packages": [
+    {
+      "package": "foo",
+      "current": "1.2.3",
+      "upgradable": "1.3.0",
+      "resolvable": "1.3.0",
+      "latest": "1.3.0"
+    }
+  ]
+}
+
+$ pub outdated --format=no-color
+Resolving...
+Package  Current  Upgradable  Resolvable  Latest  
+dependencies
+foo      *1.2.3   1.3.0       1.3.0       1.3.0   
+
+dev_dependencies: all up-to-date
+
+transitive dependencies: all up-to-date
+1 upgradable dependency is locked (in pubspec.lock) to an older version.
+To update it, use `pub upgrade`.
+
+$ pub outdated --format=no-color --mark=none
+Resolving...
+Package  Current  Upgradable  Resolvable  Latest  
+dependencies
+foo      1.2.3    1.3.0       1.3.0       1.3.0   
+
+dev_dependencies: all up-to-date
+
+transitive dependencies: all up-to-date
+1 upgradable dependency is locked (in pubspec.lock) to an older version.
+To update it, use `pub upgrade`.
+
+$ pub outdated --format=no-color --up-to-date
+Resolving...
+Package  Current  Upgradable  Resolvable  Latest  
+dependencies
+foo      *1.2.3   1.3.0       1.3.0       1.3.0   
+
+dev_dependencies: all up-to-date
+
+transitive dependencies: all up-to-date
+1 upgradable dependency is locked (in pubspec.lock) to an older version.
+To update it, use `pub upgrade`.
+
+$ pub outdated --format=no-color --pre-releases
+Resolving...
+Package  Current  Upgradable  Resolvable  Latest  
+dependencies
+foo      *1.2.3   1.3.0       1.3.0       1.3.0   
+
+dev_dependencies: all up-to-date
+
+transitive dependencies: all up-to-date
+1 upgradable dependency is locked (in pubspec.lock) to an older version.
+To update it, use `pub upgrade`.
+
+$ pub outdated --format=no-color --no-dev-dependencies
+Resolving...
+Package  Current  Upgradable  Resolvable  Latest  
+dependencies
+foo      *1.2.3   1.3.0       1.3.0       1.3.0   
+
+transitive dependencies: all up-to-date
+1 upgradable dependency is locked (in pubspec.lock) to an older version.
+To update it, use `pub upgrade`.
+
diff --git a/test/outdated/outdated_test.dart b/test/outdated/outdated_test.dart
index 7937261..31a31ba 100644
--- a/test/outdated/outdated_test.dart
+++ b/test/outdated/outdated_test.dart
@@ -80,4 +80,27 @@
       ..serve('transitive3', '1.0.0'));
     await variations('newer_versions');
   });
+
+  test('circular dependency on root', () async {
+    await servePackages(
+      (builder) => builder..serve('foo', '1.2.3', deps: {'app': '^1.0.0'}),
+    );
+
+    await d.dir(appPath, [
+      d.pubspec({
+        'name': 'app',
+        'version': '1.0.1',
+        'dependencies': {
+          'foo': '^1.0.0',
+        },
+      })
+    ]).create();
+
+    await pubGet();
+
+    globalPackageServer.add(
+      (builder) => builder..serve('foo', '1.3.0', deps: {'app': '^1.0.1'}),
+    );
+    await variations('circular_dependencies');
+  });
 }