shithub: furgit

Download patch

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
--