Version 1.7.2

svn merge -c 41090 https://dart.googlecode.com/svn/trunk 1.7

Review URL: https://codereview.chromium.org//651483004

git-svn-id: http://dart.googlecode.com/svn/branches/1.7@41096 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/sdk/lib/_internal/pub/lib/src/barback/transformer_cache.dart b/sdk/lib/_internal/pub/lib/src/barback/transformer_cache.dart
index 5433ce1..e6c9a53 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/transformer_cache.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/transformer_cache.dart
@@ -56,6 +56,10 @@
   /// Clear the cache if it depends on any package in [changedPackages].
   void clearIfOutdated(Set<String> changedPackages) {
     var snapshotDependencies = unionAll(_oldTransformers.map((id) {
+      // If the transformer cache contains transformers we don't know about,
+      // that's fine; we just won't load them.
+      if (!_graph.packages.containsKey(id.package)) return new Set();
+
       return _graph.transitiveDependencies(id.package)
           .map((package) => package.name).toSet();
     }));
diff --git a/sdk/lib/_internal/pub/test/transformer/cache_test.dart b/sdk/lib/_internal/pub/test/transformer/cache_test.dart
index 270d307..d4a51a0 100644
--- a/sdk/lib/_internal/pub/test/transformer/cache_test.dart
+++ b/sdk/lib/_internal/pub/test/transformer/cache_test.dart
@@ -4,6 +4,7 @@
 
 library pub_tests;
 
+import 'package:scheduled_test/scheduled_stream.dart';
 import 'package:scheduled_test/scheduled_test.dart';
 
 import '../descriptor.dart' as d;
@@ -53,6 +54,8 @@
         d.file("transformer.dart", replaceTransformer("Goodbye", "See ya"))
       ])
     ]);
+
+    builder.serve("baz", "1.2.3");
   });
 
   d.dir(appPath, [
@@ -266,6 +269,60 @@
     process.stdout.expect("See ya!");
     process.shouldExit();
   });
+
+  // Issue 21298.
+  integration("doesn't recache when a transformer is removed", () {
+    setUp();
+
+    d.dir(appPath, [
+      d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": "1.2.3",
+          "bar": "1.2.3"
+        },
+        "transformers": ["foo", "bar"]
+      }),
+      d.dir("bin", [
+        d.file("myapp.dart", "main() => print('Hello!');")
+      ])
+    ]).create();
+
+    var process = pubRun(args: ['myapp']);
+    process.stdout.expect("See ya!");
+    process.shouldExit();
+
+    d.dir(appPath, [
+      d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": "1.2.3",
+          // Add a new dependency to trigger another "pub get". This works
+          // around issue 20498.
+          "baz": "1.2.3"
+        },
+        "transformers": ["foo"]
+      }),
+      d.dir("bin", [
+        d.file("myapp.dart", "main() => print('Hello!');")
+      ])
+    ]).create();
+
+    process = pubRun(args: ['myapp']);
+    process.stdout.expect(
+        "Your pubspec has changed, so we need to update your lockfile:");
+    process.stdout.expect(consumeThrough("Goodbye!"));
+    process.shouldExit();
+
+    // "bar" should still be in the manifest, since there's no reason to
+    // recompile the cache.
+    d.dir(appPath, [
+      d.dir(".pub/transformers", [
+        d.file("manifest.txt", "0.1.2+3\nbar,foo"),
+        d.matcherFile("transformers.snapshot", isNot(isEmpty))
+      ])
+    ]).validate();
+  });
 }
 
 String replaceTransformer(String input, String output) {
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_cache.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_cache.dart
index 01cf03b..a396d15 100644
--- a/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_cache.dart
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/transformer_cache.dart
@@ -19,6 +19,7 @@
   }
   void clearIfOutdated(Set<String> changedPackages) {
     var snapshotDependencies = unionAll(_oldTransformers.map((id) {
+      if (!_graph.packages.containsKey(id.package)) return new Set();
       return _graph.transitiveDependencies(
           id.package).map((package) => package.name).toSet();
     }));
diff --git a/sdk/lib/_internal/pub_generated/test/transformer/cache_test.dart b/sdk/lib/_internal/pub_generated/test/transformer/cache_test.dart
index 80a5278..b5ea7cb 100644
--- a/sdk/lib/_internal/pub_generated/test/transformer/cache_test.dart
+++ b/sdk/lib/_internal/pub_generated/test/transformer/cache_test.dart
@@ -1,4 +1,5 @@
 library pub_tests;
+import 'package:scheduled_test/scheduled_stream.dart';
 import 'package:scheduled_test/scheduled_test.dart';
 import '../descriptor.dart' as d;
 import '../test_pub.dart';
@@ -40,6 +41,7 @@
             d.dir(
                 "lib",
                 [d.file("transformer.dart", replaceTransformer("Goodbye", "See ya"))])]);
+    builder.serve("baz", "1.2.3");
   });
   d.dir(appPath, [d.pubspec({
       "name": "myapp",
@@ -215,6 +217,43 @@
     process.stdout.expect("See ya!");
     process.shouldExit();
   });
+  integration("doesn't recache when a transformer is removed", () {
+    setUp();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": "1.2.3",
+          "bar": "1.2.3"
+        },
+        "transformers": ["foo", "bar"]
+      }),
+          d.dir("bin", [d.file("myapp.dart", "main() => print('Hello!');")])]).create();
+    var process = pubRun(args: ['myapp']);
+    process.stdout.expect("See ya!");
+    process.shouldExit();
+    d.dir(appPath, [d.pubspec({
+        "name": "myapp",
+        "dependencies": {
+          "foo": "1.2.3",
+          "baz": "1.2.3"
+        },
+        "transformers": ["foo"]
+      }),
+          d.dir("bin", [d.file("myapp.dart", "main() => print('Hello!');")])]).create();
+    process = pubRun(args: ['myapp']);
+    process.stdout.expect(
+        "Your pubspec has changed, so we need to update your lockfile:");
+    process.stdout.expect(consumeThrough("Goodbye!"));
+    process.shouldExit();
+    d.dir(
+        appPath,
+        [
+            d.dir(
+                ".pub/transformers",
+                [
+                    d.file("manifest.txt", "0.1.2+3\nbar,foo"),
+                    d.matcherFile("transformers.snapshot", isNot(isEmpty))])]).validate();
+  });
 }
 String replaceTransformer(String input, String output) {
   return """
diff --git a/tools/VERSION b/tools/VERSION
index 2c3be21..7176a50 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -26,6 +26,6 @@
 CHANNEL stable
 MAJOR 1
 MINOR 7
-PATCH 1
+PATCH 2
 PRERELEASE 0
 PRERELEASE_PATCH 0