X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=ifchange.go;h=cbf1c05dbebb81014ad668903d2962c8a9f3fb0c;hb=fed124f1460226ab037657bac5717bdb49bf6b78;hp=913ddba83ee8f5a1fc9db0c7fa4df1bf4e922066;hpb=b813667339b846924bb87a30f0c12bc998154ff6;p=goredo.git diff --git a/ifchange.go b/ifchange.go index 913ddba..cbf1c05 100644 --- a/ifchange.go +++ b/ifchange.go @@ -1,6 +1,6 @@ /* goredo -- djb's redo implementation on pure Go -Copyright (C) 2020-2022 Sergey Matveev +Copyright (C) 2020-2023 Sergey Matveev 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 @@ -98,7 +98,7 @@ func buildDependants(tgts []string) map[string]struct{} { } } if len(seen) == 0 { - return nil + return seen } levelOrig := Level @@ -135,17 +135,18 @@ func buildDependants(tgts []string) map[string]struct{} { 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) @@ -196,6 +197,9 @@ func ifchange(tgts []string, forced, traced bool) (bool, error) { } defer Jobs.Wait() seen := buildDependants(tgts) + if seen == nil { + return false, nil + } oodTgtsClear() tracef(CDebug, "building %d targets: %v", len(tgts), tgts) jobs := 0