From d51760f410577d926601a14d6b8d4c944dfc4be7 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Mon, 4 Dec 2023 07:48:24 +0100 Subject: [PATCH] lib/scanner: Record inode change time for directories and symlinks (#9250) --- lib/scanner/walk.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/scanner/walk.go b/lib/scanner/walk.go index c92427a1f..e971b909c 100644 --- a/lib/scanner/walk.go +++ b/lib/scanner/walk.go @@ -688,6 +688,13 @@ func CreateFileInfo(fi fs.FileInfo, name string, filesystem fs.Filesystem, scanO return protocol.FileInfo{}, fmt.Errorf("reading platform data: %w", err) } } + + if ct := fi.InodeChangeTime(); !ct.IsZero() { + f.InodeChangeNs = ct.UnixNano() + } else { + f.InodeChangeNs = 0 + } + if fi.IsSymlink() { f.Type = protocol.FileInfoTypeSymlink target, err := filesystem.ReadSymlink(name) @@ -698,19 +705,18 @@ func CreateFileInfo(fi fs.FileInfo, name string, filesystem fs.Filesystem, scanO f.NoPermissions = true // Symlinks don't have permissions of their own return f, nil } + f.Permissions = uint32(fi.Mode() & fs.ModePerm) f.ModifiedS = fi.ModTime().Unix() f.ModifiedNs = fi.ModTime().Nanosecond() + if fi.IsDir() { f.Type = protocol.FileInfoTypeDirectory return f, nil } + f.Size = fi.Size() f.Type = protocol.FileInfoTypeFile - if ct := fi.InodeChangeTime(); !ct.IsZero() { - f.InodeChangeNs = ct.UnixNano() - } else { - f.InodeChangeNs = 0 - } + return f, nil }