wip
cicd / ci (push) Failing after 1m54s Details

main
Bel LaPointe 2024-12-12 21:16:02 -07:00
parent e4d60a9e73
commit d1b3da3fa3
3 changed files with 121 additions and 0 deletions

11
cmd/cli/config.go Normal file
View File

@ -0,0 +1,11 @@
package cli
type Config struct {
Files FileList
Query struct {
Period string
Sort string
NoRounding bool
Depth int
}
}

35
cmd/cli/flag.go Normal file
View File

@ -0,0 +1,35 @@
package cli
import (
"fmt"
"os"
"strings"
)
type FlagStringArray []string
func (array *FlagStringArray) String() string {
return strings.Join(*array, ", ")
}
func (array *FlagStringArray) Set(s string) error {
*array = append(*array, s)
return nil
}
type FileList FlagStringArray
func (fileList FileList) Strings() []string {
return ([]string)(fileList)
}
func (fileList *FileList) String() string {
return (*FlagStringArray)(fileList).String()
}
func (fileList *FileList) Set(s string) error {
if _, err := os.Stat(s); os.IsNotExist(err) {
return fmt.Errorf("file does not exist: %s", s)
}
return (*FlagStringArray)(fileList).Set(s)
}

View File

@ -3,11 +3,86 @@ package cli
import ( import (
"flag" "flag"
"os" "os"
"slices"
"gogs.inhome.blapointe.com/ana-ledger/src/ledger"
) )
func Main() { func Main() {
var config Config
fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) fs := flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
fs.Var(&config.Files, "f", "paths to files")
fs.StringVar(&config.Query.Period, "period", "", "period")
fs.StringVar(&config.Query.Sort, "S", "", "sort ie date")
fs.BoolVar(&config.Query.NoRounding, "no-rounding", false, "no rounding")
fs.IntVar(&config.Query.Depth, "depth", 0, "depth grouping")
if err := fs.Parse(os.Args[1:]); err != nil { if err := fs.Parse(os.Args[1:]); err != nil {
panic(err) panic(err)
} }
files := config.Files.Strings()
if len(files) == 0 {
panic("must specify at least one file")
}
ledgerFiles, err := ledger.NewFiles(files[0], files[1:]...)
if err != nil {
panic(err)
}
positional := fs.Args()
if len(positional) == 0 || len(positional[0]) < 3 {
panic("positional arguments required, ie bal|reg PATTERN MATCHING")
}
cmd := positional[0]
likes := []ledger.Like{}
for _, query := range positional[1:] {
panic(query)
}
deltas, err := ledgerFiles.Deltas(likes...)
if err != nil {
panic(err)
}
if depth := config.Query.Depth; depth > 0 {
panic(depth)
}
switch cmd[:3] {
case "bal":
balances := deltas.Balances()
keys := []string{}
for k := range balances {
keys = append(keys, k)
}
slices.Sort(keys)
depth := 0
previous := ""
for i := range keys {
key := keys[i]
if isSameDepth := func() bool {
return false
}(); isSameDepth {
} else if isDeeper := func() bool {
return false
}(); isDeeper {
} else if lessDeep := func() int {
return 0
}(); true {
}
previous = key
}
panic(balances.Debug())
case "reg":
// register := deltas.Register()
default:
panic("unknown command " + positional[0])
}
} }