use udev for lvm & net
This commit is contained in:
45
regexp.go
45
regexp.go
@ -6,13 +6,36 @@ import (
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
func regexpSelectN(n int, regexps []string, names []string) (matches []string) {
|
||||
if n <= 0 {
|
||||
matches = make([]string, 0)
|
||||
} else {
|
||||
matches = make([]string, 0, n)
|
||||
type NameAliases struct {
|
||||
Name string
|
||||
Aliases []string
|
||||
}
|
||||
|
||||
func nameAlias(name string) NameAliases {
|
||||
return NameAliases{Name: name, Aliases: []string{name}}
|
||||
}
|
||||
func nameAliases(name string, aliases ...string) NameAliases {
|
||||
na := NameAliases{Name: name, Aliases: make([]string, 0, len(aliases)+1)}
|
||||
na.Aliases = append(na.Aliases, name)
|
||||
for _, alias := range aliases {
|
||||
na.AddAlias(alias)
|
||||
}
|
||||
|
||||
return na
|
||||
}
|
||||
func (na *NameAliases) AddAlias(alias string) {
|
||||
if alias == "" {
|
||||
return
|
||||
}
|
||||
if contains(na.Aliases, func(s string) bool { return s == alias }) {
|
||||
return
|
||||
}
|
||||
na.Aliases = append(na.Aliases, alias)
|
||||
}
|
||||
|
||||
func regexpSelectN(n int, regexps []string, nameAliases []NameAliases) (matches []string) {
|
||||
matches = make([]string, 0)
|
||||
|
||||
res := make([]*regexp.Regexp, 0, len(regexps))
|
||||
for _, reStr := range regexps {
|
||||
re, err := regexp.Compile(reStr)
|
||||
@ -23,15 +46,17 @@ func regexpSelectN(n int, regexps []string, names []string) (matches []string) {
|
||||
res = append(res, re)
|
||||
}
|
||||
|
||||
namesLoop:
|
||||
for _, name := range names {
|
||||
nameAliasesLoop:
|
||||
for _, item := range nameAliases {
|
||||
if len(matches) == n {
|
||||
break
|
||||
}
|
||||
for _, re := range res {
|
||||
if re.MatchString(name) {
|
||||
matches = append(matches, name)
|
||||
continue namesLoop
|
||||
for _, alias := range item.Aliases {
|
||||
if re.MatchString(alias) {
|
||||
matches = append(matches, item.Name)
|
||||
continue nameAliasesLoop
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user