]> Cypherpunks.ru repositories - goredo.git/blobdiff - ifchange.go
Redundant @documentencoding
[goredo.git] / ifchange.go
index 913ddba83ee8f5a1fc9db0c7fa4df1bf4e922066..4a43872c2cf35b4ec4a8ae0a97739f6b0de5bb1b 100644 (file)
@@ -1,6 +1,6 @@
 /*
 goredo -- djb's redo implementation on pure Go
-Copyright (C) 2020-2022 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2020-2023 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
@@ -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