aboutsummaryrefslogtreecommitdiff
path: root/packed_write_pack.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-02-20 12:51:16 +0800
committerGravatar Runxi Yu2026-02-20 12:57:31 +0800
commit9730560a82426408243cb15349f6955a4ba34f60 (patch)
tree00cfcfc75db7b1de795b822f70246abd40199b86 /packed_write_pack.go
parentRevert "packed: Use random delta seed" (diff)
signatureNo signature
Revert "packed: Write packs with deltas"
This reverts commit 17c9aee0e781026353ead4ac749a3ae89c83d007.
Diffstat (limited to 'packed_write_pack.go')
-rw-r--r--packed_write_pack.go123
1 files changed, 13 insertions, 110 deletions
diff --git a/packed_write_pack.go b/packed_write_pack.go
index f31f42d1..a0baba13 100644
--- a/packed_write_pack.go
+++ b/packed_write_pack.go
@@ -104,84 +104,19 @@ func (pw *packWriter) WriteObject(ty ObjectType, body []byte) error {
}
func (pw *packWriter) WriteOfsDelta(baseOffset uint64, baseSize, resultSize int, delta []byte) error {
- if pw == nil || !pw.wroteHeader {
- return ErrInvalidObject
- }
- if baseSize < 0 || resultSize < 0 {
- return ErrInvalidObject
- }
- if delta == nil {
- delta = []byte{}
- }
- deltaSize := len(delta)
- if deltaSize <= 0 {
- return ErrInvalidObject
- }
- currentOffset := pw.bytesWritten
- if baseOffset >= currentOffset {
- return ErrInvalidObject
- }
- dist := currentOffset - baseOffset
-
- hdr, err := packHeaderEncode(ObjectTypeOfsDelta, deltaSize)
- if err != nil {
- return err
- }
- if err := pw.writePacked(hdr); err != nil {
- return err
- }
- ofs, err := packOfsEncode(dist)
- if err != nil {
- return err
- }
- if err := pw.writePacked(ofs); err != nil {
- return err
- }
-
- zw := zlib.NewWriter(&packHashWriter{pw: pw})
- if _, err := zw.Write(delta); err != nil {
- _ = zw.Close()
- return err
- }
- return zw.Close()
+ _ = baseOffset
+ _ = baseSize
+ _ = resultSize
+ _ = delta
+ return errPackDeltaUnimplemented
}
func (pw *packWriter) WriteRefDelta(base Hash, baseSize, resultSize int, delta []byte) error {
- if pw == nil || !pw.wroteHeader {
- return ErrInvalidObject
- }
- if baseSize < 0 || resultSize < 0 {
- return ErrInvalidObject
- }
- if delta == nil {
- delta = []byte{}
- }
- deltaSize := len(delta)
- if deltaSize <= 0 {
- return ErrInvalidObject
- }
- baseBytes := base.Bytes()
- if len(baseBytes) == 0 {
- return ErrInvalidObject
- }
-
- hdr, err := packHeaderEncode(ObjectTypeRefDelta, deltaSize)
- if err != nil {
- return err
- }
- if err := pw.writePacked(hdr); err != nil {
- return err
- }
- if err := pw.writePacked(baseBytes); err != nil {
- return err
- }
-
- zw := zlib.NewWriter(&packHashWriter{pw: pw})
- if _, err := zw.Write(delta); err != nil {
- _ = zw.Close()
- return err
- }
- return zw.Close()
+ _ = base
+ _ = baseSize
+ _ = resultSize
+ _ = delta
+ return errPackDeltaUnimplemented
}
func (pw *packWriter) Close() (Hash, error) {
@@ -291,7 +226,7 @@ func (repo *Repository) packWrite(w io.Writer, objects []Hash, opts packWriteOpt
if repo == nil {
return Hash{}, ErrInvalidObject
}
- if opts.EnableThinPack {
+ if opts.EnableDeltas || opts.EnableThinPack {
return Hash{}, errPackDeltaUnimplemented
}
if len(objects) > int(^uint32(0)) {
@@ -306,45 +241,13 @@ func (repo *Repository) packWrite(w io.Writer, objects []Hash, opts packWriteOpt
return Hash{}, err
}
- var dctx deltaContext
- if opts.EnableDeltas {
- dctx.window = defaultDeltaWindow
- }
- deltaSeed := uint32(0)
-
for _, id := range objects {
ty, body, err := repo.ReadObjectTypeRaw(id)
if err != nil {
return Hash{}, err
}
- obj := &objectToPack{
- id: id,
- ty: ty,
- body: body,
- }
- startOffset := pw.bytesWritten
- wroteDelta := false
-
- if opts.EnableDeltas && ty == ObjectTypeBlob {
- base, delta := pickDeltaBase(&dctx, obj, deltaSeed, opts.MinDeltaSavings, opts.MaxDeltaDepth)
- if base != nil && delta != nil {
- if err := pw.WriteOfsDelta(base.offset, len(base.body), len(body), delta); err != nil {
- return Hash{}, err
- }
- wroteDelta = true
- obj.deltaDepth = base.deltaDepth + 1
- }
- }
- if !wroteDelta {
- if err := pw.WriteObject(ty, body); err != nil {
- return Hash{}, err
- }
- obj.deltaDepth = 0
- }
- obj.offset = startOffset
-
- if opts.EnableDeltas && ty == ObjectTypeBlob {
- dctx.addCandidate(obj)
+ if err := pw.WriteObject(ty, body); err != nil {
+ return Hash{}, err
}
}