anchor.diff:    }
   
     Future _fetchPackage(_Package package, FetchMode mode) {
  -    return _preparePackageDir(package, mode).catchError((e) {
  -      // TODO(ussuri): Is this needed?
  -      return new Future.error(e);
  -    }).then((_PrepareDirRes res) {
  +    return _preparePackageDir(package, mode).then((_PrepareDirRes res) {
         if (!res.existed && mode == FetchMode.INSTALL) {
           // _preparePackageDir created the directory.
           return _clonePackage(package, res.entry);
  
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:         // 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).
          throw "Error parsing Bower spec file ($specDesc): $e";
        }
  
        List<Future> futures = [];
  