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