From f50ac551c56569e109a8350f27dab53bb2378d4d Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 29 Mar 2026 15:43:50 +0000 Subject: *: Remove Close from object/ref store interfaces At places where you own the object, you should have the literal implementation with Close. If you're using it via the interface, then you probably don't own that store, and you shouldn't be closing it. Thanks to Michael Muré from git-bug for this point. --- TODO | 3 --- network/receivepack/service/run_hook.go | 4 ---- object/store/reading.go | 5 ----- ref/store/reading.go | 6 ------ repository/close.go | 14 -------------- repository/objects.go | 2 +- repository/refs.go | 2 +- 7 files changed, 2 insertions(+), 34 deletions(-) diff --git a/TODO b/TODO index aa4eced5..eb840470 100644 --- a/TODO +++ b/TODO @@ -60,6 +60,3 @@ Unstructured ones try to resolve that probably * Needs much better diff API * revwalk/log - - -* Does Close belong in interfaces at all? diff --git a/network/receivepack/service/run_hook.go b/network/receivepack/service/run_hook.go index ce8f8b7e..f08cc337 100644 --- a/network/receivepack/service/run_hook.go +++ b/network/receivepack/service/run_hook.go @@ -96,10 +96,6 @@ func (service *Service) runHook( } defer func() { - if quarantineObjectsStore != nil { - _ = quarantineObjectsStore.Close() - } - if quarantinePackedStore != nil { _ = quarantinePackedStore.Close() } diff --git a/object/store/reading.go b/object/store/reading.go index d27001bf..0e233462 100644 --- a/object/store/reading.go +++ b/object/store/reading.go @@ -52,9 +52,4 @@ type ReadingStore interface { // // Backends without dynamic discovery should do nothing and return nil. Refresh() error - - // Close releases resources associated with the backend. - // - // Labels: MT-Unsafe. - Close() error } diff --git a/ref/store/reading.go b/ref/store/reading.go index 99f8278c..07814c00 100644 --- a/ref/store/reading.go +++ b/ref/store/reading.go @@ -31,10 +31,4 @@ type ReadingStore interface { // // Labels: Life-Parent. List(pattern string) ([]ref.Ref, error) - // Close releases resources associated with the store. - // - // Transactions and batches borrowing the store are invalid after Close. - // - // Labels: MT-Unsafe. - Close() error } diff --git a/repository/close.go b/repository/close.go index 5d728c5b..c1261821 100644 --- a/repository/close.go +++ b/repository/close.go @@ -8,20 +8,6 @@ import "errors" func (repo *Repository) Close() error { var errs []error - if repo.refs != nil { - err := repo.refs.Close() - if err != nil { - errs = append(errs, err) - } - } - - if repo.objects != nil { - err := repo.objects.Close() - if err != nil { - errs = append(errs, err) - } - } - if repo.commitGraph != nil { err := repo.commitGraph.Close() if err != nil { diff --git a/repository/objects.go b/repository/objects.go index 62170514..2e63ad65 100644 --- a/repository/objects.go +++ b/repository/objects.go @@ -81,7 +81,7 @@ func openObjectStore( // bytes, or streamed object contents. Callers who want typed object values // should usually prefer [Repository.Fetcher]. // -// Labels: Life-Parent, Close-No. +// Labels: Life-Parent. // //nolint:ireturn func (repo *Repository) Objects() objectstore.ReadingStore { diff --git a/repository/refs.go b/repository/refs.go index 0403e001..17816168 100644 --- a/repository/refs.go +++ b/repository/refs.go @@ -8,7 +8,7 @@ import refstore "codeberg.org/lindenii/furgit/ref/store" // A common pattern is to resolve a reference first and then pass the resulting // object ID to [Repository.Fetcher] or [Repository.Objects]. // -// Labels: Life-Parent, Close-No. +// Labels: Life-Parent. // //nolint:ireturn func (repo *Repository) Refs() refstore.ReadWriteStore { -- cgit v1.3.1-10-gc9f91