executable.dart 2.86 KB
Newer Older
1 2 3 4
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6 7 8
import 'dart:async';
import 'dart:io';

import 'package:args/command_runner.dart';
9
import 'package:stack_trace/stack_trace.dart';
10

11 12
import 'src/base/context.dart';
import 'src/base/logger.dart';
13
import 'src/base/process.dart';
Hixie's avatar
Hixie committed
14
import 'src/commands/analyze.dart';
15
import 'src/commands/apk.dart';
16 17
import 'src/commands/build.dart';
import 'src/commands/cache.dart';
18
import 'src/commands/create.dart';
Devon Carew's avatar
Devon Carew committed
19
import 'src/commands/daemon.dart';
20
import 'src/commands/devices.dart';
21
import 'src/commands/doctor.dart';
22 23 24
import 'src/commands/install.dart';
import 'src/commands/listen.dart';
import 'src/commands/logs.dart';
25
import 'src/commands/refresh.dart';
26
import 'src/commands/run.dart';
27 28
import 'src/commands/run_mojo.dart';
import 'src/commands/stop.dart';
29
import 'src/commands/test.dart';
30
import 'src/commands/trace.dart';
31
import 'src/commands/upgrade.dart';
32
import 'src/device.dart';
33 34
import 'src/doctor.dart';
import 'src/ios/mac.dart';
35
import 'src/runner/flutter_command_runner.dart';
36 37 38 39

/// Main entry point for commands.
///
/// This function is intended to be used from the [flutter] command line tool.
40
Future main(List<String> args) async {
Devon Carew's avatar
Devon Carew committed
41 42
  bool help = args.contains('-h') || args.contains('--help');
  bool verbose = args.contains('-v') || args.contains('--verbose');
43
  bool verboseHelp = help && verbose;
Devon Carew's avatar
Devon Carew committed
44

45
  FlutterCommandRunner runner = new FlutterCommandRunner(verboseHelp: verboseHelp)
Hixie's avatar
Hixie committed
46
    ..addCommand(new AnalyzeCommand())
47
    ..addCommand(new ApkCommand())
48 49
    ..addCommand(new BuildCommand())
    ..addCommand(new CacheCommand())
50
    ..addCommand(new CreateCommand())
51 52
    ..addCommand(new DaemonCommand(hideCommand: !verboseHelp))
    ..addCommand(new DevicesCommand())
53
    ..addCommand(new DoctorCommand())
54 55 56
    ..addCommand(new InstallCommand())
    ..addCommand(new ListenCommand())
    ..addCommand(new LogsCommand())
57
    ..addCommand(new RefreshCommand())
58
    ..addCommand(new RunCommand())
Eric Seidel's avatar
Eric Seidel committed
59
    ..addCommand(new RunMojoCommand(hideCommand: !verboseHelp))
60
    ..addCommand(new StopCommand())
61
    ..addCommand(new TestCommand())
62 63
    ..addCommand(new TraceCommand())
    ..addCommand(new UpgradeCommand());
64

65
  return Chain.capture(() async {
66 67 68
    // Initialize globals.
    context[Logger] = new StdoutLogger();
    context[DeviceManager] = new DeviceManager();
69 70
    Doctor.initGlobal();
    XCode.initGlobal();
71

72
    dynamic result = await runner.run(args);
73

74 75
    if (result is int)
      exit(result);
76 77 78 79 80 81
  }, onError: (error, Chain chain) {
    if (error is UsageException) {
      stderr.writeln(error);
      // Argument error exit code.
      exit(64);
    } else if (error is ProcessExit) {
82
      // We've caught an exit code.
83 84
      exit(error.exitCode);
    } else {
85 86
      stderr.writeln(error);
      stderr.writeln(chain.terse);
87
      exit(1);
88
    }
89
  });
90
}