Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1095)

Unified Diff: sdk/lib/_internal/pub_generated/lib/src/command/build.dart

Issue 657673002: Regenerate pub sources. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/pub_generated/lib/src/command/build.dart
diff --git a/sdk/lib/_internal/pub_generated/lib/src/command/build.dart b/sdk/lib/_internal/pub_generated/lib/src/command/build.dart
index 71736631924748807157883c8f41876c8d7d07b9..5aeb37634abdd88c595a1d82dc3996d3ae72885d 100644
--- a/sdk/lib/_internal/pub_generated/lib/src/command/build.dart
+++ b/sdk/lib/_internal/pub_generated/lib/src/command/build.dart
@@ -1,34 +1,52 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS 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.
+
library pub.command.build;
+
import 'dart:async';
+
import 'package:barback/barback.dart';
import 'package:path/path.dart' as path;
+
import '../barback/asset_environment.dart';
import '../exit_codes.dart' as exit_codes;
import '../io.dart';
import '../log.dart' as log;
import '../utils.dart';
import 'barback.dart';
+
final _arrow = getSpecial('\u2192', '=>');
+
+/// Handles the `build` pub command.
class BuildCommand extends BarbackCommand {
String get description => "Apply transformers to build a package.";
String get usage => "pub build [options] [directories...]";
String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-build.html";
List<String> get aliases => const ["deploy", "settle-up"];
+
+ /// The path to the application's build output directory.
String get outputDirectory => commandOptions["output"];
+
List<String> get defaultSourceDirectories => ["web"];
+
+ /// The number of files that have been built and written to disc so far.
int builtFiles = 0;
+
BuildCommand() {
commandParser.addOption(
"format",
help: "How output should be displayed.",
allowed: ["text", "json"],
defaultsTo: "text");
+
commandParser.addOption(
"output",
abbr: "o",
help: "Directory to write build outputs to.",
defaultsTo: "build");
}
+
Future onRunTransformerCommand() {
final completer0 = new Completer();
scheduleMicrotask(() {
@@ -83,12 +101,17 @@ class BuildCommand extends BarbackCommand {
});
return flushThenExit(exit_codes.DATA);
})));
- } catch (e0) {
- completer0.completeError(e0);
+ } catch (e, s) {
+ completer0.completeError(e, s);
}
});
return completer0.future;
}
+
+ /// Writes [asset] to the appropriate build directory.
+ ///
+ /// If [asset] is in the special "packages" directory, writes it to every
+ /// build directory.
Future _writeAsset(Asset asset) {
final completer0 = new Completer();
scheduleMicrotask(() {
@@ -99,10 +122,9 @@ class BuildCommand extends BarbackCommand {
completer0.complete(_writeOutputFile(asset, destPath));
}
if (path.isWithin("packages", destPath)) {
- completer0.complete(
- Future.wait(
- sourceDirectories.map(
- ((buildDir) => _writeOutputFile(asset, path.join(buildDir, destPath))))));
+ completer0.complete(Future.wait(sourceDirectories.map(((buildDir) {
+ return _writeOutputFile(asset, path.join(buildDir, destPath));
+ }))));
} else {
join1();
}
@@ -112,45 +134,94 @@ class BuildCommand extends BarbackCommand {
} else {
join0();
}
- } catch (e0) {
- completer0.completeError(e0);
+ } catch (e, s) {
+ completer0.completeError(e, s);
}
});
return completer0.future;
}
+
+ /// Converts [id] to a relative path in the output directory for that asset.
+ ///
+ /// This corresponds to the URL that could be used to request that asset from
+ /// pub serve.
+ ///
+ /// Examples (where entrypoint is "myapp"):
+ ///
+ /// myapp|web/index.html -> web/index.html
+ /// myapp|lib/lib.dart -> packages/myapp/lib.dart
+ /// foo|lib/foo.dart -> packages/foo/foo.dart
+ /// myapp|test/main.dart -> test/main.dart
+ /// foo|test/main.dart -> ERROR
+ ///
+ /// Throws a [FormatException] if [id] is not a valid public asset.
String _idToPath(AssetId id) {
var parts = path.split(path.fromUri(id.path));
+
if (parts.length < 2) {
throw new FormatException(
"Can not build assets from top-level directory.");
}
+
+ // Map "lib" to the "packages" directory.
if (parts[0] == "lib") {
return path.join("packages", id.package, path.joinAll(parts.skip(1)));
}
+
+ // Shouldn't be trying to access non-public directories of other packages.
assert(id.package == entrypoint.root.name);
+
+ // Allow any path in the entrypoint package.
return path.joinAll(parts);
}
+
+ /// Writes the contents of [asset] to [relativePath] within the build
+ /// directory.
Future _writeOutputFile(Asset asset, String relativePath) {
builtFiles++;
var destPath = path.join(outputDirectory, relativePath);
ensureDir(path.dirname(destPath));
return createFileFromStream(asset.read(), destPath);
}
+
+ /// If this package depends directly on the `browser` package, this ensures
+ /// that the JavaScript bootstrap files are copied into `packages/browser/`
+ /// directories next to each entrypoint in [entrypoints].
+ ///
+ /// Returns the number of files it copied.
int _copyBrowserJsFiles(Iterable<AssetId> entrypoints) {
+ // Must depend on the browser package.
if (!entrypoint.root.immediateDependencies.any(
(dep) => dep.name == 'browser' && dep.source == 'hosted')) {
return 0;
}
- var entrypointDirs = entrypoints.map(
+
+ // Get all of the subdirectories that contain Dart entrypoints.
+ var entrypointDirs =
+ entrypoints// Convert the asset path to a native-separated one and get the
+ // directory containing the entrypoint.
+ .map(
(id) =>
path.dirname(
- path.fromUri(id.path))).where((dir) => path.split(dir).length > 1).toSet();
+ path.fromUri(
+ id.path)))// Don't copy files to the top levels of the build directories since
+ // the normal lib asset copying will take care of that.
+ .where((dir) => path.split(dir).length > 1).toSet();
+
for (var dir in entrypointDirs) {
+ // TODO(nweiz): we should put browser JS files next to any HTML file
+ // rather than any entrypoint. An HTML file could import an entrypoint
+ // that's not adjacent.
_addBrowserJs(dir, "dart");
_addBrowserJs(dir, "interop");
}
+
return entrypointDirs.length * 2;
}
+
+ // TODO(nweiz): do something more principled when issue 6101 is fixed.
+ /// Ensures that the [name].js file is copied into [directory] in [target],
+ /// under `packages/browser/`.
void _addBrowserJs(String directory, String name) {
var jsPath = entrypoint.root.path(
outputDirectory,
@@ -159,8 +230,14 @@ class BuildCommand extends BarbackCommand {
'browser',
'$name.js');
ensureDir(path.dirname(jsPath));
+
+ // TODO(rnystrom): This won't work if we get rid of symlinks and the top
+ // level "packages" directory. Will need to copy from the browser
+ // directory.
copyFile(path.join(entrypoint.packagesDir, 'browser', '$name.js'), jsPath);
}
+
+ /// Converts [entry] to a JSON object for use with JSON-formatted output.
Map _logEntryToJson(LogEntry entry) {
var data = {
"level": entry.level.name,
@@ -169,7 +246,7 @@ class BuildCommand extends BarbackCommand {
"primaryInput": {
"package": entry.transform.primaryId.package,
"path": entry.transform.primaryId.path
- }
+ },
},
"assetId": {
"package": entry.assetId.package,
@@ -177,6 +254,7 @@ class BuildCommand extends BarbackCommand {
},
"message": entry.message
};
+
if (entry.span != null) {
data["span"] = {
"url": entry.span.sourceUrl,
@@ -187,9 +265,10 @@ class BuildCommand extends BarbackCommand {
"end": {
"line": entry.span.end.line,
"column": entry.span.end.column
- }
+ },
};
}
+
return data;
}
}

Powered by Google App Engine
This is Rietveld 408576698