Skip to content

Commit

Permalink
Refactor to use urfave/cli instead of kingpin2.
Browse files Browse the repository at this point in the history
- Kingpin indirect depends on an obsolete package with security issues.
- Submitted a PR but no response in 15 days.
- kingpin2 seems abandoned. Moved on to urfave/cli.
  • Loading branch information
marcopaganini committed Jun 17, 2022
1 parent 72f2128 commit ee81de1
Show file tree
Hide file tree
Showing 4 changed files with 363 additions and 144 deletions.
171 changes: 171 additions & 0 deletions actions.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
package main

import (
"context"
"errors"
"fmt"
"os"
"strings"

"github.com/urfave/cli/v2"
)

// errorFromSlice converts the slice of strings into a single multi-line string
// and returns it, or returns nil if the error list is empty.
func errorFromSlice(errmsgs []string) error {
if len(errmsgs) != 0 {
return errors.New(strings.Join(errmsgs, "\n"))
}
return nil
}

// checkTwoArgs shows the help message for the current context and return an
// error if we don't have exactly two arguments.
func checkTwoArgs(c *cli.Context) error {
if c.Args().Len() != 2 {
cli.ShowCommandHelp(c, c.Command.Name)
return errors.New("need input and output files")
}
return nil
}

// checkMultiArgs shows the help message for the current context and return an
// error if we don't have at least one argument.
func checkMultiArgs(c *cli.Context) error {
if c.Args().Len() < 1 {
cli.ShowCommandHelp(c, c.Command.Name)
return errors.New("no files to process")
}
return nil
}

func runnerFromContext(ctx context.Context) *runner {
ret, ok := ctx.Value(runnerKey).(*runner)
if !ok {
panic("internal error: Unable to retrieve runner from context.")
}
return ret
}

func actionMerge(c *cli.Context) error {
return remux(c.Args().Slice(), c.String("output"), *runnerFromContext(c.Context), c.Bool("subs"))
}

func actionOnly(c *cli.Context) error {
if err := checkTwoArgs(c); err != nil {
return err
}

infile := c.Args().Get(0)
outfile := c.Args().Get(1)

run := *runnerFromContext(c.Context)

mkv := mustParseFile(infile)
tfi, err := extract(mkv, c.Int("track"), run)
defer os.Remove(tfi.fname)
if err != nil {
return fmt.Errorf("%s: %v", infile, err)
}
return submux(infile, outfile, true, run)
}

func actionPrint(c *cli.Context) error {
if err := checkMultiArgs(c); err != nil {
return err
}

var errmsgs []string

for _, fname := range c.Args().Slice() {
output, err := format(c.String("format"), fname)
if err != nil {
errmsgs = append(errmsgs, fmt.Sprintf("%s: %v", fname, err))
continue
}
fmt.Println(output)
}
return errorFromSlice(errmsgs)
}

func actionRemux(c *cli.Context) error {
if err := checkTwoArgs(c); err != nil {
return err
}

infile := c.Args().Get(0)
outfile := c.Args().Get(1)
run := *runnerFromContext(c.Context)

return remux([]string{infile}, outfile, run, true)
}

func actionRename(c *cli.Context) error {
if err := checkMultiArgs(c); err != nil {
return err
}

var errmsgs []string

for _, fname := range readable(c.Args().Slice()) {
err := rename(c.String("format"), fname, c.Bool("dry-run"))
if err != nil {
errmsgs = append(errmsgs, fmt.Sprintf("%s: %v", fname, err))
}
}
return errorFromSlice(errmsgs)
}

func actionSetDefault(c *cli.Context) error {
if err := checkMultiArgs(c); err != nil {
return err
}

run := *runnerFromContext(c.Context)

var errmsgs []string

for _, fname := range readable(c.Args().Slice()) {
mkv := mustParseFile(fname)
err := setdefault(mkv, c.Int("track"), run)
if err != nil {
errmsgs = append(errmsgs, fmt.Sprintf("%s: %s", fname, err))
}
}
return errorFromSlice(errmsgs)
}

func actionSetDefaultByLang(c *cli.Context) error {
if err := checkMultiArgs(c); err != nil {
return err
}

run := *runnerFromContext(c.Context)

var errmsgs []string

for _, fname := range readable(c.Args().Slice()) {
mkv := mustParseFile(fname)
track, err := trackByLanguage(mkv, c.StringSlice("lang"), c.StringSlice("ignore"))
if err != nil {
errmsgs = append(errmsgs, fmt.Sprintf("%s: %v", fname, err))
continue
}
err = setdefault(mkv, track, run)
if err != nil {
errmsgs = append(errmsgs, fmt.Sprintf("%s: %v", fname, err))
}
}
return errorFromSlice(errmsgs)
}

func actionShow(c *cli.Context) error {
if err := checkMultiArgs(c); err != nil {
return err
}
for _, fname := range readable(c.Args().Slice()) {
mkv := mustParseFile(fname)
show(mkv, c.Bool("uid"))
}
return nil
}
8 changes: 3 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@ module github.com/marcopaganini/mkvtool
go 1.16

require (
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a // indirect
github.com/fatih/structs v1.1.0 // indirect
github.com/fatih/structs v1.1.0
github.com/go-openapi/strfmt v0.21.0 // indirect
github.com/jedib0t/go-pretty v4.3.0+incompatible
github.com/mattn/go-runewidth v0.0.13 // indirect
github.com/middelink/go-parse-torrent-name v0.0.0-20190301154245-3ff4efacd4c4
github.com/stretchr/testify v1.7.0 // indirect
github.com/urfave/cli/v2 v2.8.1
golang.org/x/sys v0.0.0-20211106132015-ebca88c72f68 // indirect
golang.org/x/text v0.3.7 // indirect
gopkg.in/alecthomas/kingpin.v2 v2.2.6
golang.org/x/text v0.3.7
)
18 changes: 10 additions & 8 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a h1:E/8AP5dFtMhl5KPJz66Kt9G0n+7Sn41Fy1wv9/jHOrc=
github.com/alecthomas/units v0.0.0-20210927113745-59d0afb8317a/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef h1:46PFijGLmAjMPwCCCo7Jf0W6f9slllCkkv7vyc1yOSg=
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU=
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
Expand Down Expand Up @@ -82,6 +81,8 @@ github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
Expand All @@ -91,15 +92,18 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4=
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
github.com/urfave/cli/v2 v2.8.1 h1:CGuYNZF9IKZY/rfBe3lJpccSoIY1ytfvmgQT90cNOl4=
github.com/urfave/cli/v2 v2.8.1/go.mod h1:Z41J9TPoffeoqP0Iza0YbAhGvymRdZAd2uPmZ5JxRdY=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs=
github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
go.mongodb.org/mongo-driver v1.7.3 h1:G4l/eYY9VrQAK/AUgkV0koQKzQnyddnWxrd/Etf0jIs=
go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg=
Expand Down Expand Up @@ -132,14 +136,12 @@ golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3
golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo=
gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Loading

0 comments on commit ee81de1

Please sign in to comment.