anchor.diff:    Future<chrome.DirectoryEntry> _createPackageDir(_Package package) {
       return _packagesDir.createDirectory(package.name, exclusive: true)
           .catchError((e) {
  -      return new Future.error(
  -        "Couldn't create directory for package '${package.name}': $e");
  +      throw "Couldn't create directory for package '${package.name}': $e";
       });
     }
   
     Future _clonePackage(_Package package, chrome.DirectoryEntry dir) {
       final String url = package.getUrlForCloning();
       return _git.clone(url, dir, branchName: package.branch).catchError((e) {
  -      return new Future.error(
  -        "Package ${package.name} not cloned: $e");
  +      throw "Package ${package.name} not cloned: $e";
       });
     }
   }
  
positive.code:         // TODO(ussuri): Perhaps differentiate between the user's own bower.json
          // (a hard error with a modal popup) and dependency bower.json's (a soft
          // error with just a progress bar notification).
          return new Future.error('Error parsing Bower spec file ($specDesc): $e');
        }
  
        List<Future> futures = [];
  
negative.code:   Future fetchDependencies(chrome.ChromeFileEntry specFile, FetchMode mode) {
      return _gatherAllDeps(
          _readLocalSpecFile(specFile), specFile.fullPath
      ).then((_) {
        return _fetchAllDeps(mode);
      });
    }
  