X-Git-Url: http://www.git.cypherpunks.ru/?p=goredo.git;a=blobdiff_plain;f=dep.go;h=5d602f52bc6d6900830d0a468ffb70db8ed32dd9;hp=bf5e75809a3e985e5e950da10b5ff135db4d8cd3;hb=b4eefdd675c9aef9ff8bd1089d031ee05733195b;hpb=d8abe40c66df8d79a025524c0d230959cacf9465 diff --git a/dep.go b/dep.go index bf5e758..5d602f5 100644 --- a/dep.go +++ b/dep.go @@ -1,6 +1,6 @@ /* goredo -- djb's redo implementation on pure Go -Copyright (C) 2020-2021 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 @@ -86,7 +86,7 @@ func fileHash(fd *os.File) (string, error) { return hex.EncodeToString(h.Sum(nil)), nil } -func writeDep(fdDep *os.File, cwd, tgt string) error { +func depWrite(fdDep *os.File, cwd, tgt, hsh string) error { tracef(CDebug, "ifchange: %s <- %s", fdDep.Name(), tgt) fd, err := os.Open(path.Join(cwd, tgt)) if err != nil { @@ -100,13 +100,15 @@ func writeDep(fdDep *os.File, cwd, tgt string) error { if fi.IsDir() { return nil } - inode, err := inodeFromFile(fd) + inode, err := inodeFromFileByFd(fd) if err != nil { return err } - hsh, err := fileHash(fd) - if err != nil { - return err + if hsh == "" { + hsh, err = fileHash(fd) + if err != nil { + return err + } } fields := []recfile.Field{ {Name: "Type", Value: DepTypeIfchange}, @@ -117,7 +119,7 @@ func writeDep(fdDep *os.File, cwd, tgt string) error { return recfileWrite(fdDep, fields...) } -func writeDeps(fdDep *os.File, tgts []string) error { +func depsWrite(fdDep *os.File, tgts []string) error { if fdDep == nil { tracef(CDebug, "no opened fdDep: %s", tgts) return nil @@ -137,7 +139,7 @@ func writeDeps(fdDep *os.File, tgts []string) error { panic(err) } if _, errStat := os.Stat(tgt); errStat == nil { - err = writeDep(fdDep, tgtDir, tgtRel) + err = depWrite(fdDep, tgtDir, tgtRel, "") } else { tracef(CDebug, "ifchange: %s <- %s (non-existing)", fdDep.Name(), tgtRel) fields := []recfile.Field{