From: Sergey Matveev Date: Fri, 29 Sep 2023 19:51:01 +0000 (+0300) Subject: Remove excess stat call X-Git-Tag: v2.0.0~36 X-Git-Url: http://www.git.cypherpunks.ru/?p=goredo.git;a=commitdiff_plain;h=11bfb76bd12f2898c22b86dfeb3241607db5557a Remove excess stat call --- diff --git a/dep.go b/dep.go index 9792cb0..18f5db6 100644 --- a/dep.go +++ b/dep.go @@ -92,17 +92,13 @@ func depWrite(fdDep *os.File, cwd, tgt, hsh string) error { return ErrLine(err) } defer fd.Close() - fi, err := fd.Stat() + inode, isDir, err := inodeFromFileByFd(fd) if err != nil { - return err + return ErrLine(err) } - if fi.IsDir() { + if isDir { return nil } - inode, err := inodeFromFileByFd(fd) - if err != nil { - return err - } if hsh == "" { hsh, err = fileHash(fd) if err != nil { diff --git a/depfix.go b/depfix.go index 376c922..1f29122 100644 --- a/depfix.go +++ b/depfix.go @@ -121,7 +121,7 @@ func depFix(root string) error { } return ErrLine(err) } - inode, err := inodeFromFileByFd(fd) + inode, _, err := inodeFromFileByFd(fd) if err != nil { fd.Close() return ErrLine(err) diff --git a/inode.go b/inode.go index 50db586..2f2285d 100644 --- a/inode.go +++ b/inode.go @@ -96,17 +96,22 @@ func inodeFromFileStat(fi os.FileInfo, stat unix.Stat_t) *Inode { } } -func inodeFromFileByFd(fd *os.File) (*Inode, error) { +func inodeFromFileByFd(fd *os.File) (inode *Inode, isDir bool, err error) { fi, err := fd.Stat() if err != nil { - return nil, err + return + } + if fi.IsDir() { + isDir = true + return } var stat unix.Stat_t err = unix.Fstat(int(fd.Fd()), &stat) if err != nil { - return nil, err + return } - return inodeFromFileStat(fi, stat), nil + inode = inodeFromFileStat(fi, stat) + return } func inodeFromFileByPath(p string) (*Inode, error) {