ref: 048d36efe996b3918b7a33ec971e7a26d4a80ff4
parent: 33a57ddd6fd9fbe4c01afa1fc70051a91b6d81fc
author: Runxi Yu <runxiyu@umich.edu>
date: Mon Mar 30 14:11:59 EDT 2026
object/store/dual: Satisfy WriterQuarantiner
--- a/object/store/dual/dual.go
+++ b/object/store/dual/dual.go
@@ -32,4 +32,5 @@
_ objectstore.PackWriter = (*Dual)(nil)
_ objectstore.ObjectQuarantiner = (*Dual)(nil)
_ objectstore.PackQuarantiner = (*Dual)(nil)
+ _ objectstore.WriterQuarantiner = (*Dual)(nil)
)
--- a/object/store/dual/dual_test.go
+++ b/object/store/dual/dual_test.go
@@ -117,14 +117,14 @@
repo := testgit.NewRepo(t, testgit.RepoOptions{ObjectFormat: algo, Bare: true})store := newDualStore(t, repo, algo)
- quarantiner, ok := any(store).(objectstore.PackQuarantiner)
+ quarantiner, ok := any(store).(objectstore.WriterQuarantiner)
if !ok {- t.Fatal("dual does not implement PackQuarantiner")+ t.Fatal("dual does not implement WriterQuarantiner")}
- quarantine, err := quarantiner.BeginPackQuarantine(objectstore.PackQuarantineOptions{})+ quarantine, err := quarantiner.BeginQuarantine(objectstore.QuarantineOptions{}) if err != nil {- t.Fatalf("BeginPackQuarantine: %v", err)+ t.Fatalf("BeginQuarantine: %v", err)}
err = quarantine.WritePack(bytes.NewReader(packBytes), objectstore.PackWriteOptions{RequireTrailingEOF: true})@@ -219,18 +219,13 @@
repo := testgit.NewRepo(t, testgit.RepoOptions{ObjectFormat: algo, Bare: true})store := newDualStore(t, repo, algo)
- quarantiner := any(store).(objectstore.ObjectQuarantiner)
- quarantine, err := quarantiner.BeginObjectQuarantine(objectstore.ObjectQuarantineOptions{})+ quarantiner := any(store).(objectstore.WriterQuarantiner)
+ quarantine, err := quarantiner.BeginQuarantine(objectstore.QuarantineOptions{}) if err != nil {- t.Fatalf("BeginObjectQuarantine: %v", err)+ t.Fatalf("BeginQuarantine: %v", err)}
- packQ, ok := any(quarantine).(objectstore.PackQuarantine)
- if !ok {- t.Fatal("object quarantine does not also implement PackQuarantine")- }
-
- err = packQ.WritePack(bytes.NewReader(packBytes), objectstore.PackWriteOptions{RequireTrailingEOF: true})+ err = quarantine.WritePack(bytes.NewReader(packBytes), objectstore.PackWriteOptions{RequireTrailingEOF: true}) if err != nil { t.Fatalf("quarantine.WritePack: %v", err)}
--- a/object/store/dual/quarantine.go
+++ b/object/store/dual/quarantine.go
@@ -19,6 +19,7 @@
var (
_ objectstore.ObjectQuarantine = (*quarantine)(nil)
_ objectstore.PackQuarantine = (*quarantine)(nil)
+ _ objectstore.WriterQuarantine = (*quarantine)(nil)
)
func newQuarantine(
--- a/object/store/dual/quarantine_begin.go
+++ b/object/store/dual/quarantine_begin.go
@@ -2,14 +2,21 @@
import objectstore "codeberg.org/lindenii/furgit/object/store"
-// TODO: This doesn't actually make sense. We need a combined quarantine.
+// BeginQuarantine creates one coordinated dual quarantine spanning both stores.
+//
+// Labels: Deps-Borrowed, Life-Parent, Close-No.
+func (dual *Dual) BeginQuarantine(opts objectstore.QuarantineOptions) (objectstore.WriterQuarantine, error) {+ return dual.beginQuarantine(opts)
+}
// BeginObjectQuarantine creates one coordinated dual quarantine spanning both
// stores and returns it as an object-wise quarantine.
//
// Labels: Deps-Borrowed, Life-Parent, Close-No.
-func (dual *Dual) BeginObjectQuarantine(_ objectstore.ObjectQuarantineOptions) (objectstore.ObjectQuarantine, error) {- quarantine, err := dual.beginQuarantine()
+func (dual *Dual) BeginObjectQuarantine(opts objectstore.ObjectQuarantineOptions) (objectstore.ObjectQuarantine, error) {+ quarantine, err := dual.beginQuarantine(objectstore.QuarantineOptions{+ Object: opts,
+ })
if err != nil {return nil, err
}
@@ -21,8 +28,10 @@
// stores and returns it as a pack-wise quarantine.
//
// Labels: Deps-Borrowed, Life-Parent, Close-No.
-func (dual *Dual) BeginPackQuarantine(_ objectstore.PackQuarantineOptions) (objectstore.PackQuarantine, error) {- quarantine, err := dual.beginQuarantine()
+func (dual *Dual) BeginPackQuarantine(opts objectstore.PackQuarantineOptions) (objectstore.PackQuarantine, error) {+ quarantine, err := dual.beginQuarantine(objectstore.QuarantineOptions{+ Pack: opts,
+ })
if err != nil {return nil, err
}
@@ -30,13 +39,13 @@
return quarantine, nil
}
-func (dual *Dual) beginQuarantine() (*quarantine, error) {- objectQ, err := dual.object.BeginObjectQuarantine(objectstore.ObjectQuarantineOptions{})+func (dual *Dual) beginQuarantine(opts objectstore.QuarantineOptions) (*quarantine, error) {+ objectQ, err := dual.object.BeginObjectQuarantine(opts.Object)
if err != nil {return nil, err
}
- packQ, err := dual.pack.BeginPackQuarantine(objectstore.PackQuarantineOptions{})+ packQ, err := dual.pack.BeginPackQuarantine(opts.Pack)
if err != nil {_ = objectQ.Discard()
--
⑨