}
}
if len(seen) == 0 {
- return nil
+ return seen
}
levelOrig := Level
tracef(CDebug, "building %d alwayses: %v", len(seen), seen)
errs := make(chan error, len(seen))
for tgt := range seen {
- if err := runScript(tgt, errs, false); err != nil {
+ if err := runScript(tgt, errs, false, false); err != nil {
tracef(CErr, "always run error: %s, skipping dependants", err)
return nil
}
RebuildDeps:
tracef(CDebug, "checking %d dependant targets: %v", len(queueSrc), queueSrc)
- queue := []string{}
+ queue := map[string]struct{}{}
for _, tgt := range queueSrc {
for dep := range deps[tgt] {
- queue = append(queue, dep)
+ queue[dep] = struct{}{}
}
}
+
tracef(CDebug, "building %d dependant targets: %v", len(queue), queue)
errs = make(chan error, len(queue))
jobs := 0
queueSrc = []string{}
- for _, tgt := range queue {
+ for tgt := range queue {
ood, err := isOODWithTrace(Cwd, tgt, 0, seen)
if err != nil {
tracef(CErr, "dependant error: %s, skipping dependants", err)
if !ood {
continue
}
- if err := runScript(tgt, errs, false); err != nil {
+ if err := runScript(tgt, errs, false, false); err != nil {
tracef(CErr, "dependant error: %s, skipping dependants", err)
return nil
}
}
defer Jobs.Wait()
seen := buildDependants(tgts)
+ if seen == nil {
+ return false, nil
+ }
oodTgtsClear()
tracef(CDebug, "building %d targets: %v", len(tgts), tgts)
jobs := 0
tracef(CDebug, "%s is source, not redoing", tgt)
continue
}
- if err = runScript(tgt, errs, traced); err != nil {
+ if err = runScript(tgt, errs, forced, traced); err != nil {
return false, err
}
jobs++