Filter By Hak Name
This commit is contained in:
@@ -220,6 +220,55 @@ func (p *Project) BuildDir() string {
|
||||
return filepath.Join(p.Root, p.Config.Paths.Build)
|
||||
}
|
||||
|
||||
func (p *Project) CloneWithHAKNames(names []string) (*Project, error) {
|
||||
if len(names) == 0 {
|
||||
return p, nil
|
||||
}
|
||||
|
||||
wanted := make(map[string]struct{}, len(names))
|
||||
for _, name := range names {
|
||||
trimmed := strings.TrimSpace(strings.ToLower(name))
|
||||
if trimmed == "" {
|
||||
continue
|
||||
}
|
||||
wanted[trimmed] = struct{}{}
|
||||
}
|
||||
if len(wanted) == 0 {
|
||||
return p, nil
|
||||
}
|
||||
|
||||
filtered := make([]HAKConfig, 0, len(p.Config.HAKs))
|
||||
found := make(map[string]struct{}, len(wanted))
|
||||
for _, hak := range p.Config.HAKs {
|
||||
key := strings.ToLower(strings.TrimSpace(hak.Name))
|
||||
if _, ok := wanted[key]; !ok {
|
||||
continue
|
||||
}
|
||||
filtered = append(filtered, hak)
|
||||
found[key] = struct{}{}
|
||||
}
|
||||
|
||||
var missing []string
|
||||
for _, name := range names {
|
||||
key := strings.TrimSpace(strings.ToLower(name))
|
||||
if key == "" {
|
||||
continue
|
||||
}
|
||||
if _, ok := found[key]; !ok {
|
||||
missing = append(missing, name)
|
||||
}
|
||||
}
|
||||
if len(missing) > 0 {
|
||||
return nil, fmt.Errorf("unknown hak name(s): %s", strings.Join(missing, ", "))
|
||||
}
|
||||
|
||||
clone := *p
|
||||
clone.Config = p.Config
|
||||
clone.Config.HAKs = filtered
|
||||
clone.Inventory = p.Inventory
|
||||
return &clone, nil
|
||||
}
|
||||
|
||||
func (p *Project) HasTopData() bool {
|
||||
return strings.TrimSpace(p.Config.TopData.Source) != ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user