anchor.diff:          }
         });
       }, onError:(e) {
  -      return this._findPackedObject(shaBytes).then(
  -          (FindPackedObjectResult obj) {
  +      try {
  +        FindPackedObjectResult obj = this._findPackedObject(shaBytes);
           dataType = dataType == 'Raw' ? 'ArrayBuffer' : dataType;
           return obj.pack.matchAndExpandObjectAtOffset(obj.offset, dataType);
  -      }, onError: (e) {
  +      } catch (e) {
           throw "Can't find object with SHA " + sha;
  -      });
  +      }
       });
     }
   
  
positive.code:       Uint8List data = new Uint8List.fromList(result);
        sha1.add(data);
        List<int> digest = sha1.close();
        _findPackedObject(digest).then((_) {
          completer.complete(shaBytesToString(digest));
        }, onError: (e) {
          Future<String> str = _storeInFile(shaBytesToString(digest), data).then((str) {
            completer.complete(str);
          });
        });
      };
  
      reader['onerror'] = (var domError) {
  
negative.code:   Future<chrome.FileEntry> _findLooseObject(String sha) => objectDir.getFile(
        sha.substring(0, 2) + '/' + sha.substring(2));
  
    FindPackedObjectResult _findPackedObject(Uint8List shaBytes) {
      for (var i = 0; i < packs.length; ++i) {
        int offset = packs[i].packIdx.getObjectOffset(shaBytes);
  
        if (offset != -1) {
          return new FindPackedObjectResult(packs[i].pack, offset);
        }
      }
      // TODO More specific error.
      return throw("Not found.");
    }
  
    Future<GitObject> retrieveObject(String sha, String objType) {
  