X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=dep.go;h=0e4f24fb0a1ef8872145d2715271f8eb5cff8adc;hb=3c87984511180d7bf865574123195588ea8c044c;hp=539ef5791e3011f53e84add54b50ee671b103f3d;hpb=b42c8c2dba5ea7667c32681338930969ed5c1cdb;p=goredo.git diff --git a/dep.go b/dep.go index 539ef57..0e4f24f 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 { @@ -104,9 +104,11 @@ func depWrite(fdDep *os.File, cwd, tgt string) error { 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{