/*
-goredo -- redo implementation on pure Go
-Copyright (C) 2020 Sergey Matveev <stargrave@stargrave.org>
+goredo -- djb's redo implementation on pure Go
+Copyright (C) 2020-2021 Sergey Matveev <stargrave@stargrave.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
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 {
Level = 1
trace(CDebug, "building %d alwayses: %v", len(seen), seen)
errs := make(chan error, len(seen))
- for tgt, _ := range seen {
+ for tgt := range seen {
if err := runScript(tgt, errs, false); err != nil {
trace(CErr, "always run error: %s, skipping dependants", err)
return nil
Jobs.Wait()
close(errs)
if !ok {
- trace(CDebug, "alwayses failed, skipping depdendants")
+ trace(CDebug, "alwayses failed, skipping dependants")
return nil
}
queueSrc := make([]string, 0, len(seen))
- for tgt, _ := range seen {
+ for tgt := range seen {
queueSrc = append(queueSrc, tgt)
}
if len(queueSrc) == 0 {
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)
}
}
var err error
for _, tgt := range tgts {
if _, ok := seen[tgt]; ok {
- trace(CDebug, "%s was already build as a dependenant", tgt)
+ trace(CDebug, "%s was already build as a dependant", tgt)
continue
}
ood = true