Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
fix: parallel running - refactor code
  • Loading branch information
oprudkyi committed Oct 27, 2025
commit 798146bcdae633f89ef44707c2e527de3412f0a6
7 changes: 3 additions & 4 deletions flag.go
Original file line number Diff line number Diff line change
Expand Up @@ -227,9 +227,8 @@ func flagSplitMultiValues(val string, sliceSeparator string, disableSliceSeparat
return []string{val}
}

if len(sliceSeparator) != 0 {
return strings.Split(val, sliceSeparator)
} else {
return strings.Split(val, defaultSliceFlagSeparator)
if len(sliceSeparator) == 0 {
sliceSeparator = defaultSliceFlagSeparator
}
return strings.Split(val, sliceSeparator)
}
35 changes: 22 additions & 13 deletions flag_map_impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,10 @@ import (

// MapBase wraps map[string]T to satisfy flag.Value
type MapBase[T any, C any, VC ValueCreator[T, C]] struct {
dict *map[string]T
hasBeenSet bool
value Value
sliceSeparator string
disableSliceSeparator bool
keyValueSeparator string
dict *map[string]T
hasBeenSet bool
value Value
multiValueConfig multiValueParsingConfig
}

func (i MapBase[T, C, VC]) Create(val map[string]T, p *map[string]T, c C) Value {
Expand All @@ -41,10 +39,14 @@ func NewMapBase[T any, C any, VC ValueCreator[T, C]](defaults map[string]T) *Map

// configuration of slicing
func (i *MapBase[T, C, VC]) setMultiValueParsingConfig(c multiValueParsingConfig) {
i.disableSliceSeparator = c.DisableSliceFlagSeparator
i.sliceSeparator = c.SliceFlagSeparator
i.keyValueSeparator = c.MapFlagKeyValueSeparator
tracef("set map parsing config - keyValueSeparator '%s', slice separator '%s', disable separator:%v", i.keyValueSeparator, i.sliceSeparator, i.disableSliceSeparator)
i.multiValueConfig = c
mvc := &i.multiValueConfig
tracef(
"set map parsing config - keyValueSeparator '%s', slice separator '%s', disable separator:%v",
mvc.MapFlagKeyValueSeparator,
mvc.SliceFlagSeparator,
mvc.DisableSliceFlagSeparator,
)
}

// Set parses the value and appends it to the list of values
Expand All @@ -61,13 +63,20 @@ func (i *MapBase[T, C, VC]) Set(value string) error {
return nil
}

keyValueSeparator := i.keyValueSeparator
mvc := &i.multiValueConfig
keyValueSeparator := mvc.MapFlagKeyValueSeparator
if len(keyValueSeparator) == 0 {
keyValueSeparator = defaultMapFlagKeyValueSeparator
}

tracef("splitting map value '%s', keyValueSeparator '%s', slice separator '%s', disable separator:%v", value, keyValueSeparator, i.sliceSeparator, i.disableSliceSeparator)
for _, item := range flagSplitMultiValues(value, i.sliceSeparator, i.disableSliceSeparator) {
tracef(
"splitting map value '%s', keyValueSeparator '%s', slice separator '%s', disable separator:%v",
value,
keyValueSeparator,
mvc.SliceFlagSeparator,
mvc.DisableSliceFlagSeparator,
)
for _, item := range flagSplitMultiValues(value, mvc.SliceFlagSeparator, mvc.DisableSliceFlagSeparator) {
key, value, ok := strings.Cut(item, keyValueSeparator)
if !ok {
return fmt.Errorf("item %q is missing separator %q", item, keyValueSeparator)
Expand Down