ref: 1ac6099100ed61a1e49766f190deae8b426a1ea6
parent: d2d3ce370816d178cc0beb4271123ee37d07657c
author: Runxi Yu <runxiyu@umich.edu>
date: Sun Mar 22 18:52:35 EDT 2026
commitgraph: Tighten docs and use a value-ish Filter return
--- a/commitgraph/bloom/filter.go
+++ b/commitgraph/bloom/filter.go
@@ -15,8 +15,8 @@
}
// NewFilter constructs one query-ready bloom filter from raw data/settings.
-func NewFilter(data []byte, settings Settings) *Filter {- out := &Filter{+func NewFilter(data []byte, settings Settings) Filter {+ return Filter{Data: data,
HashVersion: settings.HashVersion,
NumHashes: settings.NumHashes,
@@ -23,6 +23,4 @@
BitsPerEntry: settings.BitsPerEntry,
MaxChangePaths: settings.MaxChangePaths,
}
-
- return out
}
--- a/commitgraph/read/bloom.go
+++ b/commitgraph/read/bloom.go
@@ -38,20 +38,23 @@
// BloomFilterAt returns one commit's changed-path Bloom filter.
//
+// The returned filter borrows reader-owned mapped commit-graph data and is
+// only valid until the reader is closed.
+//
// Returns BloomUnavailableError when this commit graph has no Bloom data.
-func (reader *Reader) BloomFilterAt(pos Position) (*bloom.Filter, error) {+func (reader *Reader) BloomFilterAt(pos Position) (bloom.Filter, error) {layer, err := reader.layerByPosition(pos)
if err != nil {- return nil, err
+ return bloom.Filter{}, err}
if layer.chunkBloomIndex == nil || layer.chunkBloomData == nil || layer.bloomSettings == nil {- return nil, &BloomUnavailableError{Pos: pos}+ return bloom.Filter{}, &BloomUnavailableError{Pos: pos}}
start, end, err := bloomRange(layer, pos.Index)
if err != nil {- return nil, err
+ return bloom.Filter{}, err}
filter := bloom.NewFilter(
--- a/commitgraph/read/close.go
+++ b/commitgraph/read/close.go
@@ -1,6 +1,8 @@
package read
// Close releases all mapped commit-graph files.
+//
+// Repeated calls to Close are undefined behavior.
func (reader *Reader) Close() error {var closeErr error
--- a/commitgraph/read/open.go
+++ b/commitgraph/read/open.go
@@ -8,6 +8,8 @@
)
// Open opens commit-graph data from one objects root.
+//
+// Open borrows root during construction and does not close it.
func Open(root *os.Root, algo objectid.Algorithm, mode OpenMode) (*Reader, error) { if algo.Size() == 0 {return nil, objectid.ErrInvalidAlgorithm
--- a/commitgraph/read/read_test.go
+++ b/commitgraph/read/read_test.go
@@ -282,7 +282,7 @@
return out
}
-func assertChangedPathsBloomPositive(tb testing.TB, testRepo *testgit.TestRepo, filter *bloom.Filter, commitID objectid.ObjectID) {+func assertChangedPathsBloomPositive(tb testing.TB, testRepo *testgit.TestRepo, filter bloom.Filter, commitID objectid.ObjectID) {tb.Helper()
changedPaths := testRepo.Run(tb, "diff-tree", "--no-commit-id", "--name-only", "-r", "--root", commitID.String())
--- a/commitgraph/read/reader.go
+++ b/commitgraph/read/reader.go
@@ -5,6 +5,8 @@
// Reader provides read-only access to one mmap-backed commit-graph snapshot.
//
// It is safe for concurrent read-only queries.
+// Values returned by Reader methods are only valid until the reader is closed
+// when explicitly documented on that method.
type Reader struct {algo objectid.Algorithm
hashVersion uint8
--
⑨