// Copyright (c) 2012, 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.help;

import 'dart:async';

import '../command.dart';
import '../exit_codes.dart' as exit_codes;
import '../io.dart';
import '../log.dart' as log;

/// Handles the `help` pub command.
class HelpCommand extends PubCommand {
  String get description => "Display help information for Pub.";
  String get usage => "pub help [command]";
  bool get requiresEntrypoint => false;
  bool get takesArguments => true;

  Future onRun() {
    if (commandOptions.rest.isEmpty) {
      PubCommand.printGlobalUsage();
    } else {
      var name = commandOptions.rest[0];
      var command = PubCommand.commands[name];
      if (command == null) {
        log.error('Could not find a command named "$name".');
        log.error('Run "pub help" to see available commands.');
        return flushThenExit(exit_codes.USAGE);
      }

      command.printUsage();
    }
  }
}
