aboutsummaryrefslogtreecommitdiff
path: root/format/pack/ingest
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-08 02:26:02 +0800
committerGravatar Runxi Yu2026-03-08 02:26:30 +0800
commitb252c04f6b257b32fc6457b7f58cc1bef91eb8d5 (patch)
treee1beaf64eb1ceaede977fa8b6a06eb964eb39ecf /format/pack/ingest
parentreceivepack: Flush I/O (diff)
signatureNo signature
format/pack/ingest: Looks like that's not actually the consumed we want
Diffstat (limited to 'format/pack/ingest')
-rw-r--r--format/pack/ingest/drain.go22
-rw-r--r--format/pack/ingest/entry.go6
2 files changed, 16 insertions, 12 deletions
diff --git a/format/pack/ingest/drain.go b/format/pack/ingest/drain.go
index 671423fb..13e276bd 100644
--- a/format/pack/ingest/drain.go
+++ b/format/pack/ingest/drain.go
@@ -12,13 +12,13 @@ import (
)
// drainEntryPayload inflates one entry payload from stream and returns
-// (inflatedLength, consumedInput, oidForBaseEntry).
-func drainEntryPayload(state *ingestState, record objectRecord) (int64, uint64, objectid.ObjectID, error) {
+// (inflatedLength, oidForBaseEntry).
+func drainEntryPayload(state *ingestState, record objectRecord) (int64, objectid.ObjectID, error) {
var zero objectid.ObjectID
reader, err := zlib.NewReader(state.stream)
if err != nil {
- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("open zlib stream: %v", err)}
+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("open zlib stream: %v", err)}
}
defer func() { _ = reader.Close() }()
@@ -28,41 +28,41 @@ func drainEntryPayload(state *ingestState, record objectRecord) (int64, uint64,
if packfmt.IsBaseObjectType(record.packedType) {
header, ok := objectheader.Encode(record.packedType, record.declaredSize)
if !ok {
- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "encode object header"}
+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "encode object header"}
}
hashImpl, err := state.algo.New()
if err != nil {
- return 0, 0, zero, err
+ return 0, zero, err
}
_, _ = hashImpl.Write(header)
n, err := io.Copy(hashImpl, reader)
if err != nil {
- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate base object: %v", err)}
+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate base object: %v", err)}
}
total = n
oid, err := objectid.FromBytes(state.algo, hashImpl.Sum(nil))
if err != nil {
- return 0, 0, zero, err
+ return 0, zero, err
}
- return total, reader.InputConsumed(), oid, nil
+ return total, oid, nil
}
if record.packedType == objecttype.TypeOfsDelta || record.packedType == objecttype.TypeRefDelta {
n, err := io.Copy(io.Discard, reader)
if err != nil {
- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate delta payload: %v", err)}
+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: fmt.Sprintf("inflate delta payload: %v", err)}
}
total = n
- return total, reader.InputConsumed(), zero, nil
+ return total, zero, nil
}
- return 0, 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "unsupported payload type"}
+ return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "unsupported payload type"}
}
diff --git a/format/pack/ingest/entry.go b/format/pack/ingest/entry.go
index f89ad4c8..5d22ada2 100644
--- a/format/pack/ingest/entry.go
+++ b/format/pack/ingest/entry.go
@@ -16,11 +16,15 @@ func scanOneEntry(state *ingestState, startOffset uint64) (uint64, error) {
return 0, err
}
- contentLen, consumedInput, oid, err := drainEntryPayload(state, record)
+ payloadStartConsumed := state.stream.consumed
+
+ contentLen, oid, err := drainEntryPayload(state, record)
if err != nil {
return 0, err
}
+ consumedInput := state.stream.consumed - payloadStartConsumed
+
if contentLen != record.declaredSize {
return 0, &MalformedPackEntryError{
Offset: startOffset,