mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
Add autocomplete
This commit is contained in:
parent
2ae9705442
commit
bdc7730fdb
1
go.mod
1
go.mod
|
@ -90,6 +90,7 @@ require (
|
||||||
gopkg.in/jcmturner/goidentity.v3 v3.0.0 // indirect
|
gopkg.in/jcmturner/goidentity.v3 v3.0.0 // indirect
|
||||||
gopkg.in/jcmturner/gokrb5.v7 v7.3.0 // indirect
|
gopkg.in/jcmturner/gokrb5.v7 v7.3.0 // indirect
|
||||||
modernc.org/sqlite v1.10.7
|
modernc.org/sqlite v1.10.7
|
||||||
|
github.com/posener/complete v1.2.3
|
||||||
)
|
)
|
||||||
|
|
||||||
// replace github.com/seaweedfs/fuse => /Users/chris/go/src/github.com/seaweedfs/fuse
|
// replace github.com/seaweedfs/fuse => /Users/chris/go/src/github.com/seaweedfs/fuse
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -364,10 +364,12 @@ github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc
|
||||||
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
|
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
|
||||||
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
|
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
|
||||||
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
|
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
|
||||||
|
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||||
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||||
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||||
|
github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
|
||||||
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
||||||
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
||||||
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||||
|
@ -571,6 +573,8 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
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/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||||
|
github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=
|
||||||
|
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
|
||||||
github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc=
|
github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc=
|
||||||
github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
|
github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI=
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
|
|
109
weed/command/autocomplete.go
Normal file
109
weed/command/autocomplete.go
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
package command
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
flag "github.com/chrislusf/seaweedfs/weed/util/fla9"
|
||||||
|
"github.com/posener/complete"
|
||||||
|
completeinstall "github.com/posener/complete/cmd/install"
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
func AutocompleteMain(commands []*Command) bool {
|
||||||
|
subCommands := make(map[string]complete.Command)
|
||||||
|
helpSubCommands := make(map[string]complete.Command)
|
||||||
|
for _, cmd := range commands {
|
||||||
|
flags := make(map[string]complete.Predictor)
|
||||||
|
cmd.Flag.VisitAll(func(flag *flag.Flag) {
|
||||||
|
flags["-"+flag.Name] = complete.PredictAnything
|
||||||
|
})
|
||||||
|
|
||||||
|
subCommands[cmd.Name()] = complete.Command{
|
||||||
|
Flags: flags,
|
||||||
|
}
|
||||||
|
helpSubCommands[cmd.Name()] = complete.Command{}
|
||||||
|
}
|
||||||
|
subCommands["help"] = complete.Command{Sub: helpSubCommands}
|
||||||
|
|
||||||
|
globalFlags := make(map[string]complete.Predictor)
|
||||||
|
flag.VisitAll(func(flag *flag.Flag) {
|
||||||
|
globalFlags["-"+flag.Name] = complete.PredictAnything
|
||||||
|
})
|
||||||
|
|
||||||
|
weedCmd := complete.Command{
|
||||||
|
Sub: subCommands,
|
||||||
|
Flags: globalFlags,
|
||||||
|
GlobalFlags: complete.Flags{"-h": complete.PredictNothing},
|
||||||
|
}
|
||||||
|
cmp := complete.New("weed", weedCmd)
|
||||||
|
|
||||||
|
return cmp.Complete()
|
||||||
|
}
|
||||||
|
|
||||||
|
func installAutoCompletion() bool {
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
fmt.Printf("windows is not supported")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
err := completeinstall.Install("weed")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("install failed! %s\n", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
fmt.Printf("autocompletion is enabled. Please restart your shell.\n")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func uninstallAutoCompletion() bool {
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
fmt.Printf("windows is not supported")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
err := completeinstall.Uninstall("weed")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("uninstall failed! %s\n", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
fmt.Printf("autocompletion is disable. Please restart your shell.\n")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmdAutocomplete = &Command{
|
||||||
|
Run: runAutocomplete,
|
||||||
|
UsageLine: "autocomplete",
|
||||||
|
Short: "install autocomplete",
|
||||||
|
Long: `weed autocomplete is installed in the shell.
|
||||||
|
|
||||||
|
Supported shells are bash, zsh, and fish.
|
||||||
|
Windows is not supported.
|
||||||
|
|
||||||
|
`,
|
||||||
|
}
|
||||||
|
|
||||||
|
func runAutocomplete(cmd *Command, args []string) bool {
|
||||||
|
if len(args) != 0 {
|
||||||
|
cmd.Usage()
|
||||||
|
}
|
||||||
|
|
||||||
|
return installAutoCompletion()
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmdUnautocomplete = &Command{
|
||||||
|
Run: runUnautocomplete,
|
||||||
|
UsageLine: "unautocomplete",
|
||||||
|
Short: "uninstall autocomplete",
|
||||||
|
Long: `weed autocomplete is uninstalled in the shell.
|
||||||
|
|
||||||
|
Windows is not supported.
|
||||||
|
|
||||||
|
`,
|
||||||
|
}
|
||||||
|
|
||||||
|
func runUnautocomplete(cmd *Command, args []string) bool {
|
||||||
|
if len(args) != 0 {
|
||||||
|
cmd.Usage()
|
||||||
|
}
|
||||||
|
|
||||||
|
return uninstallAutoCompletion()
|
||||||
|
}
|
|
@ -36,6 +36,8 @@ var Commands = []*Command{
|
||||||
cmdVersion,
|
cmdVersion,
|
||||||
cmdVolume,
|
cmdVolume,
|
||||||
cmdWebDav,
|
cmdWebDav,
|
||||||
|
cmdAutocomplete,
|
||||||
|
cmdUnautocomplete,
|
||||||
}
|
}
|
||||||
|
|
||||||
type Command struct {
|
type Command struct {
|
||||||
|
|
|
@ -46,6 +46,11 @@ func main() {
|
||||||
glog.MaxSize = 1024 * 1024 * 32
|
glog.MaxSize = 1024 * 1024 * 32
|
||||||
rand.Seed(time.Now().UnixNano())
|
rand.Seed(time.Now().UnixNano())
|
||||||
flag.Usage = usage
|
flag.Usage = usage
|
||||||
|
|
||||||
|
if command.AutocompleteMain(commands) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
args := flag.Args()
|
args := flag.Args()
|
||||||
|
|
Loading…
Reference in a new issue