From f18728d40ef075f0d497c846b0526709a6c1772a Mon Sep 17 00:00:00 2001 From: Matt Dainty Date: Wed, 1 Feb 2023 18:28:39 +0000 Subject: [PATCH] Decompress to `.iso` file automatically If no destination file is passed, rather than stream to `stdout` try and strip the existing `.rvz` extension and replace with `.iso`. If the source filename already has an `.iso` extension then error. --- cmd/rvz/main.go | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/cmd/rvz/main.go b/cmd/rvz/main.go index b0d0954..b9ce0d3 100644 --- a/cmd/rvz/main.go +++ b/cmd/rvz/main.go @@ -5,12 +5,17 @@ import ( "io" "log" "os" + "path/filepath" + "strings" + "github.com/bodgit/plumbing" "github.com/bodgit/rvz" "github.com/schollz/progressbar/v3" "github.com/urfave/cli/v2" ) +const isoExtension = ".iso" + var ( version = "dev" commit = "none" //nolint:gochecknoglobals @@ -31,7 +36,16 @@ func decompress(c *cli.Context) error { cli.ShowCommandHelpAndExit(c, c.Command.FullName(), 1) } - f, err := os.Open(c.Args().First()) + src, dst := c.Args().Get(0), c.Args().Get(1) + if dst == "" { + if ext := filepath.Ext(src); ext == isoExtension { + return fmt.Errorf("source file %s already has %s extension", src, isoExtension) + } + + dst = strings.TrimSuffix(src, rvz.Extension) + isoExtension + } + + f, err := os.Open(src) if err != nil { return err } @@ -42,23 +56,20 @@ func decompress(c *cli.Context) error { return err } - var w io.Writer + var w io.WriteCloser - if c.NArg() >= 2 { - w, err = os.Create(c.Args().Get(1)) - if err != nil { - return err - } - defer w.(io.Closer).Close() //nolint:forcetypeassert - } else { - w = os.Stdout + w, err = os.Create(dst) + if err != nil { + return err } if c.Bool("verbose") { pb := progressbar.DefaultBytes(r.Size()) - w = io.MultiWriter(w, pb) + w = plumbing.MultiWriteCloser(w, plumbing.NopWriteCloser(pb)) } + defer w.Close() + _, err = io.Copy(w, r) return err