fix: Overwrite archive if -o flag is specified

This commit is contained in:
Felix Pojtinger
2021-11-26 17:51:47 +01:00
parent 57b58a8f68
commit dd030c5ac6
3 changed files with 37 additions and 11 deletions

View File

@@ -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

View File

@@ -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
}

View File

@@ -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 (