/*
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
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 {
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},
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{