From 73e602a5c2c766caba59948e91c11122653705ec Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Tue, 10 Mar 2026 13:30:48 +0800 Subject: commitgraph: Move out of format/ --- format/commitgraph/read/bloom.go | 114 --------------------------------------- 1 file changed, 114 deletions(-) delete mode 100644 format/commitgraph/read/bloom.go (limited to 'format/commitgraph/read/bloom.go') diff --git a/format/commitgraph/read/bloom.go b/format/commitgraph/read/bloom.go deleted file mode 100644 index e00b800f..00000000 --- a/format/commitgraph/read/bloom.go +++ /dev/null @@ -1,114 +0,0 @@ -package read - -import ( - "encoding/binary" - - "codeberg.org/lindenii/furgit/format/commitgraph/bloom" - "codeberg.org/lindenii/furgit/internal/intconv" -) - -// HasBloom reports whether any layer has changed-path Bloom data. -func (reader *Reader) HasBloom() bool { - for i := range reader.layers { - layer := &reader.layers[i] - if layer.chunkBloomIndex != nil && layer.chunkBloomData != nil && layer.bloomSettings != nil { - return true - } - } - - return false -} - -// BloomVersion returns the changed-path Bloom hash version, or 0 if absent. -func (reader *Reader) BloomVersion() uint8 { - for i := len(reader.layers) - 1; i >= 0; i-- { - layer := &reader.layers[i] - if layer.bloomSettings != nil { - version, err := intconv.Uint32ToUint8(layer.bloomSettings.HashVersion) - if err != nil { - return 0 - } - - return version - } - } - - return 0 -} - -// BloomFilterAt returns one commit's changed-path Bloom filter. -// -// Returns BloomUnavailableError when this commit graph has no Bloom data. -func (reader *Reader) BloomFilterAt(pos Position) (*bloom.Filter, error) { - layer, err := reader.layerByPosition(pos) - if err != nil { - return nil, err - } - - if layer.chunkBloomIndex == nil || layer.chunkBloomData == nil || layer.bloomSettings == nil { - return nil, &BloomUnavailableError{Pos: pos} - } - - start, end, err := bloomRange(layer, pos.Index) - if err != nil { - return nil, err - } - - filter := bloom.NewFilter( - layer.chunkBloomData[bloom.DataHeaderSize+start:bloom.DataHeaderSize+end], - *layer.bloomSettings, - ) - - return filter, nil -} - -func bloomRange(layer *layer, commitIndex uint32) (int, int, error) { - off64 := uint64(commitIndex) * 4 - - off, err := intconv.Uint64ToInt(off64) - if err != nil { - return 0, 0, err - } - - end := binary.BigEndian.Uint32(layer.chunkBloomIndex[off : off+4]) - - var start uint32 - - if commitIndex > 0 { - prevOff64 := uint64(commitIndex-1) * 4 - - prevOff, err := intconv.Uint64ToInt(prevOff64) - if err != nil { - return 0, 0, err - } - - start = binary.BigEndian.Uint32(layer.chunkBloomIndex[prevOff : prevOff+4]) - } - - if end < start { - return 0, 0, &MalformedError{Path: layer.path, Reason: "invalid BIDX range"} - } - - bdatLen := len(layer.chunkBloomData) - bloom.DataHeaderSize - - bdatLenU32, err := intconv.IntToUint32(bdatLen) - if err != nil { - return 0, 0, err - } - - if end > bdatLenU32 { - return 0, 0, &MalformedError{Path: layer.path, Reason: "BIDX range out of BDAT bounds"} - } - - startInt, err := intconv.Uint64ToInt(uint64(start)) - if err != nil { - return 0, 0, err - } - - endInt, err := intconv.Uint64ToInt(uint64(end)) - if err != nil { - return 0, 0, err - } - - return startInt, endInt, nil -} -- cgit v1.3.1-10-gc9f91