| Index: sdk/lib/_internal/pub/lib/src/command/barback.dart
|
| diff --git a/sdk/lib/_internal/pub/lib/src/command/barback.dart b/sdk/lib/_internal/pub/lib/src/command/barback.dart
|
| deleted file mode 100644
|
| index 8175e8f108442d2db5d13df7a02119d23c7a151e..0000000000000000000000000000000000000000
|
| --- a/sdk/lib/_internal/pub/lib/src/command/barback.dart
|
| +++ /dev/null
|
| @@ -1,198 +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 pub.command.barback;
|
| -
|
| -import 'dart:async';
|
| -
|
| -import 'package:barback/barback.dart';
|
| -import 'package:path/path.dart' as path;
|
| -
|
| -import '../command.dart';
|
| -import '../io.dart';
|
| -import '../log.dart' as log;
|
| -import '../utils.dart';
|
| -
|
| -final _arrow = getSpecial('\u2192', '=>');
|
| -
|
| -/// The set of top level directories in the entrypoint package that are built
|
| -/// when the user does "--all".
|
| -final _allSourceDirectories = new Set<String>.from([
|
| - "benchmark", "bin", "example", "test", "web"
|
| -]);
|
| -
|
| -/// Shared base class for [BuildCommand] and [ServeCommand].
|
| -abstract class BarbackCommand extends PubCommand {
|
| - /// The build mode.
|
| - BarbackMode get mode => new BarbackMode(argResults["mode"]);
|
| -
|
| - /// The directories in the entrypoint package that should be added to the
|
| - /// build environment.
|
| - final sourceDirectories = new Set<String>();
|
| -
|
| - /// The default build mode.
|
| - BarbackMode get defaultMode => BarbackMode.RELEASE;
|
| -
|
| - /// Override this to specify the default source directories if none are
|
| - /// provided on the command line.
|
| - List<String> get defaultSourceDirectories;
|
| -
|
| - BarbackCommand() {
|
| - argParser.addOption("mode", defaultsTo: defaultMode.toString(),
|
| - help: "Mode to run transformers in.");
|
| -
|
| - argParser.addFlag("all",
|
| - help: "Use all default source directories.",
|
| - defaultsTo: false, negatable: false);
|
| - }
|
| -
|
| - Future run() {
|
| - // Switch to JSON output if specified. We need to do this before parsing
|
| - // the source directories so an error will be correctly reported in JSON
|
| - // format.
|
| - log.json.enabled = argResults.options.contains("format") &&
|
| - argResults["format"] == "json";
|
| -
|
| - _parseSourceDirectories();
|
| - return onRunTransformerCommand();
|
| - }
|
| -
|
| - /// Override this to run the actual command.
|
| - Future onRunTransformerCommand();
|
| -
|
| - /// Parses the command-line arguments to determine the set of source
|
| - /// directories to add to the build environment.
|
| - ///
|
| - /// If there are no arguments, this will just be [defaultSourceDirectories].
|
| - ///
|
| - /// If the `--all` flag is set, then it will be all default directories
|
| - /// that exist.
|
| - ///
|
| - /// Otherwise, all arguments should be the paths of directories to include.
|
| - ///
|
| - /// Throws an exception if the arguments are invalid.
|
| - void _parseSourceDirectories() {
|
| - if (argResults["all"]) {
|
| - _addAllDefaultSources();
|
| - return;
|
| - }
|
| -
|
| - // If no directories were specified, use the defaults.
|
| - if (argResults.rest.isEmpty) {
|
| - _addDefaultSources();
|
| - return;
|
| - }
|
| -
|
| - sourceDirectories.addAll(argResults.rest);
|
| -
|
| - // Prohibit "lib".
|
| - var disallowed = sourceDirectories.where((dir) {
|
| - var parts = path.split(path.normalize(dir));
|
| - return parts.isNotEmpty && parts.first == "lib";
|
| - });
|
| -
|
| - if (disallowed.isNotEmpty) {
|
| - usageException(_directorySentence(disallowed, "is", "are", "not allowed"));
|
| - }
|
| -
|
| - // Make sure the source directories don't reach out of the package.
|
| - var invalid = sourceDirectories.where((dir) => !path.isWithin('.', dir));
|
| - if (invalid.isNotEmpty) {
|
| - usageException(_directorySentence(invalid, "isn't", "aren't",
|
| - "in this package"));
|
| - }
|
| -
|
| - // Make sure all of the source directories exist.
|
| - var missing = sourceDirectories.where(
|
| - (dir) => !dirExists(entrypoint.root.path(dir)));
|
| -
|
| - if (missing.isNotEmpty) {
|
| - dataError(_directorySentence(missing, "does", "do", "not exist"));
|
| - }
|
| -
|
| - // Make sure the directories don't overlap.
|
| - var sources = sourceDirectories.toList();
|
| - var overlapping = new Set();
|
| - for (var i = 0; i < sources.length; i++) {
|
| - for (var j = i + 1; j < sources.length; j++) {
|
| - if (path.isWithin(sources[i], sources[j]) ||
|
| - path.isWithin(sources[j], sources[i])) {
|
| - overlapping.add(sources[i]);
|
| - overlapping.add(sources[j]);
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (overlapping.isNotEmpty) {
|
| - usageException(_directorySentence(overlapping, "cannot", "cannot",
|
| - "overlap"));
|
| - }
|
| - }
|
| -
|
| - /// Handles "--all" by adding all default source directories that are
|
| - /// present.
|
| - void _addAllDefaultSources() {
|
| - if (argResults.rest.isNotEmpty) {
|
| - usageException(
|
| - 'Directory names are not allowed if "--all" is passed.');
|
| - }
|
| -
|
| - // Include every build directory that exists in the package.
|
| - var dirs = _allSourceDirectories.where(
|
| - (dir) => dirExists(entrypoint.root.path(dir)));
|
| -
|
| - if (dirs.isEmpty) {
|
| - var defaultDirs = toSentence(_allSourceDirectories.map(
|
| - (name) => '"$name"'));
|
| - dataError('There are no source directories present.\n'
|
| - 'The default directories are $defaultDirs.');
|
| - }
|
| -
|
| - sourceDirectories.addAll(dirs);
|
| - }
|
| -
|
| - /// Adds the default sources that should be used if no directories are passed
|
| - /// on the command line.
|
| - void _addDefaultSources() {
|
| - sourceDirectories.addAll(defaultSourceDirectories.where(
|
| - (dir) => dirExists(entrypoint.root.path(dir))));
|
| -
|
| - // TODO(rnystrom): Hackish. Assumes there will only be one or two
|
| - // default sources. That's true for pub build and serve, but isn't as
|
| - // general as it could be.
|
| - if (sourceDirectories.isEmpty) {
|
| - var defaults;
|
| - if (defaultSourceDirectories.length == 1) {
|
| - defaults = 'a "${defaultSourceDirectories.first}" directory';
|
| - } else {
|
| - defaults = '"${defaultSourceDirectories[0]}" and/or '
|
| - '"${defaultSourceDirectories[1]}" directories';
|
| - }
|
| -
|
| - dataError("Your package must have $defaults,\n"
|
| - "or you must specify the source directories.");
|
| - }
|
| - }
|
| -
|
| - /// Converts a list of [directoryNames] to a sentence.
|
| - ///
|
| - /// After the list of directories, [singularVerb] will be used if there is
|
| - /// only one directory and [pluralVerb] will be used if there are more than
|
| - /// one. Then [suffix] is added to the end of the sentence, and, finally, a
|
| - /// period is added.
|
| - String _directorySentence(Iterable<String> directoryNames,
|
| - String singularVerb, String pluralVerb, String suffix) {
|
| - var directories = pluralize('Directory', directoryNames.length,
|
| - plural: 'Directories');
|
| - var names = toSentence(directoryNames.map((dir) => '"$dir"'));
|
| - var verb = pluralize(singularVerb, directoryNames.length,
|
| - plural: pluralVerb);
|
| -
|
| - var result = "$directories $names $verb";
|
| - if (suffix != null) result += " $suffix";
|
| - result += ".";
|
| -
|
| - return result;
|
| - }
|
| -}
|
|
|