diff --git a/README.md b/README.md index b529a2e..4d94cf8 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ $ goodhosts -h goodhosts - manage your hosts file goodly USAGE: - main.exe [global options] command [command options] [arguments...] + goodosts [global options] command [command options] [arguments...] COMMANDS: add, a Add an entry to the hostsfile diff --git a/cmd/add.go b/cmd/add.go index 0a996e0..24819bc 100644 --- a/cmd/add.go +++ b/cmd/add.go @@ -55,7 +55,7 @@ func add(c *cli.Context) error { err = hostsfile.Add(ip, hostEntries...) if err != nil { - return cli.NewExitError(err.Error(), 2) + return cli.Exit(err.Error(), 2) } if c.Bool("clean") { @@ -70,7 +70,7 @@ func add(c *cli.Context) error { logrus.Debugln("flushing hosts file to disk") if err := hostsfile.Flush(); err != nil { - return cli.NewExitError(err.Error(), 2) + return cli.Exit(err.Error(), 2) } logrus.Infof("hosts entry added: %s %s\n", ip, strings.Join(hostEntries, " ")) diff --git a/cmd/check.go b/cmd/check.go index 5fdff9e..7ed6cf1 100644 --- a/cmd/check.go +++ b/cmd/check.go @@ -41,5 +41,5 @@ func check(c *cli.Context) error { return nil } - return cli.NewExitError(fmt.Sprintf("%s does not match anything in the hosts file", input), 1) + return cli.Exit(fmt.Sprintf("%s does not match anything in the hosts file", input), 1) } diff --git a/cmd/clean.go b/cmd/clean.go index f09c8d1..256dd25 100644 --- a/cmd/clean.go +++ b/cmd/clean.go @@ -88,7 +88,7 @@ func clean(c *cli.Context) error { } if err := h.Flush(); err != nil { - return cli.NewExitError(err.Error(), 2) + return cli.Exit(err.Error(), 2) } return debugFooter(c) } diff --git a/cmd/main.go b/cmd/main.go index 0a64e50..f06a23a 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -26,7 +26,6 @@ func Commands() []*cli.Command { List(), Remove(), Restore(), - Version(), } } @@ -48,11 +47,11 @@ func loadHostsfile(c *cli.Context, readOnly bool) (*hostsfile.Hosts, error) { } if err != nil { - return hfile, cli.NewExitError(err, 1) + return hfile, cli.Exit(err, 1) } if !readOnly && !hfile.IsWritable() { - return hfile, cli.NewExitError("Host file not writable. Try running with elevated privileges.", 1) + return hfile, cli.Exit("Host file not writable. Try running with elevated privileges.", 1) } return hfile, nil diff --git a/cmd/remove.go b/cmd/remove.go index 2c2a5fc..5ab5ee5 100644 --- a/cmd/remove.go +++ b/cmd/remove.go @@ -38,7 +38,7 @@ func remove(c *cli.Context) error { } if args.Len() == 0 { - return cli.NewExitError("no input", 1) + return cli.Exit("no input", 1) } if args.Len() == 1 { //could be ip or hostname @@ -60,7 +60,7 @@ func remove(c *cli.Context) error { if hostsfile.HasIp(args.Slice()[0]) { err = hostsfile.Remove(args.Slice()[0], hostEntries...) if err != nil { - return cli.NewExitError(err.Error(), 2) + return cli.Exit(err.Error(), 2) } } } else { @@ -84,7 +84,7 @@ func remove(c *cli.Context) error { logrus.Debugln("flushing hosts file to disk") if err := hostsfile.Flush(); err != nil { - return cli.NewExitError(err.Error(), 2) + return cli.Exit(err.Error(), 2) } logrus.Infof("entry removed: %s\n", strings.Join(hostEntries, " ")) diff --git a/cmd/version.go b/cmd/version.go deleted file mode 100644 index 0c5147e..0000000 --- a/cmd/version.go +++ /dev/null @@ -1,21 +0,0 @@ -package cmd - -import ( - "github.com/sirupsen/logrus" - "github.com/urfave/cli/v2" -) - -type VersionKey string - -func Version() *cli.Command { - return &cli.Command{ - Name: "version", - Usage: "", - Action: version, - } -} - -func version(c *cli.Context) error { - logrus.Infof("goodhosts %s", c.Context.Value(VersionKey("version"))) - return nil -} diff --git a/go.mod b/go.mod index a2da7db..c648bcb 100644 --- a/go.mod +++ b/go.mod @@ -3,20 +3,19 @@ module github.com/goodhosts/cli go 1.21 require ( - github.com/goodhosts/hostsfile v0.1.2 - github.com/olekukonko/tablewriter v0.0.4 - github.com/sirupsen/logrus v1.4.2 + github.com/goodhosts/hostsfile v0.1.3 + github.com/olekukonko/tablewriter v0.0.5 + github.com/sirupsen/logrus v1.9.3 github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 - github.com/urfave/cli/v2 v2.1.1 + github.com/urfave/cli/v2 v2.25.7 ) require ( github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/dimchansky/utfbom v1.1.1 // indirect - github.com/konsorten/go-windows-terminal-sequences v1.0.1 // indirect - github.com/mattn/go-runewidth v0.0.7 // indirect - github.com/russross/blackfriday/v2 v2.0.1 // indirect - github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect - golang.org/x/sys v0.0.0-20190422165155-953cdadca894 // indirect + github.com/mattn/go-runewidth v0.0.9 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect ) diff --git a/go.sum b/go.sum index ffb28c3..44eed0f 100644 --- a/go.sum +++ b/go.sum @@ -1,43 +1,45 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/corpix/uarand v0.1.1 h1:RMr1TWc9F4n5jiPDzFHtmaUXLKLNUFK0SgCLo4BhX/U= github.com/corpix/uarand v0.1.1/go.mod h1:SFKZvkcRoLqVRFZ4u25xPmp6m9ktANfbpXZ7SJ0/FNU= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +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= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= -github.com/goodhosts/hostsfile v0.1.2 h1:FbN+0Ko5C/Hdhd2HhCXlSpVdcB30HQnhlVGZLZTiNVI= -github.com/goodhosts/hostsfile v0.1.2/go.mod h1:HcPMANDthvsRjz5mWQuJrdWUgheVDz5MIm9bkBYHT78= +github.com/goodhosts/hostsfile v0.1.3 h1:z5Qt3YZhrS/HT+pwWJMhQ3IrKZ44ZvAKx8UXz5RhydE= +github.com/goodhosts/hostsfile v0.1.3/go.mod h1:HcPMANDthvsRjz5mWQuJrdWUgheVDz5MIm9bkBYHT78= github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428 h1:Mo9W14pwbO9VfRe+ygqZ8dFbPpoIK1HFrG/zjTuQ+nc= github.com/icrowley/fake v0.0.0-20180203215853-4178557ae428/go.mod h1:uhpZMVGznybq1itEKXj6RYw9I71qK4kH+OGMjRC4KEo= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= -github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= 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/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= +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.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 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.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816 h1:J6v8awz+me+xeb/cUTotKgceAYouhIB3pjzgRd6IlGk= github.com/t-tomalak/logrus-easy-formatter v0.0.0-20190827215021-c074f06c5816/go.mod h1:tzym/CEb5jnFI+Q0k4Qq3+LvRF4gO3E2pxS8fHP8jcA= -github.com/urfave/cli/v2 v2.1.1 h1:Qt8FeAtxE/vfdrLmR3rxR6JRE0RoVmbXu8+6kZtYU4k= -github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +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= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +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 0d75736..bd1e569 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,6 @@ package main import ( - "context" "fmt" "io" "os" @@ -13,16 +12,19 @@ import ( "github.com/urfave/cli/v2" ) -var version = "dev" +var ( + version = "dev" + commit = "none" + date = "unknown" +) func main() { app := &cli.App{ Name: "goodhosts", Usage: "manage your hosts file goodly", Action: cmd.DefaultAction, - Commands: cmd.Commands(), + Commands: append(cmd.Commands(), Version()), Before: func(ctx *cli.Context) error { - ctx.Context = context.WithValue(ctx.Context, cmd.VersionKey("version"), version) if ctx.Bool("debug") { logrus.SetLevel(logrus.DebugLevel) } else { @@ -61,3 +63,15 @@ func main() { logrus.Fatal(err) } } + +func Version() *cli.Command { + return &cli.Command{ + Name: "version", + Usage: "", + Aliases: []string{"v", "ver"}, + Action: func(c *cli.Context) error { + logrus.Infof("goodhosts %s@%s built on %s", version, commit, date) + return nil + }, + } +}