anchor.diff:  
   Future<ProcessResult> _runPub(String dir) async =>
       await Process.run('flutter', ['pub', 'get'], workingDirectory: dir);
  +
  +String _trimName(String name) {
  +  while (name.endsWith('/')) {
  +    name = name.substring(0, name.length - 1);
  +  }
  +  return name;
  +}
   
   class CloneResult {
     final String directory;
  
positive.code:   }
  }
  
  const _downloadDir = 'third_party/download';
  final _client = http.Client();
  
  Future<CloneResult> _clone(String repo) async {
    final name = repo.split('https://github.com/').last.replaceAll('/', '_');
    final cloneDir = '$_downloadDir/$name';
    var result;
    if (Directory(cloneDir).existsSync()) {
      print('Repository "$name" exists -- pulling to update');
  
negative.code:   final repos = [];
    if (args.length == 1 && !Directory(args[0]).existsSync()) {
      final contents = File(args[0]).readAsStringSync();
      repos.addAll(LineSplitter().convert(contents));
    } else {
      repos.addAll(args);
    }
  
    if (!Directory(_appDir).existsSync()) {
      print('Creating: $_appDir');
      Directory(_appDir).createSync(recursive: true);
    }
  
    print('Cloning repositories...');
    for (var repo in repos) {
      final result = await _clone(_trimName(repo));
      if (result.processResult.exitCode != 0) {
        print('Error cloning $repo: ${result.processResult.stderr}');
      } else {
  