Version 1.7.0-dev.4.1
svn merge -c 40683 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 40690 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 40692 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 40693 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 40695 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 40701 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 40788 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 40802 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
git-svn-id: http://dart.googlecode.com/svn/trunk@40806 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/stack_trace/CHANGELOG.md b/pkg/stack_trace/CHANGELOG.md
index bbb7eb5..2850cfc 100644
--- a/pkg/stack_trace/CHANGELOG.md
+++ b/pkg/stack_trace/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.1
+
+* Widen the SDK constraint to include 1.7.0-dev.4.0.
+
## 1.1.0
* Unify the parsing of Safari and Firefox stack traces. This fixes an error in
diff --git a/pkg/stack_trace/pubspec.yaml b/pkg/stack_trace/pubspec.yaml
index cd798bf..4d9793d 100644
--- a/pkg/stack_trace/pubspec.yaml
+++ b/pkg/stack_trace/pubspec.yaml
@@ -7,7 +7,7 @@
#
# When the major version is upgraded, you *must* update that version constraint
# in pub to stay in sync with this.
-version: 1.1.0
+version: 1.1.1
author: "Dart Team <misc@dartlang.org>"
homepage: http://www.dartlang.org
description: >
@@ -19,4 +19,4 @@
dev_dependencies:
unittest: ">=0.9.0 <0.12.0"
environment:
- sdk: ">=1.7.0-edge.40308 <2.0.0"
+ sdk: ">=1.7.0-dev.4.0 <2.0.0"
diff --git a/runtime/bin/net/nss.gyp b/runtime/bin/net/nss.gyp
index 48675840..eb1c726 100644
--- a/runtime/bin/net/nss.gyp
+++ b/runtime/bin/net/nss.gyp
@@ -1080,6 +1080,8 @@
'<(nss_directory)/nss/lib/util/pkcs11p.h',
'<(nss_directory)/nss/lib/util/pkcs11t.h',
'<(nss_directory)/nss/lib/util/pkcs11u.h',
+ '<(nss_directory)/nss/lib/util/pkcs1sig.c',
+ '<(nss_directory)/nss/lib/util/pkcs1sig.h',
'<(nss_directory)/nss/lib/util/portreg.c',
'<(nss_directory)/nss/lib/util/portreg.h',
'<(nss_directory)/nss/lib/util/quickder.c',
diff --git a/sdk/lib/_internal/pub/lib/src/barback/pub_package_provider.dart b/sdk/lib/_internal/pub/lib/src/barback/pub_package_provider.dart
index 23c1a48..5e77cb3 100644
--- a/sdk/lib/_internal/pub/lib/src/barback/pub_package_provider.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback/pub_package_provider.dart
@@ -29,7 +29,7 @@
staticPackages = [r"$pub", r"$sdk"]..addAll(
graph.packages.keys.where(graph.isPackageStatic));
- Future<Asset> getAsset(AssetId id) {
+ Future<Asset> getAsset(AssetId id) async {
// "$pub" is a psuedo-package that allows pub's transformer-loading
// infrastructure to share code with pub proper.
if (id.package == r'$pub') {
@@ -38,19 +38,20 @@
assert(components.first == 'lib');
components[0] = 'dart';
var file = assetPath(path.joinAll(components));
+ _assertExists(file, id);
// Barback may not be in the package graph if there are no user-defined
// transformers being used at all. The "$pub" sources are still provided,
// but will never be loaded.
if (!_graph.packages.containsKey("barback")) {
- return new Future.value(new Asset.fromPath(id, file));
+ return new Asset.fromPath(id, file);
}
var versions = mapMap(_graph.packages,
value: (_, package) => package.version);
var contents = readTextFile(file);
contents = preprocess(contents, versions, path.toUri(file));
- return new Future.value(new Asset.fromString(id, contents));
+ return new Asset.fromString(id, contents);
}
// "$sdk" is a pseudo-package that provides access to the Dart library
@@ -66,12 +67,19 @@
parts = parts.skip(1);
var file = path.join(sdk.rootDirectory, path.joinAll(parts));
- return new Future.value(new Asset.fromPath(id, file));
+ _assertExists(file, id);
+ return new Asset.fromPath(id, file);
}
var nativePath = path.fromUri(id.path);
var file = _graph.packages[id.package].path(nativePath);
- return new Future.value(new Asset.fromPath(id, file));
+ _assertExists(file, id);
+ return new Asset.fromPath(id, file);
+ }
+
+ /// Throw an [AssetNotFoundException] for [id] if [path] doesn't exist.
+ void _assertExists(String path, AssetId id) {
+ if (!fileExists(path)) throw new AssetNotFoundException(id);
}
Stream<AssetId> getAllAssetIds(String packageName) {
diff --git a/sdk/lib/_internal/pub/test/get/cache_transformed_dependency_test.dart b/sdk/lib/_internal/pub/test/get/cache_transformed_dependency_test.dart
index f3769ee..613d9cb 100644
--- a/sdk/lib/_internal/pub/test/get/cache_transformed_dependency_test.dart
+++ b/sdk/lib/_internal/pub/test/get/cache_transformed_dependency_test.dart
@@ -32,6 +32,30 @@
}
""";
+const HAS_INPUT_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class HasInputTransformer extends Transformer {
+ HasInputTransformer.asPlugin();
+
+ bool get allowedExtensions => '.txt';
+
+ Future apply(Transform transform) {
+ return Future.wait([
+ transform.hasInput(new AssetId("foo", "lib/foo.dart")),
+ transform.hasInput(new AssetId("foo", "lib/does/not/exist.dart"))
+ ]).then((results) {
+ transform.addOutput(new Asset.fromString(
+ transform.primaryInput.id,
+ "lib/foo.dart: \${results.first}, "
+ "lib/does/not/exist.dart: \${results.last}"));
+ });
+ }
+}
+""";
+
main() {
initConfig();
@@ -314,6 +338,44 @@
pub.stdout.expect("Hello!");
pub.shouldExit();
});
+
+ // Regression test for issue 21087.
+ integration("hasInput works for static packages", () {
+ servePackages((builder) {
+ builder.serveRepoPackage('barback');
+
+ builder.serve("foo", "1.2.3",
+ deps: {'barback': 'any'},
+ pubspec: {'transformers': ['foo']},
+ contents: [
+ d.dir("lib", [
+ d.file("transformer.dart", replaceTransformer("Hello", "Goodbye")),
+ d.file("foo.dart", "void main() => print('Hello!');")
+ ])
+ ]);
+ });
+
+ d.dir(appPath, [
+ d.pubspec({
+ "name": "myapp",
+ "dependencies": {"foo": "1.2.3"},
+ "transformers": ["myapp/src/transformer"]
+ }),
+ d.dir("lib", [d.dir("src", [
+ d.file("transformer.dart", HAS_INPUT_TRANSFORMER)
+ ])]),
+ d.dir("web", [
+ d.file("foo.txt", "foo")
+ ])
+ ]).create();
+
+ pubGet(output: contains("Precompiled foo."));
+
+ pubServe();
+ requestShouldSucceed("foo.txt",
+ "lib/foo.dart: true, lib/does/not/exist.dart: false");
+ endPubServe();
+ });
}
String replaceTransformer(String input, String output) {
diff --git a/sdk/lib/_internal/pub_generated/lib/src/barback/pub_package_provider.dart b/sdk/lib/_internal/pub_generated/lib/src/barback/pub_package_provider.dart
index ee505c2..77807e7 100644
--- a/sdk/lib/_internal/pub_generated/lib/src/barback/pub_package_provider.dart
+++ b/sdk/lib/_internal/pub_generated/lib/src/barback/pub_package_provider.dart
@@ -18,31 +18,57 @@
r"$pub",
r"$sdk"]..addAll(graph.packages.keys.where(graph.isPackageStatic));
Future<Asset> getAsset(AssetId id) {
- if (id.package == r'$pub') {
- var components = path.url.split(id.path);
- assert(components.isNotEmpty);
- assert(components.first == 'lib');
- components[0] = 'dart';
- var file = assetPath(path.joinAll(components));
- if (!_graph.packages.containsKey("barback")) {
- return new Future.value(new Asset.fromPath(id, file));
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ join0() {
+ join1() {
+ var nativePath = path.fromUri(id.path);
+ var file = _graph.packages[id.package].path(nativePath);
+ _assertExists(file, id);
+ completer0.complete(new Asset.fromPath(id, file));
+ }
+ if (id.package == r'$sdk') {
+ var parts = path.split(path.fromUri(id.path));
+ assert(parts.isNotEmpty && parts[0] == 'lib');
+ parts = parts.skip(1);
+ var file = path.join(sdk.rootDirectory, path.joinAll(parts));
+ _assertExists(file, id);
+ completer0.complete(new Asset.fromPath(id, file));
+ } else {
+ join1();
+ }
+ }
+ if (id.package == r'$pub') {
+ var components = path.url.split(id.path);
+ assert(components.isNotEmpty);
+ assert(components.first == 'lib');
+ components[0] = 'dart';
+ var file = assetPath(path.joinAll(components));
+ _assertExists(file, id);
+ join2() {
+ var versions =
+ mapMap(_graph.packages, value: ((_, package) => package.version));
+ var contents = readTextFile(file);
+ contents = preprocess(contents, versions, path.toUri(file));
+ completer0.complete(new Asset.fromString(id, contents));
+ }
+ if (!_graph.packages.containsKey("barback")) {
+ completer0.complete(new Asset.fromPath(id, file));
+ } else {
+ join2();
+ }
+ } else {
+ join0();
+ }
+ } catch (e0) {
+ completer0.completeError(e0);
}
- var versions =
- mapMap(_graph.packages, value: (_, package) => package.version);
- var contents = readTextFile(file);
- contents = preprocess(contents, versions, path.toUri(file));
- return new Future.value(new Asset.fromString(id, contents));
- }
- if (id.package == r'$sdk') {
- var parts = path.split(path.fromUri(id.path));
- assert(parts.isNotEmpty && parts[0] == 'lib');
- parts = parts.skip(1);
- var file = path.join(sdk.rootDirectory, path.joinAll(parts));
- return new Future.value(new Asset.fromPath(id, file));
- }
- var nativePath = path.fromUri(id.path);
- var file = _graph.packages[id.package].path(nativePath);
- return new Future.value(new Asset.fromPath(id, file));
+ });
+ return completer0.future;
+ }
+ void _assertExists(String path, AssetId id) {
+ if (!fileExists(path)) throw new AssetNotFoundException(id);
}
Stream<AssetId> getAllAssetIds(String packageName) {
if (packageName == r'$pub') {
diff --git a/sdk/lib/_internal/pub_generated/test/get/cache_transformed_dependency_test.dart b/sdk/lib/_internal/pub_generated/test/get/cache_transformed_dependency_test.dart
index 6a05685..7661ff6 100644
--- a/sdk/lib/_internal/pub_generated/test/get/cache_transformed_dependency_test.dart
+++ b/sdk/lib/_internal/pub_generated/test/get/cache_transformed_dependency_test.dart
@@ -24,6 +24,29 @@
}
}
""";
+const HAS_INPUT_TRANSFORMER = """
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+
+class HasInputTransformer extends Transformer {
+ HasInputTransformer.asPlugin();
+
+ bool get allowedExtensions => '.txt';
+
+ Future apply(Transform transform) {
+ return Future.wait([
+ transform.hasInput(new AssetId("foo", "lib/foo.dart")),
+ transform.hasInput(new AssetId("foo", "lib/does/not/exist.dart"))
+ ]).then((results) {
+ transform.addOutput(new Asset.fromString(
+ transform.primaryInput.id,
+ "lib/foo.dart: \${results.first}, "
+ "lib/does/not/exist.dart: \${results.last}"));
+ });
+ }
+}
+""";
main() {
initConfig();
integration("caches a transformed dependency", () {
@@ -278,6 +301,39 @@
pub.stdout.expect("Hello!");
pub.shouldExit();
});
+ integration("hasInput works for static packages", () {
+ servePackages((builder) {
+ builder.serveRepoPackage('barback');
+ builder.serve("foo", "1.2.3", deps: {
+ 'barback': 'any'
+ }, pubspec: {
+ 'transformers': ['foo']
+ },
+ contents: [
+ d.dir(
+ "lib",
+ [
+ d.file("transformer.dart", replaceTransformer("Hello", "Goodbye")),
+ d.file("foo.dart", "void main() => print('Hello!');")])]);
+ });
+ d.dir(appPath, [d.pubspec({
+ "name": "myapp",
+ "dependencies": {
+ "foo": "1.2.3"
+ },
+ "transformers": ["myapp/src/transformer"]
+ }),
+ d.dir(
+ "lib",
+ [d.dir("src", [d.file("transformer.dart", HAS_INPUT_TRANSFORMER)])]),
+ d.dir("web", [d.file("foo.txt", "foo")])]).create();
+ pubGet(output: contains("Precompiled foo."));
+ pubServe();
+ requestShouldSucceed(
+ "foo.txt",
+ "lib/foo.dart: true, lib/does/not/exist.dart: false");
+ endPubServe();
+ });
}
String replaceTransformer(String input, String output) {
return """
diff --git a/tools/VERSION b/tools/VERSION
index f40729c..8e6bf6c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
MINOR 7
PATCH 0
PRERELEASE 4
-PRERELEASE_PATCH 0
+PRERELEASE_PATCH 1