anchor.diff:        Uint8List data = new Uint8List.fromList(result);
         sha1.add(data);
         List<int> digest = sha1.close();
  -      _findPackedObject(digest).then((_) {
  +
  +      try {
  +        FindPackedObjectResult obj = _findPackedObject(digest);
           completer.complete(shaBytesToString(digest));
  -      }, onError: (e) {
  -        Future<String> str = _storeInFile(shaBytesToString(digest), data).then((str) {
  -          completer.complete(str);
  -        });
  -      });
  +      } catch (e) {
  +        Future<String> str = _storeInFile(shaBytesToString(digest), data).then(
  +            (str) => completer.complete(str));
  +      }
       };
   
       reader['onerror'] = (var domError) {
  
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:   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) {
  