diff --git a/cmd/stbak/cmd/delete.go b/cmd/stbak/cmd/delete.go index e537a86..538e7b7 100644 --- a/cmd/stbak/cmd/delete.go +++ b/cmd/stbak/cmd/delete.go @@ -50,36 +50,24 @@ var deleteCmd = &cobra.Command{ return err } - writer, writerIsRegular, err := tape.OpenTapeWriteOnly( + tm := tape.NewTapeManager( viper.GetString(driveFlag), viper.GetInt(recordSizeFlag), - false, + viper.GetBool(overwriteFlag), ) - if err != nil { - return err - } - defer writer.Close() - reader, readerIsRegular, err := tape.OpenTapeReadOnly( - viper.GetString(driveFlag), - ) - if err != nil { - return err - } - defer reader.Close() - return operations.Delete( - config.DriveWriterConfig{ - Drive: writer, - DriveIsRegular: writerIsRegular, - }, - config.DriveReaderConfig{ - Drive: reader, - DriveIsRegular: readerIsRegular, - }, - config.DriveConfig{ - Drive: reader, - DriveIsRegular: readerIsRegular, - }, + ops := operations.NewOperations( + tm.GetWriter, + tm.Close, + + tm.GetReader, + tm.Close, + + tm.GetDrive, + tm.Close, + ) + + return ops.Delete( config.MetadataConfig{ Metadata: viper.GetString(metadataFlag), }, diff --git a/pkg/operations/delete.go b/pkg/operations/delete.go index ca87496..c3ab78f 100644 --- a/pkg/operations/delete.go +++ b/pkg/operations/delete.go @@ -15,10 +15,7 @@ import ( "github.com/pojntfx/stfs/pkg/recovery" ) -func Delete( - writer config.DriveWriterConfig, - reader config.DriveReaderConfig, - drive config.DriveConfig, +func (o *Operations) Delete( metadata config.MetadataConfig, pipes config.PipeConfig, crypto config.CryptoConfig, @@ -28,6 +25,14 @@ func Delete( onHeader func(hdr *models.Header), ) error { + o.writeLock.Lock() + defer o.writeLock.Unlock() + + writer, err := o.getWriter() + if err != nil { + return err + } + dirty := false tw, cleanup, err := tarext.NewTapeWriter(writer.Drive, writer.DriveIsRegular, recordSize) if err != nil { @@ -103,6 +108,22 @@ func Delete( return err } + if err := o.closeWriter(); err != nil { + return err + } + + reader, err := o.getReader() + if err != nil { + return err + } + defer o.closeReader() + + drive, err := o.getDrive() + if err != nil { + return err + } + defer o.closeDrive() + return recovery.Index( reader, drive,