github.com/mgoltzsche/ctnr@v0.7.1-alpha/pkg/fs/source/sourcetargz.go (about)

     1  package source
     2  
     3  import (
     4  	"compress/gzip"
     5  	"os"
     6  
     7  	"github.com/mgoltzsche/ctnr/pkg/fs"
     8  	"github.com/pkg/errors"
     9  )
    10  
    11  var _ fs.Source = NewSourceTarGz("")
    12  
    13  type sourceTarGz sourceTar
    14  
    15  func NewSourceTarGz(file string) fs.Source {
    16  	s := sourceTarGz(sourceTar{file, ""})
    17  	return &s
    18  }
    19  
    20  func (s *sourceTarGz) Attrs() fs.NodeInfo {
    21  	return (*sourceTar)(s).Attrs()
    22  }
    23  
    24  func (s *sourceTarGz) DeriveAttrs() (fs.DerivedAttrs, error) {
    25  	return (*sourceTar)(s).DeriveAttrs()
    26  }
    27  
    28  func (s *sourceTarGz) Write(dest, name string, w fs.Writer, _ map[fs.Source]string) (err error) {
    29  	f, err := os.Open(s.file)
    30  	if err != nil {
    31  		return errors.Wrap(err, "extract tar.gz")
    32  	}
    33  	defer f.Close()
    34  	r, err := gzip.NewReader(f)
    35  	if err != nil {
    36  		return errors.Wrap(err, "extract tar.gz")
    37  	}
    38  	if err = unpackTar(r, dest, w); err != nil {
    39  		return errors.Wrap(err, "extract tar.gz")
    40  	}
    41  	return
    42  }