Always ignore non-public transformers.

This was happening for the most part, but the dependency computer could
get tripped up when a package used a transformer from a dev dependency
on only private files.

R=rnystrom@google.com
BUG= http://dartbug.com/23480

Review URL: https://codereview.chromium.org//1143453006
This commit is contained in:
Natalie Weizenbaum 2015-05-20 17:44:46 -07:00
parent c23a129bb1
commit 8298073cbc
2 changed files with 63 additions and 0 deletions

View file

@ -254,6 +254,9 @@ class _PackageDependencyComputer {
String packageName)
: _dependencyComputer = dependencyComputer,
_package = dependencyComputer._graph.packages[packageName] {
var isRootPackage =
packageName == _dependencyComputer._graph.entrypoint.root.name;
// If [_package] uses its own transformers, there will be fewer transformers
// running on [_package] while its own transformers are loading than there
// will be once all its transformers are finished loading. To handle this,
@ -262,6 +265,9 @@ class _PackageDependencyComputer {
// smaller.
for (var phase in _package.pubspec.transformers) {
for (var config in phase) {
// Ignore non-root transformers on non-public files.
if (!isRootPackage && !config.canTransformPublicFiles) continue;
var id = config.id;
try {
if (id.package != _package.name) {

View file

@ -0,0 +1,57 @@
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS d.file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import '../descriptor.dart' as d;
import '../test_pub.dart';
import '../serve/utils.dart';
main() {
initConfig();
// Regression test for issue 23480
integration("ignores a transformer on test files in a dependency", () {
servePackages((builder) {
builder.serveRepoPackage('barback');
builder.serve("bar", "1.2.3", contents: [
d.dir("lib", [
// Make this invalid so that if it does get loaded, pub will
// definitely throw an error.
d.file("bar.dart", "{invalid Dart code)")
])
]);
builder.serve("foo", "1.2.3",
pubspec: {
"name": "foo",
"version": "1.0.0",
"dev_dependencies": {
"bar": "any"
},
"transformers": [{
"bar": {"\$include": "test/**"}
}]
}, contents: [
d.dir("test", [
d.file("my_test.dart", "void main() {}")
])
]);
});
d.dir(appPath, [
d.pubspec({
"name": "myapp",
"dependencies": {"foo": "any"}
}),
d.dir("web", [
d.file("foo.txt", "foo")
])
]).create();
pubGet();
pubServe();
requestShouldSucceed("foo.txt", "foo");
endPubServe();
});
}