Skip to content

Commit

Permalink
Add support for 'tar.xz' files
Browse files Browse the repository at this point in the history
  • Loading branch information
myhro committed Nov 27, 2021
1 parent af5c672 commit 53928eb
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 4 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ go 1.17
require (
github.com/spf13/cobra v1.2.1
github.com/stretchr/testify v1.7.0
github.com/ulikunitz/xz v0.5.10
)

require (
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8=
github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
Expand Down
27 changes: 27 additions & 0 deletions tools/storage.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,39 @@
package tools

import (
"compress/gzip"
"errors"
"fmt"
"io"
"os"
"strings"

"github.com/ulikunitz/xz"
)

func compressedReader(file *os.File) (io.Reader, error) {
var comp io.Reader

var err error

switch {
case strings.HasSuffix(file.Name(), ".gz"):
comp, err = gzip.NewReader(file)
if err != nil {
return nil, fmt.Errorf("gzip.NewReader: %w", err)
}
case strings.HasSuffix(file.Name(), ".xz"):
comp, err = xz.NewReader(file)
if err != nil {
return nil, fmt.Errorf("xz.NewReader: %w", err)
}
default:
return nil, fmt.Errorf("unknown archive type for %v", file.Name())
}

return comp, nil
}

func saveBinary(src io.Reader, dest string) error {
err := saveFile(src, dest)
if err != nil {
Expand Down
7 changes: 3 additions & 4 deletions tools/tools.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package tools

import (
"archive/tar"
"compress/gzip"
"errors"
"fmt"
"io"
Expand Down Expand Up @@ -70,12 +69,12 @@ func (t *Tool) Extract() error {
defer os.Remove(t.Asset.Name)
defer file.Close()

gzfile, err := gzip.NewReader(file)
compFile, err := compressedReader(file)
if err != nil {
return fmt.Errorf("gzip.NewReader: %w", err)
return fmt.Errorf("compressedReader: %w", err)
}

tr := tar.NewReader(gzfile)
tr := tar.NewReader(compFile)

for {
hdr, err := tr.Next()
Expand Down

0 comments on commit 53928eb

Please sign in to comment.