anchor.diff:  //    }
   //  }
   //
  -//  @u.SubCommand(help: 'Runs the given command in all projects')
  -//  exec(String command,
  -//      @u.Rest() List<String> args,
  -//      {@u.Option(help: 'The directory that contains the root of the projecs',
  -//          abbr: 'd') String rootDirectory: '.',
  -//        @u.Option(
  -//            help: 'A project name filter. Only projects whose name contains the text will run',
  -//            abbr: 'p') String projects,
  -//        @u.Flag(
  -//            help: 'Instead of running the commands concurrently on the projects, run only one command on one project at a time',
  -//            abbr: 's') bool executeSerially: false}) async {
  -//    final graph = await _loadGraph(rootDirectory);
  -//
  -//    final processCommands = graph
  -//        .multiProjectCommands(
  -//        projectFilter: projectNameFilter(projects),
  -//        defaultConcurrencyMode: executeSerially
  -//            ? CommandConcurrencyMode.serialDepthFirst
  -//            : CommandConcurrencyMode.concurrentProject)
  -//        .processCommands;
  -//
  -//    final result = await processCommands.execute(command, args);
  -//    final output = result.map((r) => r.toReportString()).join('\n');
  -//    stdout.write(output);
  -//  }
  -//
  -//  @u.SubCommand(help: 'Set dependencies between projects')
  -//  setDependencies(
  -//      @u.Positional(help: 'The type of dependency to set', allowed: const [
  -//        'git',
  -//        'path',
  -//        'hosted'
  -//      ]) String type,
  -//      {@u.Option(help: 'The directory that contains the root of the projecs',
  -//          abbr: 'd') String rootDirectory: '.',
  -//        @u.Option(
  -//            help: 'A project name filter. Only projects whose name contains the text will run',
  -//            abbr: 'p') String projects}) async {
  -//    final graph = await _loadGraph(rootDirectory);
  -//    final pubSpec = graph
  -//        .multiProjectCommands(projectFilter: projectNameFilter(projects))
  -//        .pubspecCommands;
  -//
  -//    switch (type) {
  -//      case 'git':
  -//        return pubSpec.setToGitDependencies();
  -//      case 'hosted':
  -//        return pubSpec.setToHostedDependencies();
  -//      case 'path':
  -//      default:
  -//        return pubSpec.setToPathDependencies();
  -//    }
  -//  }
  -//
  -//  @u.SubCommand(help: 'Runs tests projects that have tests')
  -//  test({@u.Option(help: 'The directory that contains the root of the projecs',
  -//      abbr: 'd') String rootDirectory: '.',
  -//    @u.Option(
  -//        help: 'A project name filter. Only projects whose name contains the text will run',
  -//        abbr: 'p') String projects}) async {
  -//    final graph = await _loadGraph(rootDirectory);
  -//    final pub = graph
  -//        .multiProjectCommands(projectFilter: projectNameFilter(projects))
  -//        .pub;
  -//
  -//    return pub.test();
  -//  }
  -//
   //  @u.SubCommand(help: 'Creates the Intellij vcs.xml file for project group')
   //  intellijVcs({@u.Option(
   //      help: 'The directory that contains the root of the projecs',
  
positive.code:   }
  }
  
  class Init extends Command {
    final name = "init";
    final description = 'Installs or updates a group of projects';
  
    Init() {
      argParser.addOption('gitUri',
          help: 'The git Uri containing the jefe.yaml.', abbr: 'g');
      argParser.addOption('installDirectory',
          help: 'The directory to install into', abbr: 'd', defaultsTo: '.');
      argParser.addFlag('skipCheckout',
          help: 'Skips the checkout of the develop branch',
          abbr: 's',
          defaultsTo: false);
    }
  
    Future run() {
      final gitUri = argResults['gitUri'];
      final installDirectory = argResults['installDirectory'];
      final skipCheckout = argResults['skipCheckout'];
      return init(
          gitUri: gitUri,
  
negative.code: 
  Future<ProjectGroup> _load(String rootDirectory) async {
    final Directory installDir =
    rootDirectory == '.' ? Directory.current : new Directory(rootDirectory);
    return ProjectGroup.load(installDir);
  }
  
  ReleaseType _parseReleaseType(String str) =>
      ReleaseType
          .fromLiteral(str)
          .value;
  