flags pkg : but im not convinced this is right
This commit is contained in:
parent
8bd0da003e
commit
f483e08105
4 changed files with 57 additions and 48 deletions
24
flags/flags.go
Normal file
24
flags/flags.go
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
package flags
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Flag string
|
||||||
|
|
||||||
|
func (f Flag) Dash() string {
|
||||||
|
return fmt.Sprintf("--%s", f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// prepend --flag to args if a flag isn't there:
|
||||||
|
// allows trailing flags:
|
||||||
|
// um tag foo --invert
|
||||||
|
// becomes:
|
||||||
|
// um tag --query foo --invert
|
||||||
|
func PrependFlagToArgs(args []string, flag Flag) []string {
|
||||||
|
if len(args) >= 1 && !strings.HasPrefix(args[0], "-") {
|
||||||
|
args = append([]string{flag.Dash()}, args...)
|
||||||
|
}
|
||||||
|
return args
|
||||||
|
}
|
||||||
17
sort/sort.go
17
sort/sort.go
|
|
@ -1,10 +1,23 @@
|
||||||
package sort
|
package sort
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/brtholomy/um/go/flags"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
key flags.Flag = "key"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Sort(args []string) {
|
func Sort(args []string) {
|
||||||
fmt.Println("sort")
|
sortFlags := flag.NewFlagSet("sort", flag.ExitOnError)
|
||||||
fmt.Println(args)
|
sortKey := sortFlags.String(string(key), "", "filename of ordered list to use as key")
|
||||||
|
|
||||||
|
sortFlags.Parse(args)
|
||||||
|
fmt.Println("subcmd sort")
|
||||||
|
fmt.Printf("key: %#v\n", *sortKey)
|
||||||
|
fmt.Printf("args: %#v\n", sortFlags.Args())
|
||||||
|
sortFlags.Usage()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
20
tag/tag.go
20
tag/tag.go
|
|
@ -1,10 +1,26 @@
|
||||||
package tag
|
package tag
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/brtholomy/um/go/flags"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
query flags.Flag = "query"
|
||||||
|
invert flags.Flag = "invert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Tag(args []string) {
|
func Tag(args []string) {
|
||||||
fmt.Println("tag")
|
tagFlags := flag.NewFlagSet("tag", flag.ExitOnError)
|
||||||
fmt.Println(args)
|
tagQuery := tagFlags.String(string(query), "", "tag query")
|
||||||
|
tagInvert := tagFlags.Bool(string(invert), false, "invert match")
|
||||||
|
|
||||||
|
tagFlags.Parse(flags.PrependFlagToArgs(args, query))
|
||||||
|
|
||||||
|
fmt.Printf("query: %#v\n", *tagQuery)
|
||||||
|
fmt.Printf("invert: %#v\n", *tagInvert)
|
||||||
|
fmt.Printf("args: %#v\n", tagFlags.Args())
|
||||||
|
tagFlags.Usage()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
44
um.go
44
um.go
|
|
@ -1,10 +1,8 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
|
||||||
|
|
||||||
nextpkg "github.com/brtholomy/um/go/next"
|
nextpkg "github.com/brtholomy/um/go/next"
|
||||||
sortpkg "github.com/brtholomy/um/go/sort"
|
sortpkg "github.com/brtholomy/um/go/sort"
|
||||||
|
|
@ -22,38 +20,7 @@ const (
|
||||||
|
|
||||||
var help string = fmt.Sprintf("um [%s | %s | %s | %s]", tag, next, last, sort)
|
var help string = fmt.Sprintf("um [%s | %s | %s | %s]", tag, next, last, sort)
|
||||||
|
|
||||||
type Flag string
|
|
||||||
|
|
||||||
const (
|
|
||||||
query Flag = "query"
|
|
||||||
invert Flag = "invert"
|
|
||||||
key Flag = "key"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (f Flag) Dash() string {
|
|
||||||
return fmt.Sprintf("--%s", f)
|
|
||||||
}
|
|
||||||
|
|
||||||
// prepend --flag to args if a flag isn't there:
|
|
||||||
// allows trailing flags:
|
|
||||||
// um tag foo --invert
|
|
||||||
// becomes:
|
|
||||||
// um tag --query foo --invert
|
|
||||||
func prependFlagToArgs(args []string, flag Flag) []string {
|
|
||||||
if len(args) >= 1 && !strings.HasPrefix(args[0], "-") {
|
|
||||||
args = append([]string{flag.Dash()}, args...)
|
|
||||||
}
|
|
||||||
return args
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
tagFlags := flag.NewFlagSet(string(tag), flag.ExitOnError)
|
|
||||||
tagQuery := tagFlags.String(string(query), "", "tag query")
|
|
||||||
tagInvert := tagFlags.Bool(string(invert), false, "invert match")
|
|
||||||
|
|
||||||
sortFlags := flag.NewFlagSet(string(sort), flag.ExitOnError)
|
|
||||||
sortKey := sortFlags.String(string(key), "", "filename of ordered list to use as key")
|
|
||||||
|
|
||||||
// TODO: do something useful:
|
// TODO: do something useful:
|
||||||
// run empty tag query?
|
// run empty tag query?
|
||||||
if len(os.Args) < 2 {
|
if len(os.Args) < 2 {
|
||||||
|
|
@ -70,20 +37,9 @@ func main() {
|
||||||
case last:
|
case last:
|
||||||
nextpkg.Last()
|
nextpkg.Last()
|
||||||
case tag:
|
case tag:
|
||||||
// TODO: move flag defs to the package?
|
|
||||||
tagFlags.Parse(prependFlagToArgs(args, query))
|
|
||||||
tagpkg.Tag(args)
|
tagpkg.Tag(args)
|
||||||
fmt.Printf("query: %#v\n", *tagQuery)
|
|
||||||
fmt.Printf("invert: %#v\n", *tagInvert)
|
|
||||||
fmt.Printf("args: %#v\n", tagFlags.Args())
|
|
||||||
tagFlags.Usage()
|
|
||||||
case sort:
|
case sort:
|
||||||
sortFlags.Parse(args)
|
|
||||||
sortpkg.Sort(args)
|
sortpkg.Sort(args)
|
||||||
fmt.Println("subcmd sort")
|
|
||||||
fmt.Printf("key: %#v\n", *sortKey)
|
|
||||||
fmt.Printf("args: %#v\n", sortFlags.Args())
|
|
||||||
sortFlags.Usage()
|
|
||||||
default:
|
default:
|
||||||
fmt.Println(help)
|
fmt.Println(help)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue