anchor.diff:    final repos = [];
     if (args.length == 1 && !Directory(args[0]).existsSync()) {
       final contents = File(args[0]).readAsStringSync();
  -    repos.addAll(contents.split('\n'));
  +    repos.addAll(LineSplitter().convert(contents));
     } else {
       repos.addAll(args);
     }
   
  -  if (!Directory(_downloadDir).existsSync()) {
  -    print('Creating: $_downloadDir');
  -    Directory(_downloadDir).createSync(recursive: true);
  +  if (!Directory(_appDir).existsSync()) {
  +    print('Creating: $_appDir');
  +    Directory(_appDir).createSync(recursive: true);
     }
   
     print('Cloning repositories...');
     for (var repo in repos) {
  -    final result = await _clone(repo);
  +    final result = await _clone(_trimName(repo));
       if (result.processResult.exitCode != 0) {
         print('Error cloning $repo: ${result.processResult.stderr}');
       } else {
  
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: 
  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;
  