wip xz/commander

This commit is contained in:
2021-05-24 00:11:58 +03:00
parent a333fb34ef
commit 7f9d150a33
5 changed files with 69 additions and 16 deletions

View File

@@ -1,4 +1,4 @@
load("@io_bazel_rules_go//go:def.bzl", "go_library")
load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
go_library(
name = "go_default_library",
@@ -8,6 +8,13 @@ go_library(
deps = [
"//src/undocker/rootfs:go_default_library",
"@com_github_jessevdk_go_flags//:go_default_library",
"@com_github_ulikunitz_xz//:go_default_library",
"@org_uber_go_multierr//:go_default_library",
],
)
go_test(
name = "go_default_test",
srcs = ["cmdrootfs_test.go"],
embed = [":go_default_library"],
)

View File

@@ -2,10 +2,12 @@ package cmdrootfs
import (
"errors"
"io"
"os"
goflags "github.com/jessevdk/go-flags"
"github.com/motiejus/code/undocker/rootfs"
"github.com/ulikunitz/xz"
"go.uber.org/multierr"
)
@@ -15,6 +17,10 @@ type Command struct {
Infile goflags.Filename `long:"infile" description:"Input tarball"`
Outfile string `long:"outfile" description:"Output path, stdout is '-'"`
} `positional-args:"yes" required:"yes"`
Xz bool `short:"J" long:"xz" description:"create XZ archive"`
rootfsNew func(io.ReadSeeker) io.WriterTo
}
// Execute executes rootfs Command
@@ -22,6 +28,11 @@ func (c *Command) Execute(args []string) (err error) {
if len(args) != 0 {
return errors.New("too many args")
}
if c.rootfsNew == nil {
c.rootfsNew = func(r io.ReadSeeker) io.WriterTo {
return rootfs.New(r)
}
}
rd, err := os.Open(string(c.PositionalArgs.Infile))
if err != nil {
@@ -29,7 +40,7 @@ func (c *Command) Execute(args []string) (err error) {
}
defer func() { err = multierr.Append(err, rd.Close()) }()
var out *os.File
var out io.WriteCloser
outf := string(c.PositionalArgs.Outfile)
if outf == "-" {
out = os.Stdout
@@ -41,5 +52,15 @@ func (c *Command) Execute(args []string) (err error) {
}
defer func() { err = multierr.Append(err, out.Close()) }()
return rootfs.New(rd).WriteTo(out)
if c.Xz {
if out, err = xz.NewWriter(out); err != nil {
return err
}
defer func() { err = multierr.Append(err, out.Close()) }()
}
if _, err := c.rootfsNew(rd).WriteTo(out); err != nil {
return err
}
return nil
}

View File

@@ -0,0 +1,7 @@
package cmdrootfs
import "testing"
func TestExecute(t *testing.T) {
}