feat: Enable indexing with tape as single source of truth after deletions
This commit is contained in:
@@ -4,10 +4,8 @@ package persisters
|
||||
//go:generate go-bindata -pkg metadata -o ../db/sqlite/migrations/metadata/migrations.go ../../../db/sqlite/migrations/metadata
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
|
||||
"github.com/pojntfx/stfs/pkg/db/sqlite/migrations/metadata"
|
||||
models "github.com/pojntfx/stfs/pkg/db/sqlite/models/metadata"
|
||||
@@ -32,33 +30,7 @@ func NewMetadataPersister(dbPath string) *MetadataPersister {
|
||||
}
|
||||
}
|
||||
|
||||
func (p *MetadataPersister) UpsertHeader(ctx context.Context, record, block int64, hdr *tar.Header) error {
|
||||
paxRecords, err := json.Marshal(hdr.PAXRecords)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
dbhdr := models.Header{
|
||||
Record: record,
|
||||
Block: block,
|
||||
Typeflag: int64(hdr.Typeflag),
|
||||
Name: hdr.Name,
|
||||
Linkname: hdr.Linkname,
|
||||
Size: hdr.Size,
|
||||
Mode: hdr.Mode,
|
||||
UID: int64(hdr.Uid),
|
||||
Gid: int64(hdr.Gid),
|
||||
Uname: hdr.Uname,
|
||||
Gname: hdr.Gname,
|
||||
Modtime: hdr.ModTime,
|
||||
Accesstime: hdr.AccessTime,
|
||||
Changetime: hdr.ChangeTime,
|
||||
Devmajor: hdr.Devmajor,
|
||||
Devminor: hdr.Devminor,
|
||||
Paxrecords: string(paxRecords),
|
||||
Format: int64(hdr.Format),
|
||||
}
|
||||
|
||||
func (p *MetadataPersister) UpsertHeader(ctx context.Context, dbhdr *models.Header) error {
|
||||
if _, err := models.FindHeader(ctx, p.db, dbhdr.Name, models.HeaderColumns.Name); err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
if err := dbhdr.Insert(ctx, p.db, boil.Infer()); err != nil {
|
||||
@@ -82,9 +54,13 @@ func (p *MetadataPersister) GetHeaders(ctx context.Context) (models.HeaderSlice,
|
||||
return models.Headers().All(ctx, p.db)
|
||||
}
|
||||
|
||||
func (p *MetadataPersister) DeleteHeader(ctx context.Context, name string) (*models.Header, error) {
|
||||
func (p *MetadataPersister) DeleteHeader(ctx context.Context, name string, ignoreNotExists bool) (*models.Header, error) {
|
||||
hdr, err := models.FindHeader(ctx, p.db, name)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows && ignoreNotExists {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user