level int,
deps map[string]map[string]struct{},
includeSrc bool,
+ seen map[string]struct{},
) []string {
cwd, tgt := cwdAndTgt(path.Join(cwd, tgtOrig))
+ tgtFull := path.Join(cwd, tgt)
+ if _, ok := seen[tgtFull]; ok {
+ return nil
+ }
depPath := path.Join(cwd, RedoDir, tgt+DepSuffix)
fdDep, err := os.Open(depPath)
if err != nil {
if err != nil {
return nil
}
+ seen[tgtFull] = struct{}{}
var alwayses []string
returnReady := false
tgtRel := cwdMustRel(cwd, tgt)
m[tgtRel] = struct{}{}
deps[depRel] = m
}
- alwayses = append(
- alwayses,
- collectDeps(cwd, dep, level+1, deps, includeSrc)...,
- )
+ alwayses = append(alwayses,
+ collectDeps(cwd, dep, level+1, deps, includeSrc, seen)...)
}
}
return alwayses
tracef(CDebug, "collecting deps")
seen := map[string]struct{}{}
deps := map[string]map[string]struct{}{}
+ collectDepsSeen := make(map[string]struct{})
for _, tgtInitial := range tgts {
- for _, tgt := range collectDeps(Cwd, tgtInitial, 0, deps, false) {
+ for _, tgt := range collectDeps(Cwd, tgtInitial, 0, deps, false, collectDepsSeen) {
if tgt != tgtInitial {
seen[tgt] = struct{}{}
}
if len(seen) == 0 {
return seen
}
+ collectDepsSeen = nil
levelOrig := Level
defer func() {
}
deps := map[string]map[string]struct{}{}
for _, tgt := range tgtsKnown {
- collectDeps(Cwd, tgt, 0, deps, true)
+ collectDeps(Cwd, tgt, 0, deps, true, map[string]struct{}{})
}
seen := map[string]struct{}{}
for _, tgt := range tgts {