"io"
"os"
"path"
- "path/filepath"
"strings"
)
func targetsCollect(root string, tgts map[string]struct{}) error {
- root, err := filepath.Abs(root)
- if err != nil {
- panic(err)
- }
dir, err := os.Open(root)
if err != nil {
return ErrLine(err)
}
func targetsWalker(tgts []string) ([]string, error) {
- tgtsMap := map[string]struct{}{}
+ tgtsMap := make(map[string]struct{})
for _, tgt := range tgts {
- if err := targetsCollect(tgt, tgtsMap); err != nil {
+ if err := targetsCollect(mustAbs(tgt), tgtsMap); err != nil {
return nil, err
}
}
}
func collectWholeDeps(
- tgts map[string]struct{},
- deps map[string]map[string]struct{},
- seen map[string]struct{},
+ tgts map[string]*Tgt,
+ deps map[string]map[string]*Tgt,
+ seen map[string]*Tgt,
) {
- for tgt := range tgts {
- seen[tgt] = struct{}{}
- collectWholeDeps(deps[tgt], deps, seen)
+ for _, tgt := range tgts {
+ if _, exists := seen[tgt.rel]; exists {
+ continue
+ }
+ seen[tgt.rel] = tgt
+ collectWholeDeps(deps[tgt.rel], deps, seen)
}
}