diff --git a/main.go b/main.go index 49f4dee..24745f8 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,44 @@ package main -import "fmt" +import ( + "fmt" + "os" + "strings" +) + +// StringSliceFlag with correct precedence: CLI args override env vars. +// The bug: CLI arguments append to env vars instead of overriding. +// Fix: If CLI args are provided, use them exclusively (ignore env vars). +type StringSliceFlag struct { + Name string + EnvVar string + values []string + set bool +} + +func (f *StringSliceFlag) Set(value string) { + if !f.set { + f.values = nil // clear env var values on first CLI set + f.set = true + } + f.values = append(f.values, value) +} + +func (f *StringSliceFlag) Values() []string { + if f.set { + return f.values // CLI args take precedence + } + if env := os.Getenv(f.EnvVar); env != "" { + return strings.Split(env, ",") + } + return f.values +} func main() { - fmt.Println("Hello, Bounty Hunter!") + flag := &StringSliceFlag{Name: "tags", EnvVar: "TAGS"} + os.Setenv("TAGS", "env1,env2") + fmt.Printf("Env values: %v\n", flag.Values()) + flag.Set("cli1") + flag.Set("cli2") + fmt.Printf("CLI values: %v (should override env)\n", flag.Values()) }