diff options
| author | 2026-02-20 12:49:27 +0800 | |
|---|---|---|
| committer | 2026-02-20 12:57:31 +0800 | |
| commit | 7cb1995e2b431a900e23958e23565da7922e976a (patch) | |
| tree | 57f90d1f84fa1ce15478630e2a957eee0b480e44 | |
| parent | Revert "delta: Fix indentation" (diff) | |
| signature | No signature | |
Revert "delta, packed: Use xxhash instead of murmurhash2"
This reverts commit ac400226b0b622aae21b09cb6c83f07924647d0d.
| -rw-r--r-- | delta_write_deltify.go | 41 | ||||
| -rw-r--r-- | delta_write_encode.go | 2 | ||||
| -rw-r--r-- | delta_write_select.go | 2 | ||||
| -rw-r--r-- | packed_write_pack.go | 6 |
4 files changed, 23 insertions, 28 deletions
diff --git a/delta_write_deltify.go b/delta_write_deltify.go index 4aac3fb8..cd3d6aa8 100644 --- a/delta_write_deltify.go +++ b/delta_write_deltify.go @@ -3,7 +3,7 @@ package furgit import ( "bytes" - "github.com/cespare/xxhash/v2" + "codeberg.org/lindenii/furgit/internal/murmurhash2" ) const ( @@ -62,7 +62,7 @@ var deltaGearTab = [...]uint32{ type deltaBlock struct { length int offset int - hash uint64 + hash uint32 } type deltaTable struct { @@ -82,7 +82,7 @@ type deltaInstruction struct { data []byte } -func deltify(base, target []byte, seed uint64) ([]deltaInstruction, error) { +func deltify(base, target []byte, seed uint32) ([]deltaInstruction, error) { if base == nil { base = []byte{} } @@ -96,7 +96,7 @@ func deltify(base, target []byte, seed uint64) ([]deltaInstruction, error) { return deltifyMemMem(target, 0, len(target), seed, dt, base, 0, len(base)) } -func deltifyMemMem(target []byte, fileoffset, filesize int, seed uint64, dt *deltaTable, base []byte, baseOffset0, baseSize int) ([]deltaInstruction, error) { +func deltifyMemMem(target []byte, fileoffset, filesize int, seed uint32, dt *deltaTable, base []byte, baseOffset0, baseSize int) ([]deltaInstruction, error) { const allocChunkSize = 64 instr := make([]deltaInstruction, 0, allocChunkSize) offset0 := fileoffset @@ -141,7 +141,7 @@ func deltifyMemMem(target []byte, fileoffset, filesize int, seed uint64, dt *del return instr, nil } -func deltaTableInitMem(data []byte, fileoffset, filesize int, seed uint64) (*deltaTable, error) { +func deltaTableInitMem(data []byte, fileoffset, filesize int, seed uint32) (*deltaTable, error) { dt := &deltaTable{ nalloc: 128, size: 128, @@ -164,13 +164,8 @@ func deltaTableInitMem(data []byte, fileoffset, filesize int, seed uint64) (*del return dt, nil } -func deltaHashBlock(p []byte, seed uint64) uint64 { - if seed == 0 { - return xxhash.Sum64(p) - } - d := xxhash.NewWithSeed(seed) - _, _ = d.Write(p) - return d.Sum64() +func deltaHashBlock(p []byte, seed uint32) uint32 { + return murmurhash2.Sum32(p, seed) } func deltaNextBlockLen(data []byte, fileoffset, filesize int) int { @@ -193,7 +188,7 @@ func deltaNextBlockLen(data []byte, fileoffset, filesize int) int { return p - fileoffset } -func (dt *deltaTable) addBlock(data []byte, offset0, length, offset int, h uint64) error { +func (dt *deltaTable) addBlock(data []byte, offset0, length, offset int, h uint32) error { if length == 0 { return nil } @@ -205,22 +200,22 @@ func (dt *deltaTable) addBlock(data []byte, offset0, length, offset int, h uint6 return nil } dt.offs[idx] = uint32(dt.nblocks + 1) - dt.blocks[dt.nblocks] = deltaBlock{ - length: length, - offset: offset, - hash: h, - } + dt.blocks[dt.nblocks] = deltaBlock{ + length: length, + offset: offset, + hash: h, + } dt.nblocks++ dt.len++ return nil } -func (dt *deltaTable) lookupBlock(chunk []byte, length int, seed uint64, base []byte, baseOffset0 int) *deltaBlock { +func (dt *deltaTable) lookupBlock(chunk []byte, length int, seed uint32, base []byte, baseOffset0 int) *deltaBlock { if dt == nil || dt.size == 0 { return nil } h := deltaHashBlock(chunk, seed) - for i := int(h % uint64(dt.size)); dt.offs[i] != 0; i = (i + 1) % dt.size { + for i := int(h % uint32(dt.size)); dt.offs[i] != 0; i = (i + 1) % dt.size { block := &dt.blocks[dt.offs[i]-1] if block.hash != h || block.length != length { continue @@ -236,11 +231,11 @@ func (dt *deltaTable) lookupBlock(chunk []byte, length int, seed uint64, base [] return nil } -func (dt *deltaTable) lookupSlot(data []byte, offset0, offset, length int, h uint64) (int, bool) { +func (dt *deltaTable) lookupSlot(data []byte, offset0, offset, length int, h uint32) (int, bool) { if dt == nil || dt.size == 0 { return 0, false } - for i := int(h % uint64(dt.size)); ; i = (i + 1) % dt.size { + for i := int(h % uint32(dt.size)); ; i = (i + 1) % dt.size { if dt.offs[i] == 0 { return i, false } @@ -278,7 +273,7 @@ func (dt *deltaTable) resize() error { dt.offs = make([]uint32, dt.size) for i := 0; i < dt.nblocks; i++ { block := &dt.blocks[i] - idx := int(block.hash % uint64(dt.size)) + idx := int(block.hash % uint32(dt.size)) for dt.offs[idx] != 0 { idx = (idx + 1) % dt.size } diff --git a/delta_write_encode.go b/delta_write_encode.go index 9e5e4e72..66c77052 100644 --- a/delta_write_encode.go +++ b/delta_write_encode.go @@ -89,7 +89,7 @@ func deltaEncode(baseSize, resultSize int, instr []deltaInstruction) ([]byte, er return out, nil } -func deltaTry(base, target []byte, seed uint64, minSavings int) ([]byte, bool) { +func deltaTry(base, target []byte, seed uint32, minSavings int) ([]byte, bool) { if minSavings < 0 { minSavings = 0 } diff --git a/delta_write_select.go b/delta_write_select.go index 9113b80f..ad8e0d0e 100644 --- a/delta_write_select.go +++ b/delta_write_select.go @@ -26,7 +26,7 @@ func (ctx *deltaContext) addCandidate(obj *objectToPack) { } } -func pickDeltaBase(ctx *deltaContext, obj *objectToPack, seed uint64, minSavings, maxDepth int) (*objectToPack, []byte) { +func pickDeltaBase(ctx *deltaContext, obj *objectToPack, seed uint32, minSavings, maxDepth int) (*objectToPack, []byte) { if ctx == nil || len(ctx.candidates) == 0 { return nil, nil } diff --git a/packed_write_pack.go b/packed_write_pack.go index 7e79b2ef..e6304e64 100644 --- a/packed_write_pack.go +++ b/packed_write_pack.go @@ -306,14 +306,14 @@ func (repo *Repository) packWrite(w io.Writer, objects []Hash, opts packWriteOpt } var dctx deltaContext - var deltaSeed uint64 + var deltaSeed uint32 if opts.EnableDeltas { dctx.window = defaultDeltaWindow - var seedBytes [8]byte + var seedBytes [4]byte if _, err := rand.Read(seedBytes[:]); err != nil { return Hash{}, err } - deltaSeed = binary.LittleEndian.Uint64(seedBytes[:]) + deltaSeed = binary.LittleEndian.Uint32(seedBytes[:]) } for _, id := range objects { |
