fix: Overwrite archive if -o flag is specified
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user