github.com/beauknowssoftware/makehcl@v0.0.0-20200322000747-1b9bb1e1c008/internal/targets/targets.go (about)

     1  package targets
     2  
     3  import (
     4  	"sort"
     5  
     6  	"github.com/beauknowssoftware/makehcl/internal/definition"
     7  	"github.com/beauknowssoftware/makehcl/internal/parse"
     8  )
     9  
    10  type Plan []definition.Target
    11  
    12  type ParseOptions = parse.Options
    13  
    14  type Options struct {
    15  	Sort        bool
    16  	CommandOnly bool
    17  	RuleOnly    bool
    18  }
    19  
    20  type DoOptions struct {
    21  	ParseOptions
    22  	Options
    23  }
    24  
    25  func Do(o DoOptions) ([]definition.Target, error) {
    26  	d, err := parse.Parse(o.ParseOptions)
    27  	if err != nil {
    28  		return nil, err
    29  	}
    30  
    31  	rules := d.Rules()
    32  	r := make([]definition.Target, 0, len(rules))
    33  
    34  	for _, rl := range rules {
    35  		switch {
    36  		case o.RuleOnly && !rl.IsPhony:
    37  			r = append(r, rl.Target)
    38  		case o.CommandOnly && rl.IsPhony:
    39  			r = append(r, rl.Target)
    40  		case !o.RuleOnly && !o.CommandOnly:
    41  			r = append(r, rl.Target)
    42  		}
    43  	}
    44  
    45  	if o.Sort {
    46  		sort.Strings(r)
    47  	}
    48  
    49  	return r, nil
    50  }