private ObjectId computePackName() { byte[] buf = new byte[Constants.OBJECT_ID_LENGTH]; MessageDigest md = Constants.newMessageDigest(); for (DhtInfo otp : objectListByName) { otp.copyRawTo(buf, 0); md.update(buf); } return ObjectId.fromRaw(md.digest()); }
oe.info(chunkOf(oe.chunkPtr)), // dbWriteBuffer); cnt++;
private List<ChunkKey> toChunkList(Set<DhtInfo> objects) throws DhtException { if (objects == null || objects.isEmpty()) return null; Map<ChunkKey, ChunkOrderingEntry> map = new HashMap<ChunkKey, ChunkOrderingEntry>(); for (DhtInfo obj : objects) { if (!obj.isInPack()) continue; long chunkPtr = obj.chunkPtr; ChunkKey key = chunkOf(chunkPtr); ChunkOrderingEntry e = map.get(key); if (e == null) { e = new ChunkOrderingEntry(); e.key = key; e.order = chunkIdx(chunkPtr); map.put(key, e); } else { e.order = Math.min(e.order, chunkIdx(chunkPtr)); } } ChunkOrderingEntry[] tmp = map.values().toArray( new ChunkOrderingEntry[map.size()]); Arrays.sort(tmp); ChunkKey[] out = new ChunkKey[tmp.length]; for (int i = 0; i < tmp.length; i++) out[i] = tmp[i].key; return Arrays.asList(out); }
oe.info(chunkOf(oe.chunkPtr)), // dbWriteBuffer); cnt++;
private List<ChunkKey> toChunkList(Set<DhtInfo> objects) throws DhtException { if (objects == null || objects.isEmpty()) return null; Map<ChunkKey, ChunkOrderingEntry> map = new HashMap<ChunkKey, ChunkOrderingEntry>(); for (DhtInfo obj : objects) { if (!obj.isInPack()) continue; long chunkPtr = obj.chunkPtr; ChunkKey key = chunkOf(chunkPtr); ChunkOrderingEntry e = map.get(key); if (e == null) { e = new ChunkOrderingEntry(); e.key = key; e.order = chunkIdx(chunkPtr); map.put(key, e); } else { e.order = Math.min(e.order, chunkIdx(chunkPtr)); } } ChunkOrderingEntry[] tmp = map.values().toArray( new ChunkOrderingEntry[map.size()]); Arrays.sort(tmp); ChunkKey[] out = new ChunkKey[tmp.length]; for (int i = 0; i < tmp.length; i++) out[i] = tmp[i].key; return Arrays.asList(out); }
if (!obj.isInPack()) return; if (!obj.isReferenced()) info.getTipListBuilder().addObjectName(obj.name());
if (!obj.isInPack()) return; if (!obj.isReferenced()) info.getTipListBuilder().addObjectName(obj.name());
@Override protected void onBeginRefDelta(long deltaPos, AnyObjectId baseId, long inflatedSize) throws IOException { // Try to get the base type, but only if it was seen before in this // pack stream. If not assume worst-case of BLOB type. // int typeCode; DhtInfo baseInfo = objectMap.get(baseId); if (baseInfo != null && baseInfo.isInPack()) { typeCode = baseInfo.getType(); currType = typeCode; } else { typeCode = OBJ_BLOB; currType = -1; } ChunkFormatter w = begin(typeCode); if (!w.refDelta(inflatedSize, baseId)) { endChunk(typeCode); w = begin(typeCode); if (!w.refDelta(inflatedSize, baseId)) throw panicCannotInsert(); } currDataPos = w.position(); currPackedSize = 0; currInflatedSize = inflatedSize; objStreamPos.add(deltaPos); }
@Override protected void onBeginRefDelta(long deltaPos, AnyObjectId baseId, long inflatedSize) throws IOException { // Try to get the base type, but only if it was seen before in this // pack stream. If not assume worst-case of BLOB type. // int typeCode; DhtInfo baseInfo = objectMap.get(baseId); if (baseInfo != null && baseInfo.isInPack()) { typeCode = baseInfo.getType(); currType = typeCode; } else { typeCode = OBJ_BLOB; currType = -1; } ChunkFormatter w = begin(typeCode); if (!w.refDelta(inflatedSize, baseId)) { endChunk(typeCode); w = begin(typeCode); if (!w.refDelta(inflatedSize, baseId)) throw panicCannotInsert(); } currDataPos = w.position(); currPackedSize = 0; currInflatedSize = inflatedSize; objStreamPos.add(deltaPos); }
@Override protected PackedObjectInfo newInfo(AnyObjectId id, UnresolvedDelta delta, ObjectId baseId) { DhtInfo obj = objectMap.addIfAbsent(new DhtInfo(id)); if (delta != null) { DhtDelta d = (DhtDelta) delta; obj.chunkPtr = d.chunkPtr; obj.packedSize = d.packedSize; obj.inflatedSize = d.inflatedSize; obj.base = baseId; obj.setType(d.getType()); if (d.isFragmented()) obj.setFragmented(); } return obj; }
ObjectInfo info(ChunkKey chunkKey) { GitStore.ObjectInfo.Builder b = GitStore.ObjectInfo.newBuilder(); b.setObjectType(GitStore.ObjectInfo.ObjectType.valueOf(getType())); b.setOffset(offsetOf(chunkPtr)); b.setPackedSize(packedSize); b.setInflatedSize(inflatedSize); if (base != null) { byte[] t = new byte[Constants.OBJECT_ID_LENGTH]; base.copyRawTo(t, 0); b.setDeltaBase(ByteString.copyFrom(t)); } if (isFragmented()) b.setIsFragmented(true); return new ObjectInfo(chunkKey, b.build()); } }
@Override protected PackedObjectInfo newInfo(AnyObjectId id, UnresolvedDelta delta, ObjectId baseId) { DhtInfo obj = objectMap.addIfAbsent(new DhtInfo(id)); if (delta != null) { DhtDelta d = (DhtDelta) delta; obj.chunkPtr = d.chunkPtr; obj.packedSize = d.packedSize; obj.inflatedSize = d.inflatedSize; obj.base = baseId; obj.setType(d.getType()); if (d.isFragmented()) obj.setFragmented(); } return obj; }
boolean isFragmented() { return (getCRC() & FRAGMENTED) != 0; }
boolean isReferenced() { return (getCRC() & REFERENCED) != 0; }
ObjectInfo info(ChunkKey chunkKey) { GitStore.ObjectInfo.Builder b = GitStore.ObjectInfo.newBuilder(); b.setObjectType(GitStore.ObjectInfo.ObjectType.valueOf(getType())); b.setOffset(offsetOf(chunkPtr)); b.setPackedSize(packedSize); b.setInflatedSize(inflatedSize); if (base != null) { byte[] t = new byte[Constants.OBJECT_ID_LENGTH]; base.copyRawTo(t, 0); b.setDeltaBase(ByteString.copyFrom(t)); } if (isFragmented()) b.setIsFragmented(true); return new ObjectInfo(chunkKey, b.build()); } }
boolean isReferenced() { return (getCRC() & REFERENCED) != 0; }
int getType() { return getCRC() & 7; }
boolean isFragmented() { return (getCRC() & FRAGMENTED) != 0; }