summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEltrac <hi@guhub.cn>2025-11-11 11:04:23 +0800
committerEltrac <hi@guhub.cn>2025-11-11 11:04:23 +0800
commit06dcdf457d25a707f6a25237f09a6e186173bbb7 (patch)
treedf613d6d5cbbcccb20b4f6cfe64134c3498b3e7d
parentff99f193fee8bff9e5fdce39f05d1d95622c360a (diff)
refactor: use urfave/cli
-rw-r--r--go.mod4
-rw-r--r--go.sum10
-rw-r--r--main.go45
3 files changed, 39 insertions, 20 deletions
diff --git a/go.mod b/go.mod
index 1644bda..5413fce 100644
--- a/go.mod
+++ b/go.mod
@@ -4,6 +4,10 @@ go 1.25.4
require (
github.com/fatih/color v1.18.0 // direct
+ github.com/urfave/cli/v3 v3.6.0 // direct
+)
+
+require (
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
golang.org/x/sys v0.25.0 // indirect
diff --git a/go.sum b/go.sum
index 33148a4..c90ae44 100644
--- a/go.sum
+++ b/go.sum
@@ -1,3 +1,5 @@
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
@@ -5,7 +7,15 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
+github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
+github.com/urfave/cli/v3 v3.6.0 h1:oIdArVjkdIXHWg3iqxgmqwQGC8NM0JtdgwQAj2sRwFo=
+github.com/urfave/cli/v3 v3.6.0/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/main.go b/main.go
index d986749..ca60c40 100644
--- a/main.go
+++ b/main.go
@@ -4,7 +4,10 @@ import (
"fmt"
"os"
"os/exec"
+ "context"
+ "log"
"github.com/fatih/color"
+ "github.com/urfave/cli/v3"
)
func main() {
@@ -12,28 +15,30 @@ func main() {
_, brewInstallationErr := exec.LookPath("brew")
if brewInstallationErr != nil {
color.Red("🍺 Homebrew not installed.")
- fmt.Println("This tool is for looking up formulae/cask information about packages installed with Homebrew. If you don't have Homebrew, it's no use.")
- os.Exit(1)
+ fmt.Println("This tool is for looking up formulae/cask information about packages installed with Homebrew.")
+ fmt.Println("If you don't have Homebrew, it's no use.")
+ os.Exit(0)
}
- args := os.Args
- // handle arguments
- var printUsage = func() {
- color.New(color.FgBlue).Print("Usage: ")
- fmt.Print("wthis <package>\n")
- }
- if len(args) < 2 {
- printUsage()
- os.Exit(1)
- }
- if args[1] == "-h" || args[1] == "--help" {
- printUsage()
- os.Exit(0)
+ // declare CLI app
+ cmd := &cli.Command{
+ Name: "wthis",
+ Usage: "Fetch information of a Homebrew formulae or cask, like how it got installed, reverse dependencies, etc.",
+ Action: func(ctx context.Context, cmd *cli.Command) error {
+ if cmd.Args().Len() == 0 {
+ color.Red("❌ Please provide a formulae/cask name.")
+ fmt.Println("Usage: wthis <name>")
+ return nil
+ }
+ pkgName := cmd.Args().First()
+ formulae, cask := GetInfo(pkgName)
+ PrintInfo(formulae, cask, pkgName)
+ return nil
+ },
}
- pkg := args[1]
- // get formulae/cask info
- formulae, cask := GetInfo(pkg)
- // print info
- PrintInfo(formulae, cask, pkg)
+ // run command and handle error
+ if err := cmd.Run(context.Background(), os.Args); err != nil {
+ log.Fatal(err)
+ }
}