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: 
  Logger _logger = new Logger('spark.bower_fetcher');
  
  class FetchMode extends Enum<int> {
    const FetchMode._(int val) : super(val);
  
    String get enumName => 'FetchMode';
  
    static const INSTALL = const FetchMode._(1);
    static const UPGRADE = const FetchMode._(2);
  }
  
  class _PrepareDirRes {
  
negative.code:   }
  
    Future _fetchPackage(_Package package, FetchMode mode) {
      return _preparePackageDir(package, mode).then((_PrepareDirRes res) {
        if (!res.existed && mode == FetchMode.INSTALL) {
          // _preparePackageDir created the directory.
          return _clonePackage(package, res.entry);
  