X-Git-Url: http://www.git.cypherpunks.ru/?p=goredo.git;a=blobdiff_plain;f=dep.go;h=38d8bb79c200ede2acedeb9ce357fe313211d7c2;hp=897be43c6bd0ec3a5daae788331af9acd3351f0c;hb=14398260feaf14dac68b9bdb1c810ccba7d1e768;hpb=edb601644735972fac3efcdc27849b5b9b1f5fb7 diff --git a/dep.go b/dep.go index 897be43..38d8bb7 100644 --- a/dep.go +++ b/dep.go @@ -28,10 +28,10 @@ import ( "os" "path" "strings" - "syscall" "go.cypherpunks.ru/recfile" "golang.org/x/crypto/blake2b" + "golang.org/x/sys/unix" ) func recfileWrite(fdDep *os.File, fields ...recfile.Field) error { @@ -74,12 +74,11 @@ func stamp(fdDep, src *os.File) error { } func fileCtime(fd *os.File) (string, error) { - fi, err := fd.Stat() - if err != nil { + var stat unix.Stat_t + if err := unix.Fstat(int(fd.Fd()), &stat); err != nil { return "", err } - stat := fi.Sys().(*syscall.Stat_t) - sec, nsec := stat.Ctimespec.Unix() + sec, nsec := stat.Ctim.Unix() return fmt.Sprintf("%d.%d", sec, nsec), nil } @@ -101,6 +100,13 @@ func writeDep(fdDep *os.File, cwd, tgt string) error { return err } defer fd.Close() + fi, err := fd.Stat() + if err != nil { + return err + } + if fi.IsDir() { + return nil + } ts, err := fileCtime(fd) if err != nil { return err