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