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