X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=dep.go;h=d819440a18b57909e05e387941030fc84482aa95;hb=ae56a3b66db9f60612f656b0046427ef139c2119;hp=539ef5791e3011f53e84add54b50ee671b103f3d;hpb=b42c8c2dba5ea7667c32681338930969ed5c1cdb;p=goredo.git diff --git a/dep.go b/dep.go index 539ef57..d819440 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-2022 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 depWrite(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 depWrite(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}, @@ -137,7 +139,7 @@ func depsWrite(fdDep *os.File, tgts []string) error { panic(err) } if _, errStat := os.Stat(tgt); errStat == nil { - err = depWrite(fdDep, tgtDir, tgtRel) + err = depWrite(fdDep, tgtDir, tgtRel, "") } else { tracef(CDebug, "ifchange: %s <- %s (non-existing)", fdDep.Name(), tgtRel) fields := []recfile.Field{