From dd030c5ac6f2bcc7c16ead68225138d1ba1bf561 Mon Sep 17 00:00:00 2001 From: Felix Pojtinger Date: Fri, 26 Nov 2021 17:51:47 +0100 Subject: [PATCH] fix: Overwrite archive if `-o` flag is specified --- cmd/stbak/cmd/archive.go | 25 +++++++++++++++++++++++++ cmd/stbak/cmd/index.go | 14 +++++++------- pkg/pax/stfs.go | 9 +++++---- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/cmd/stbak/cmd/archive.go b/cmd/stbak/cmd/archive.go index db010bb..9090f01 100644 --- a/cmd/stbak/cmd/archive.go +++ b/cmd/stbak/cmd/archive.go @@ -79,6 +79,31 @@ func archive( if err != nil { return err } + + if overwrite && isRegular { + if err := cleanup(false); err != nil { + return err + } + + f, err := os.OpenFile(tape, os.O_WRONLY|os.O_CREATE, 0600) + if err != nil { + return err + } + + if err := f.Truncate(0); err != nil { + return err + } + + if err := f.Close(); err != nil { + return err + } + + tw, isRegular, cleanup, err = openTapeWriter(viper.GetString(tapeFlag)) + if err != nil { + return err + } + } + defer cleanup(dirty) first := true diff --git a/cmd/stbak/cmd/index.go b/cmd/stbak/cmd/index.go index 9e91ba7..4456894 100644 --- a/cmd/stbak/cmd/index.go +++ b/cmd/stbak/cmd/index.go @@ -257,11 +257,16 @@ func indexHeader(record, block int64, hdr *tar.Header, metadataPersister *persis if _, err := metadataPersister.DeleteHeader(context.Background(), hdr.Name, true); err != nil { return err } - case pax.STFSReplacesContent: - if hdr.PAXRecords[pax.STFSReplacesContent] == pax.STFSReplacesContentTrue { + case pax.STFSRecordActionUpdate: + if hdr.PAXRecords[pax.STFSRecordReplacesContent] == pax.STFSRecordReplacesContentTrue { // Metadata & content update // TODO: Add implementation return pax.ErrUnsupportedAction + } else if _, ok := hdr.PAXRecords[pax.STFSRecordReplacesName]; ok { + // Move header; do not update metadata + if err := metadataPersister.MoveHeader(context.Background(), hdr.PAXRecords[pax.STFSRecordReplacesName], hdr.Name); err != nil { + return err + } } else { // Metadata-only update dbhdr, err := converters.TarHeaderToDBHeader(record, block, hdr) @@ -273,11 +278,6 @@ func indexHeader(record, block int64, hdr *tar.Header, metadataPersister *persis return err } } - case pax.STFSReplacesName: - // Move header; does not update metadata - if err := metadataPersister.MoveHeader(context.Background(), hdr.PAXRecords[pax.STFSReplacesName], hdr.Name); err != nil { - return err - } default: return pax.ErrUnsupportedAction } diff --git a/pkg/pax/stfs.go b/pkg/pax/stfs.go index 4321a38..b7067f3 100644 --- a/pkg/pax/stfs.go +++ b/pkg/pax/stfs.go @@ -9,12 +9,13 @@ const ( STFSRecordAction = "STFS.Action" STFSRecordActionCreate = "CREATE" STFSRecordActionDelete = "DELETE" + STFSRecordActionUpdate = "UPDATE" - STFSReplacesContent = "STFS.ReplacesContent" - STFSReplacesContentTrue = "true" - STFSReplacesContentFalse = "false" + STFSRecordReplacesContent = "STFS.ReplacesContent" + STFSRecordReplacesContentTrue = "true" + kTFSRecordReplacesContentFalse = "false" - STFSReplacesName = "STFS.ReplacesName" + STFSRecordReplacesName = "STFS.ReplacesName" ) var (