]> Cypherpunks.ru repositories - goredo.git/blobdiff - ifchange.go
Optimise memory storage of dependency information
[goredo.git] / ifchange.go
index 0b8d694ff730023e71d4dcb2d3314fe84a5328b0..84bd2607bafad1011c23f908f27a0d7a62e17561 100644 (file)
@@ -18,7 +18,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 package main
 
 import (
-       "os"
        "path"
        "strings"
 )
@@ -36,15 +35,11 @@ func collectDeps(
                return nil
        }
        depPath := path.Join(cwd, RedoDir, tgt+DepSuffix)
-       fdDep, err := os.Open(depPath)
-       if err != nil {
-               return nil
-       }
-       depInfo, err := depRead(fdDep)
-       fdDep.Close()
+       depInfo, err := depRead(depPath)
        if err != nil {
                return nil
        }
+       // DepInfoCache[depPath] = depInfo
        seen[tgtFull] = struct{}{}
        var alwayses []string
        returnReady := false
@@ -62,19 +57,18 @@ func collectDeps(
                        returnReady = true
                }
        }
-       for _, m := range depInfo.ifchanges {
-               dep := m["Target"]
-               if dep == "" {
+       for _, dep := range depInfo.ifchanges {
+               if dep.tgt == "" {
                        return alwayses
                }
-               if dep == tgt {
+               if dep.tgt == tgt {
                        continue
                }
-               if !includeSrc && isSrc(cwd, dep) {
+               if !includeSrc && isSrc(cwd, dep.tgt) {
                        continue
                }
                if !returnReady {
-                       depRel := cwdMustRel(cwd, dep)
+                       depRel := cwdMustRel(cwd, dep.tgt)
                        if m, ok := deps[depRel]; ok {
                                m[tgtRel] = struct{}{}
                        } else {
@@ -83,7 +77,7 @@ func collectDeps(
                                deps[depRel] = m
                        }
                        alwayses = append(alwayses,
-                               collectDeps(cwd, dep, level+1, deps, includeSrc, seen)...)
+                               collectDeps(cwd, dep.tgt, level+1, deps, includeSrc, seen)...)
                }
        }
        return alwayses