Index: sdk/lib/_internal/pub/lib/src/barback/build_environment.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/barback/build_environment.dart b/sdk/lib/_internal/pub/lib/src/barback/build_environment.dart |
index 07f3d294360b60adb139566a5c042b95f72cc6b6..1b6c5c5f70cd5cfd7166f522baa7797881ff2ca7 100644 |
--- a/sdk/lib/_internal/pub/lib/src/barback/build_environment.dart |
+++ b/sdk/lib/_internal/pub/lib/src/barback/build_environment.dart |
@@ -18,6 +18,7 @@ import '../log.dart' as log; |
import '../package.dart'; |
import '../package_graph.dart'; |
import '../sdk.dart' as sdk; |
+import '../utils.dart'; |
import 'admin_server.dart'; |
import 'build_directory.dart'; |
import 'dart_forwarding_transformer.dart'; |
@@ -250,8 +251,8 @@ class BuildEnvironment { |
/// Look up [assetPath] in the "packages" directory in the entrypoint package. |
Future<List<Uri>> _lookUpPathInPackagesDirectory(String assetPath) { |
var components = path.split(path.relative(assetPath)); |
- if (components.first != "packages") return []; |
- if (!graph.packages.containsKey(components[1])) return []; |
+ if (components.first != "packages") return new Future.value([]); |
+ if (!graph.packages.containsKey(components[1])) return new Future.value([]); |
return Future.wait(_directories.values.map((dir) { |
return dir.server.then((server) => |
server.url.resolveUri(path.toUri(assetPath))); |
@@ -281,21 +282,28 @@ class BuildEnvironment { |
})); |
} |
- return []; |
+ return new Future.value([]); |
} |
/// Given a URL to an asset served by this environment, returns the ID of the |
/// asset that would be accessed by that URL. |
/// |
- /// If no server can serve [url], returns `null`. |
- AssetId getAssetIdForUrl(Uri url) { |
- var directory = _directories.values.firstWhere( |
- (dir) => dir.server.address.host == url.host && |
- dir.server.port == url.port, |
- orElse: () => null); |
- if (directory == null) return null; |
- |
- return directory.server.urlToId(url); |
+ /// If no server can serve [url], completes to `null`. |
+ Future<AssetId> getAssetIdForUrl(Uri url) { |
+ var iterator = _directories.values.toList().iterator; |
+ iterate() { |
+ if (!iterator.moveNext()) return null; |
+ |
+ return iterator.current.server.then((server) { |
+ if (server.address.host == url.host && server.port == url.port) { |
+ return server.urlToId(url); |
+ } else { |
+ return iterate(); |
+ } |
+ }); |
+ } |
+ |
+ return syncFuture(iterate); |
Bob Nystrom
2014/04/02 17:31:31
Optimizing to not short-circuit walking the whole
nweiz
2014/04/02 20:21:27
Done.
|
} |
/// Determines if [sourcePath] is contained within any of the directories in |