forked from TrueCloudLab/restic
archiver: replace most uses of restic.Repository
This commit is contained in:
parent
864995271e
commit
6ca12c1b4a
4 changed files with 28 additions and 18 deletions
|
@ -64,9 +64,19 @@ func (s *ItemStats) Add(other ItemStats) {
|
|||
s.TreeSizeInRepo += other.TreeSizeInRepo
|
||||
}
|
||||
|
||||
type archiverRepo interface {
|
||||
restic.Loader
|
||||
restic.BlobSaver
|
||||
restic.SaverUnpacked
|
||||
|
||||
Config() restic.Config
|
||||
StartPackUploader(ctx context.Context, wg *errgroup.Group)
|
||||
Flush(ctx context.Context) error
|
||||
}
|
||||
|
||||
// Archiver saves a directory structure to the repo.
|
||||
type Archiver struct {
|
||||
Repo restic.Repository
|
||||
Repo archiverRepo
|
||||
SelectByName SelectByNameFunc
|
||||
Select SelectFunc
|
||||
FS fs.FS
|
||||
|
@ -160,7 +170,7 @@ func (o Options) ApplyDefaults() Options {
|
|||
}
|
||||
|
||||
// New initializes a new archiver.
|
||||
func New(repo restic.Repository, fs fs.FS, opts Options) *Archiver {
|
||||
func New(repo archiverRepo, fs fs.FS, opts Options) *Archiver {
|
||||
arch := &Archiver{
|
||||
Repo: repo,
|
||||
SelectByName: func(_ string) bool { return true },
|
||||
|
|
|
@ -36,7 +36,7 @@ func prepareTempdirRepoSrc(t testing.TB, src TestDir) (string, restic.Repository
|
|||
return tempdir, repo
|
||||
}
|
||||
|
||||
func saveFile(t testing.TB, repo restic.Repository, filename string, filesystem fs.FS) (*restic.Node, ItemStats) {
|
||||
func saveFile(t testing.TB, repo archiverRepo, filename string, filesystem fs.FS) (*restic.Node, ItemStats) {
|
||||
wg, ctx := errgroup.WithContext(context.TODO())
|
||||
repo.StartPackUploader(ctx, wg)
|
||||
|
||||
|
@ -416,14 +416,14 @@ func BenchmarkArchiverSaveFileLarge(b *testing.B) {
|
|||
}
|
||||
|
||||
type blobCountingRepo struct {
|
||||
restic.Repository
|
||||
archiverRepo
|
||||
|
||||
m sync.Mutex
|
||||
saved map[restic.BlobHandle]uint
|
||||
}
|
||||
|
||||
func (repo *blobCountingRepo) SaveBlob(ctx context.Context, t restic.BlobType, buf []byte, id restic.ID, storeDuplicate bool) (restic.ID, bool, int, error) {
|
||||
id, exists, size, err := repo.Repository.SaveBlob(ctx, t, buf, id, storeDuplicate)
|
||||
id, exists, size, err := repo.archiverRepo.SaveBlob(ctx, t, buf, id, storeDuplicate)
|
||||
if exists {
|
||||
return id, exists, size, err
|
||||
}
|
||||
|
@ -435,7 +435,7 @@ func (repo *blobCountingRepo) SaveBlob(ctx context.Context, t restic.BlobType, b
|
|||
}
|
||||
|
||||
func (repo *blobCountingRepo) SaveTree(ctx context.Context, t *restic.Tree) (restic.ID, error) {
|
||||
id, err := restic.SaveTree(ctx, repo.Repository, t)
|
||||
id, err := restic.SaveTree(ctx, repo.archiverRepo, t)
|
||||
h := restic.BlobHandle{ID: id, Type: restic.TreeBlob}
|
||||
repo.m.Lock()
|
||||
repo.saved[h]++
|
||||
|
@ -465,8 +465,8 @@ func TestArchiverSaveFileIncremental(t *testing.T) {
|
|||
tempdir := rtest.TempDir(t)
|
||||
|
||||
repo := &blobCountingRepo{
|
||||
Repository: repository.TestRepository(t),
|
||||
saved: make(map[restic.BlobHandle]uint),
|
||||
archiverRepo: repository.TestRepository(t),
|
||||
saved: make(map[restic.BlobHandle]uint),
|
||||
}
|
||||
|
||||
data := rtest.Random(23, 512*1024+887898)
|
||||
|
@ -902,8 +902,8 @@ func TestArchiverSaveDirIncremental(t *testing.T) {
|
|||
tempdir := rtest.TempDir(t)
|
||||
|
||||
repo := &blobCountingRepo{
|
||||
Repository: repository.TestRepository(t),
|
||||
saved: make(map[restic.BlobHandle]uint),
|
||||
archiverRepo: repository.TestRepository(t),
|
||||
saved: make(map[restic.BlobHandle]uint),
|
||||
}
|
||||
|
||||
appendToFile(t, filepath.Join(tempdir, "testfile"), []byte("foobar"))
|
||||
|
@ -2017,7 +2017,7 @@ func (m *TrackFS) OpenFile(name string, flag int, perm os.FileMode) (fs.File, er
|
|||
}
|
||||
|
||||
type failSaveRepo struct {
|
||||
restic.Repository
|
||||
archiverRepo
|
||||
failAfter int32
|
||||
cnt int32
|
||||
err error
|
||||
|
@ -2029,7 +2029,7 @@ func (f *failSaveRepo) SaveBlob(ctx context.Context, t restic.BlobType, buf []by
|
|||
return restic.Hash(buf), false, 0, f.err
|
||||
}
|
||||
|
||||
return f.Repository.SaveBlob(ctx, t, buf, id, storeDuplicate)
|
||||
return f.archiverRepo.SaveBlob(ctx, t, buf, id, storeDuplicate)
|
||||
}
|
||||
|
||||
func TestArchiverAbortEarlyOnError(t *testing.T) {
|
||||
|
@ -2105,9 +2105,9 @@ func TestArchiverAbortEarlyOnError(t *testing.T) {
|
|||
}
|
||||
|
||||
testRepo := &failSaveRepo{
|
||||
Repository: repo,
|
||||
failAfter: int32(test.failAfter),
|
||||
err: test.err,
|
||||
archiverRepo: repo,
|
||||
failAfter: int32(test.failAfter),
|
||||
err: test.err,
|
||||
}
|
||||
|
||||
// at most two files may be queued
|
||||
|
@ -2134,7 +2134,7 @@ func TestArchiverAbortEarlyOnError(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func snapshot(t testing.TB, repo restic.Repository, fs fs.FS, parent *restic.Snapshot, filename string) (*restic.Snapshot, *restic.Node) {
|
||||
func snapshot(t testing.TB, repo archiverRepo, fs fs.FS, parent *restic.Snapshot, filename string) (*restic.Snapshot, *restic.Node) {
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ func wrapFileInfo(fi os.FileInfo) os.FileInfo {
|
|||
return res
|
||||
}
|
||||
|
||||
func statAndSnapshot(t *testing.T, repo restic.Repository, name string) (*restic.Node, *restic.Node) {
|
||||
func statAndSnapshot(t *testing.T, repo archiverRepo, name string) (*restic.Node, *restic.Node) {
|
||||
fi := lstat(t, name)
|
||||
want, err := restic.NodeFromFileInfo(name, fi, false)
|
||||
rtest.OK(t, err)
|
||||
|
|
|
@ -25,7 +25,7 @@ func TestSnapshot(t testing.TB, repo restic.Repository, path string, parent *res
|
|||
Tags: []string{"test"},
|
||||
}
|
||||
if parent != nil {
|
||||
sn, err := restic.LoadSnapshot(context.TODO(), arch.Repo, *parent)
|
||||
sn, err := restic.LoadSnapshot(context.TODO(), repo, *parent)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue