drone-plugin-lib/drone/types.go

43 lines
851 B
Go

package drone
import (
"strings"
)
// StringSliceFlag is a flag type which support comma separated values and escaping to not split at unwanted lines.
type StringSliceFlag struct {
slice []string
}
func (s *StringSliceFlag) String() string {
return strings.Join(s.slice, " ")
}
func (s *StringSliceFlag) Set(value string) error {
s.slice = splitWithEscaping(value, ",", "\\")
return nil
}
func (s *StringSliceFlag) Get() []string {
return s.slice
}
func splitWithEscaping(in, separator, escapeString string) []string {
if len(in) == 0 {
return []string{}
}
out := strings.Split(in, separator)
//nolint:gomnd
for i := len(out) - 2; i >= 0; i-- {
if strings.HasSuffix(out[i], escapeString) {
out[i] = out[i][:len(out[i])-len(escapeString)] + separator + out[i+1]
out = append(out[:i+1], out[i+2:]...)
}
}
return out
}