Add golangci-lint config

This commit is contained in:
2026-02-12 02:54:35 +03:00
parent f22111aa43
commit 9e59fa18e4
14 changed files with 112 additions and 50 deletions

View File

@@ -35,7 +35,7 @@ func (f *FS) prepareDirectories() error {
// Create the structure for the virtual filesystem.
for _, dir := range []string{f.destinationDir, f.cacheDir, f.metadataDir} {
if err := os.MkdirAll(dir, 0755); err != nil {
if err := os.MkdirAll(dir, 0o755); err != nil {
f.app.Logger().WithField("path", dir).Error("Operation on directory was unsuccessful")
return fmt.Errorf("%w: %w (%w)", ErrFilesystem, ErrFailedToCreateDestinationDirectory, err)

View File

@@ -2,6 +2,7 @@ package filesystem
import (
"context"
"errors"
"io"
"os"
"sync"
@@ -33,7 +34,7 @@ func (fi *File) Read(ctx context.Context, dest []byte, off int64) (fuse.ReadResu
}
n, err := fi.file.Read(dest)
if err != nil && err != io.EOF {
if err != nil && !errors.Is(err, io.EOF) {
return nil, syscall.EIO
}

View File

@@ -30,7 +30,7 @@ var (
func (m *MusicAppMetadataFile) Getattr(ctx context.Context, fh fs.FileHandle, out *fuse.AttrOut) syscall.Errno {
info, err := os.Stat(m.path)
if err != nil {
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = m.StableAttr().Ino
out.Size = 0
@@ -57,7 +57,7 @@ func (m *MusicAppMetadataFile) Getattr(ctx context.Context, fh fs.FileHandle, ou
func (m *MusicAppMetadataFile) Setattr(ctx context.Context, fh fs.FileHandle, in *fuse.SetAttrIn, out *fuse.AttrOut) syscall.Errno {
info, err := os.Stat(m.path)
if err != nil {
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = m.StableAttr().Ino
out.Size = 0
@@ -90,7 +90,7 @@ func (m *MusicAppMetadataFile) Create(ctx context.Context, name string, flags ui
Ino: m.f.nextInode(),
})
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = ch.StableAttr().Ino
out.Size = 0
@@ -104,12 +104,12 @@ func (m *MusicAppMetadataFile) Create(ctx context.Context, name string, flags ui
func (m *MusicAppMetadataFile) Open(ctx context.Context, flags uint32) (fh fs.FileHandle, fuseFlags uint32, errno syscall.Errno) {
if _, err := os.Stat(m.path); os.IsNotExist(err) {
if err := os.WriteFile(m.path, []byte{}, 0644); err != nil {
if err := os.WriteFile(m.path, []byte{}, 0o644); err != nil {
return nil, 0, syscall.EIO
}
}
file, err := os.OpenFile(m.path, int(flags), 0644)
file, err := os.OpenFile(m.path, int(flags), 0o644)
if err != nil {
return nil, 0, syscall.EIO
}
@@ -135,6 +135,7 @@ func (m *MusicAppMetadataFile) Unlink(ctx context.Context, name string) syscall.
if err := os.Remove(m.path); err != nil {
return syscall.ENOENT
}
return 0
}

View File

@@ -34,7 +34,7 @@ var (
)
func (d *MusicDir) Getattr(ctx context.Context, f fs.FileHandle, out *fuse.AttrOut) syscall.Errno {
out.Mode = fuse.S_IFDIR | 0755
out.Mode = fuse.S_IFDIR | 0o755
out.Nlink = 2 // Minimum . and ..
out.Ino = d.StableAttr().Ino
out.Size = 4096
@@ -77,6 +77,7 @@ func (d *MusicDir) Getxattr(ctx context.Context, attr string, dest []byte) (uint
if len(dest) > 0 {
return 0, 0
}
return 0, 0
default:
return 0, syscall.ENODATA
@@ -113,7 +114,7 @@ func (d *MusicDir) Create(ctx context.Context, name string, flags uint32, mode u
},
)
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = ch.StableAttr().Ino
out.Size = 0
@@ -144,7 +145,7 @@ func (d *MusicDir) Lookup(ctx context.Context, name string, out *fuse.EntryOut)
},
)
out.Mode = fuse.S_IFREG | 0444
out.Mode = fuse.S_IFREG | 0o444
out.Nlink = 1
out.Ino = ch.StableAttr().Ino
@@ -165,6 +166,7 @@ func (d *MusicDir) Lookup(ctx context.Context, name string, out *fuse.EntryOut)
// Check real file or directory
fullPath := filepath.Join(d.path, name)
info, err := os.Stat(fullPath)
if err != nil {
return nil, syscall.ENOENT
@@ -179,7 +181,7 @@ func (d *MusicDir) Lookup(ctx context.Context, name string, out *fuse.EntryOut)
},
)
out.Mode = fuse.S_IFDIR | 0755
out.Mode = fuse.S_IFDIR | 0o755
out.Nlink = 2
out.Ino = ch.StableAttr().Ino
out.Size = 4096
@@ -201,9 +203,9 @@ func (d *MusicDir) Lookup(ctx context.Context, name string, out *fuse.EntryOut)
)
if isMeta {
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
} else {
out.Mode = fuse.S_IFREG | 0444
out.Mode = fuse.S_IFREG | 0o444
}
out.Nlink = 1
@@ -224,12 +226,12 @@ func (d *MusicDir) Readdir(ctx context.Context) (fs.DirStream, syscall.Errno) {
dirEntries = append(dirEntries, fuse.DirEntry{
Name: ".",
Mode: fuse.S_IFDIR | 0755,
Mode: fuse.S_IFDIR | 0o755,
Ino: d.StableAttr().Ino,
})
dirEntries = append(dirEntries, fuse.DirEntry{
Name: "..",
Mode: fuse.S_IFDIR | 0755,
Mode: fuse.S_IFDIR | 0o755,
Ino: 1, // Parent (root) inode
})
@@ -249,19 +251,19 @@ func (d *MusicDir) Readdir(ctx context.Context) (fs.DirStream, syscall.Errno) {
continue
}
mode := fuse.S_IFREG | 0444
mode := fuse.S_IFREG | 0o444
if entry.IsDir() {
mode = fuse.S_IFDIR | 0755
mode = fuse.S_IFDIR | 0o755
}
// Convert .flac to .m4a in directory listing
if strings.HasSuffix(strings.ToLower(name), ".flac") {
name = name[:len(name)-5] + ".m4a"
if !d.f.isiTunesMetadata(name) {
mode = fuse.S_IFREG | 0644
mode = fuse.S_IFREG | 0o644
}
} else if !d.f.isiTunesMetadata(name) {
mode = fuse.S_IFREG | 0644
mode = fuse.S_IFREG | 0o644
}
dirEntries = append(dirEntries, fuse.DirEntry{

View File

@@ -31,7 +31,7 @@ func (f *MusicFile) Getattr(ctx context.Context, fh fs.FileHandle, out *fuse.Att
metaPath := filepath.Join(f.f.metadataDir, f.virtualName)
if info, err := os.Stat(metaPath); err == nil {
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = f.StableAttr().Ino
out.Size = uint64(info.Size())
@@ -40,7 +40,7 @@ func (f *MusicFile) Getattr(ctx context.Context, fh fs.FileHandle, out *fuse.Att
out.Ctime = out.Mtime
out.Blocks = (out.Size + 511) / 512
} else {
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = f.StableAttr().Ino
out.Size = 0
@@ -53,7 +53,7 @@ func (f *MusicFile) Getattr(ctx context.Context, fh fs.FileHandle, out *fuse.Att
return 0
}
out.Mode = fuse.S_IFREG | 0444
out.Mode = fuse.S_IFREG | 0o444
out.Nlink = 1
out.Ino = f.StableAttr().Ino
out.Blocks = 1
@@ -76,7 +76,7 @@ func (f *MusicFile) Setattr(ctx context.Context, fh fs.FileHandle, in *fuse.SetA
if f.isMetaFile {
metaPath := filepath.Join(f.f.metadataDir, f.virtualName)
if info, err := os.Stat(metaPath); err == nil {
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = f.StableAttr().Ino
out.Size = uint64(info.Size())
@@ -85,7 +85,7 @@ func (f *MusicFile) Setattr(ctx context.Context, fh fs.FileHandle, in *fuse.SetA
out.Ctime = out.Mtime
out.Blocks = (out.Size + 511) / 512
} else {
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = f.StableAttr().Ino
out.Size = 0
@@ -105,10 +105,11 @@ func (f *MusicFile) Open(ctx context.Context, flags uint32) (fh fs.FileHandle, f
if f.isMetaFile {
metaPath := filepath.Join(f.f.metadataDir, f.virtualName)
file, err := os.OpenFile(metaPath, int(flags), 0644)
file, err := os.OpenFile(metaPath, int(flags), 0o644)
if err != nil && os.IsNotExist(err) {
file, err = os.Create(metaPath)
}
if err != nil {
return nil, 0, syscall.EIO
}

View File

@@ -50,7 +50,7 @@ func (r *RootDirectory) Create(
},
)
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = ch.StableAttr().Ino
out.Size = 0
@@ -77,7 +77,7 @@ func (r *RootDirectory) Lookup(ctx context.Context, name string, out *fuse.Entry
},
)
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
out.Nlink = 1
out.Ino = ch.StableAttr().Ino
@@ -114,7 +114,7 @@ func (r *RootDirectory) Lookup(ctx context.Context, name string, out *fuse.Entry
},
)
out.Mode = fuse.S_IFREG | 0444
out.Mode = fuse.S_IFREG | 0o444
out.Nlink = 1
out.Ino = ch.StableAttr().Ino
@@ -135,6 +135,7 @@ func (r *RootDirectory) Lookup(ctx context.Context, name string, out *fuse.Entry
// Check real file or directory
fullPath := filepath.Join(r.f.sourceDir, name)
info, err := os.Stat(fullPath)
if err != nil {
return nil, syscall.ENOENT
@@ -146,7 +147,7 @@ func (r *RootDirectory) Lookup(ctx context.Context, name string, out *fuse.Entry
Ino: r.f.nextInode(),
})
out.Mode = fuse.S_IFDIR | 0755
out.Mode = fuse.S_IFDIR | 0o755
out.Nlink = 2 // Minimum . and ..
out.Ino = ch.StableAttr().Ino
out.Size = 4096
@@ -166,9 +167,9 @@ func (r *RootDirectory) Lookup(ctx context.Context, name string, out *fuse.Entry
})
if isMeta {
out.Mode = fuse.S_IFREG | 0644
out.Mode = fuse.S_IFREG | 0o644
} else {
out.Mode = fuse.S_IFREG | 0444
out.Mode = fuse.S_IFREG | 0o444
}
out.Nlink = 1
@@ -190,12 +191,12 @@ func (r *RootDirectory) Readdir(ctx context.Context) (fs.DirStream, syscall.Errn
// Always include . and .. first
dirEntries = append(dirEntries, fuse.DirEntry{
Name: ".",
Mode: fuse.S_IFDIR | 0755,
Mode: fuse.S_IFDIR | 0o755,
Ino: 1, // Root inode
})
dirEntries = append(dirEntries, fuse.DirEntry{
Name: "..",
Mode: fuse.S_IFDIR | 0755,
Mode: fuse.S_IFDIR | 0o755,
Ino: 1,
})
@@ -205,6 +206,7 @@ func (r *RootDirectory) Readdir(ctx context.Context) (fs.DirStream, syscall.Errn
r.f.app.Logger().WithError(err).WithField("path", r.f.sourceDir).Error(
"Error reading directory",
)
return fs.NewListDirStream(dirEntries), 0
}
@@ -215,9 +217,9 @@ func (r *RootDirectory) Readdir(ctx context.Context) (fs.DirStream, syscall.Errn
continue
}
mode := fuse.S_IFREG | 0444
mode := fuse.S_IFREG | 0o444
if entry.IsDir() {
mode = fuse.S_IFDIR | 0755
mode = fuse.S_IFDIR | 0o755
}
// Convert .flac to .m4a in directory listing
@@ -225,7 +227,7 @@ func (r *RootDirectory) Readdir(ctx context.Context) (fs.DirStream, syscall.Errn
name = name[:len(name)-5] + ".m4a"
}
mode = fuse.S_IFREG | 0644
mode = fuse.S_IFREG | 0o644
dirEntries = append(dirEntries, fuse.DirEntry{
Name: name,
@@ -246,7 +248,7 @@ func (r *RootDirectory) Getattr(
ctx context.Context, f fs.FileHandle, out *fuse.AttrOut,
) syscall.Errno {
// Set basic directory attributes
out.Mode = fuse.S_IFDIR | 0755
out.Mode = fuse.S_IFDIR | 0o755
// Set nlink to at least 2 (for . and ..)
out.Nlink = 2