public override void Materialize(WindowCursor curs) { if (curs == null) { throw new System.ArgumentNullException("curs"); } if (CachedBytes != null) { return; } if (Type != ObjCommit) { UnpackedObjectCache.Entry cache = PackFile.readCache(DataOffset); if (cache != null) { curs.Release(); Type = cache.type; Size = cache.data.Length; CachedBytes = cache.data; return; } } try { PackedObjectLoader baseLoader = GetBaseLoader(curs); baseLoader.Materialize(curs); CachedBytes = BinaryDelta.Apply(baseLoader.CachedBytes, PackFile.decompress(DataOffset, _deltaSize, curs)); curs.Release(); Type = baseLoader.Type; Size = CachedBytes.Length; if (Type != ObjCommit) { PackFile.saveCache(DataOffset, CachedBytes, Type); } } catch (IOException dfe) { throw new CorruptObjectException("object at " + DataOffset + " in " + PackFile.File.FullName + " has bad zlib stream", dfe); } }
public override ObjectLoader openObject1(WindowCursor curs, AnyObjectId objectId) { PackList pList = _packList.get(); while (true) { SEARCH: foreach (PackFile p in pList.packs) { try { PackedObjectLoader ldr = p.Get(curs, objectId); if (ldr != null) { ldr.Materialize(curs); return(ldr); } } catch (PackMismatchException) { // Pack was modified; refresh the entire pack list. // pList = ScanPacks(pList); goto SEARCH; } catch (IOException) { // Assume the pack is corrupted. // RemovePack(p); } } return(null); } }