Index: sdk/lib/_internal/pub/lib/src/command_deploy.dart |
diff --git a/sdk/lib/_internal/pub/lib/src/command_deploy.dart b/sdk/lib/_internal/pub/lib/src/command_deploy.dart |
deleted file mode 100644 |
index 7261b128e9d5a61fc897143f7af87784cdd4bd44..0000000000000000000000000000000000000000 |
--- a/sdk/lib/_internal/pub/lib/src/command_deploy.dart |
+++ /dev/null |
@@ -1,141 +0,0 @@ |
-// 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 command_deploy; |
- |
-import 'dart:async'; |
-import 'dart:math' as math; |
- |
-import 'package:analyzer_experimental/analyzer.dart'; |
-import 'package:pathos/path.dart' as path; |
- |
-import 'command.dart'; |
-import 'dart.dart' as dart; |
-import 'io.dart'; |
-import 'log.dart' as log; |
-import 'utils.dart'; |
- |
-final _arrow = getSpecial('\u2192', '=>'); |
- |
-/// Handles the `deploy` pub command. |
-class DeployCommand extends PubCommand { |
- final description = "Copy and compile all Dart entrypoints in the 'web' " |
- "directory."; |
- final usage = "pub deploy [options]"; |
- final aliases = const ["settle-up"]; |
- |
- // TODO(nweiz): make these configurable. |
- /// The path to the source directory of the deployment. |
- String get source => path.join(entrypoint.root.dir, 'web'); |
- |
- /// The path to the target directory of the deployment. |
- String get target => path.join(entrypoint.root.dir, 'deploy'); |
- |
- /// The set of Dart entrypoints in [source] that should be compiled to [out]. |
- final _entrypoints = new List<String>(); |
- |
- int _maxVerbLength; |
- int _maxSourceLength; |
- |
- Future onRun() { |
- if (!dirExists(source)) { |
- throw new ApplicationException("There is no '$source' directory."); |
- } |
- |
- return entrypoint.packageFiles(beneath: source).then((files) { |
- log.message("Finding entrypoints..."); |
- _findEntrypoints(files); |
- _computeLogSize(); |
- |
- cleanDir(target); |
- _logAction("Copying", "${path.relative(source)}${path.separator}", |
- "${path.relative(target)}${path.separator}"); |
- copyFiles(files.where((file) => path.extension(file) != '.dart'), |
- source, target); |
- |
- return Future.forEach(_entrypoints, (sourceFile) { |
- var targetFile = |
- path.join(target, path.relative(sourceFile, from: source)); |
- var relativeTargetFile = path.relative(targetFile); |
- var relativeSourceFile = path.relative(sourceFile); |
- |
- ensureDir(path.dirname(targetFile)); |
- _logAction("Compiling", relativeSourceFile, "$relativeTargetFile.js"); |
- // TODO(nweiz): print dart2js errors/warnings in red. |
- return dart.compile(sourceFile, packageRoot: entrypoint.packagesDir) |
- .then((js) { |
- writeTextFile("$targetFile.js", js, dontLogContents: true); |
- _logAction("Compiling", relativeSourceFile, "$relativeTargetFile"); |
- return dart.compile(sourceFile, |
- packageRoot: entrypoint.packagesDir, toDart: true); |
- }).then((dart) { |
- writeTextFile(targetFile, dart, dontLogContents: true); |
- // TODO(nweiz): we should put dart.js files next to any HTML file |
- // rather than any entrypoint. An HTML file could import an entrypoint |
- // that's not adjacent. |
- _maybeAddDartJs(path.dirname(targetFile)); |
- }); |
- }); |
- }); |
- } |
- |
- /// Populates [_entrypoints] with all of the Dart entrypoints in [files]. |
- /// [files] should be a list of paths in [source]. |
- void _findEntrypoints(List<String> files) { |
- for (var file in files) { |
- if (path.extension(file) != '.dart') continue; |
- try { |
- if (!dart.isEntrypoint(parseDartFile(file))) continue; |
- } on AnalyzerErrorGroup catch (e) { |
- log.warning(e.message); |
- continue; |
- } |
- _entrypoints.add(file); |
- } |
- // Sort to ensure a deterministic order of compilation and output. |
- _entrypoints.sort(); |
- } |
- |
- /// Computes the maximum widths of words that will be used in log output for |
- /// the deploy command so we know how much padding to add when printing them. |
- /// This should only be run after [_findEntrypoints]. |
- void _computeLogSize() { |
- _maxVerbLength = ["Copying", "Compiling"] |
- .map((verb) => verb.length).reduce(math.max); |
- var sourceLengths = new List.from( |
- _entrypoints.map((file) => path.relative(file).length)) |
- ..add("${path.relative(source)}${path.separator}".length); |
- if (_shouldAddDartJs) sourceLengths.add("package:browser/dart.js".length); |
- _maxSourceLength = sourceLengths.reduce(math.max); |
- } |
- |
- /// Log a deployment action. This should only be run after [_computeLogSize]. |
- void _logAction(String verb, String source, String target) { |
- verb = padRight(verb, _maxVerbLength); |
- source = padRight(source, _maxSourceLength); |
- log.message("$verb $source $_arrow $target"); |
- } |
- |
- // TODO(nweiz): do something more principled when issue 6101 is fixed. |
- /// If this package depends non-transitively on the `browser` package, this |
- /// ensures that the `dart.js` file is copied into [directory], under |
- /// `packages/browser/`. |
- void _maybeAddDartJs(String directory) { |
- var jsPath = path.join(directory, 'packages', 'browser', 'dart.js'); |
- // TODO(nweiz): warn if they don't depend on browser? |
- if (!_shouldAddDartJs || fileExists(jsPath)) return; |
- |
- _logAction("Copying", "package:browser/dart.js", path.relative(jsPath)); |
- ensureDir(path.dirname(jsPath)); |
- copyFile(path.join(entrypoint.packagesDir, 'browser', 'dart.js'), jsPath); |
- } |
- |
- /// Whether we should copy the browser package's dart.js file into the |
- /// deployed app. |
- bool get _shouldAddDartJs { |
- return !_entrypoints.isEmpty && |
- entrypoint.root.dependencies.any((dep) => |
- dep.name == 'browser' && dep.source == 'hosted'); |
- } |
-} |