fix: Pass through overwrite flags to tape writer

This commit is contained in:
Felicitas Pojtinger
2021-12-05 20:24:48 +01:00
parent 85d3d37b79
commit 6fae2e19da
4 changed files with 19 additions and 13 deletions

View File

@@ -181,7 +181,7 @@ func archive(
identity interface{},
) ([]*tar.Header, error) {
dirty := false
tw, isRegular, cleanup, err := openTapeWriter(tape)
tw, isRegular, cleanup, err := openTapeWriter(tape, recordSize, overwrite)
if err != nil {
return []*tar.Header{}, err
}
@@ -206,7 +206,7 @@ func archive(
return []*tar.Header{}, err
}
tw, isRegular, cleanup, err = openTapeWriter(tape)
tw, isRegular, cleanup, err = openTapeWriter(tape, recordSize, overwrite)
if err != nil {
return []*tar.Header{}, err
}
@@ -229,7 +229,7 @@ func archive(
return []*tar.Header{}, err
}
tw, isRegular, cleanup, err = openTapeWriter(tape)
tw, isRegular, cleanup, err = openTapeWriter(tape, recordSize, overwrite)
if err != nil {
return []*tar.Header{}, err
}

View File

@@ -68,6 +68,7 @@ var deleteCmd = &cobra.Command{
return delete(
viper.GetString(driveFlag),
viper.GetInt(recordSizeFlag),
viper.GetString(metadataFlag),
viper.GetString(nameFlag),
viper.GetString(encryptionFlag),
@@ -80,6 +81,7 @@ var deleteCmd = &cobra.Command{
func delete(
tape string,
recordSize int,
metadata string,
name string,
encryptionFormat string,
@@ -88,7 +90,7 @@ func delete(
identity interface{},
) error {
dirty := false
tw, _, cleanup, err := openTapeWriter(tape)
tw, _, cleanup, err := openTapeWriter(tape, recordSize, false)
if err != nil {
return err
}
@@ -158,7 +160,7 @@ func delete(
return nil
}
func openTapeWriter(tape string) (tw *tar.Writer, isRegular bool, cleanup func(dirty *bool) error, err error) {
func openTapeWriter(tape string, recordSize int, overwrite bool) (tw *tar.Writer, isRegular bool, cleanup func(dirty *bool) error, err error) {
stat, err := os.Stat(tape)
if err == nil {
isRegular = stat.Mode().IsRegular()
@@ -184,9 +186,11 @@ func openTapeWriter(tape string) (tw *tar.Writer, isRegular bool, cleanup func(d
return nil, false, nil, err
}
// Go to end of tape
if err := controllers.GoToEndOfTape(f); err != nil {
return nil, false, nil, err
if !overwrite {
// Go to end of tape
if err := controllers.GoToEndOfTape(f); err != nil {
return nil, false, nil, err
}
}
}
@@ -195,7 +199,7 @@ func openTapeWriter(tape string) (tw *tar.Writer, isRegular bool, cleanup func(d
if isRegular {
tw = tar.NewWriter(f)
} else {
bw = bufio.NewWriterSize(f, controllers.BlockSize*viper.GetInt(recordSizeFlag))
bw = bufio.NewWriterSize(f, controllers.BlockSize*recordSize)
counter = &counters.CounterWriter{Writer: bw, BytesRead: 0}
tw = tar.NewWriter(counter)
}
@@ -208,9 +212,9 @@ func openTapeWriter(tape string) (tw *tar.Writer, isRegular bool, cleanup func(d
}
if !isRegular {
if controllers.BlockSize*viper.GetInt(recordSizeFlag)-counter.BytesRead > 0 {
if controllers.BlockSize*recordSize-counter.BytesRead > 0 {
// Fill the rest of the record with zeros
if _, err := bw.Write(make([]byte, controllers.BlockSize*viper.GetInt(recordSizeFlag)-counter.BytesRead)); err != nil {
if _, err := bw.Write(make([]byte, controllers.BlockSize*recordSize-counter.BytesRead)); err != nil {
return err
}
}

View File

@@ -61,6 +61,7 @@ var moveCmd = &cobra.Command{
return move(
viper.GetString(driveFlag),
viper.GetInt(recordSizeFlag),
viper.GetString(metadataFlag),
viper.GetString(fromFlag),
viper.GetString(toFlag),
@@ -74,6 +75,7 @@ var moveCmd = &cobra.Command{
func move(
tape string,
recordSize int,
metadata string,
src string,
dst string,
@@ -83,7 +85,7 @@ func move(
identity interface{},
) error {
dirty := false
tw, _, cleanup, err := openTapeWriter(tape)
tw, _, cleanup, err := openTapeWriter(tape, recordSize, false)
if err != nil {
return err
}

View File

@@ -134,7 +134,7 @@ func update(
identity interface{},
) ([]*tar.Header, error) {
dirty := false
tw, isRegular, cleanup, err := openTapeWriter(tape)
tw, isRegular, cleanup, err := openTapeWriter(tape, recordSize, false)
if err != nil {
return []*tar.Header{}, err
}