wal-g
1package internal
2
3import (
4"archive/tar"
5"io"
6
7"github.com/pkg/errors"
8"github.com/wal-g/wal-g/internal/crypto"
9)
10
11// A TarBall represents one tar file.
12type TarBall interface {
13SetUp(crypter crypto.Crypter, args ...string)
14CloseTar() error
15Size() int64
16AddSize(int64)
17TarWriter() *tar.Writer
18AwaitUploads()
19Name() string
20}
21
22func PackFileTo(tarBall TarBall, fileInfoHeader *tar.Header, fileContent io.Reader) (fileSize int64, err error) {
23tarWriter := tarBall.TarWriter()
24err = tarWriter.WriteHeader(fileInfoHeader)
25if err != nil {
26return 0, errors.Wrap(err, "PackFileTo: failed to write header")
27}
28
29fileSize, err = io.Copy(tarWriter, fileContent)
30if err != nil {
31return fileSize, errors.Wrap(err, "PackFileTo: copy failed")
32}
33
34tarBall.AddSize(fileInfoHeader.Size)
35return fileSize, err
36}
37