check / check (push) Canceled after 0s
scan never records anything on a filesystem that is not persistent (tmpfs, proc, sysfs and the other kernel or memory-backed types). As it starts it notes the device ID of each such mount point, from /proc/self/mountinfo on Linux and the mounted-filesystem list on macOS, and checks every operand, directory and file the walk meets against them; no flag turns this off. Below an operand the walk also skips the default excludes, a path list per system (Linux, macOS, and Windows, which is not used yet), and --no-default-excludes turns off only those. A default exclude that is itself an operand gets no skip line. The tests stop at once, saying why, when TMPDIR is not on a persistent filesystem. Judgement call: an unreadable mount list fails the scan, and no flag gets round it. Judgement call: a file on such a filesystem below an operand gets the same line as a directory. Judgement call: an operand on such a filesystem that another operand's walk also reaches is named twice. Unverified: the macOS mount list is built for macOS but never run; bind mounts need root to test. Model: opus-5-5
37 lines
746 B
Go
37 lines
746 B
Go
//go:build !darwin
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"runtime"
|
|
)
|
|
|
|
// mountInfoPath is the file in which Linux lists the mounts the reading
|
|
// process sees.
|
|
const mountInfoPath = "/proc/self/mountinfo"
|
|
|
|
// mountedFilesystems returns every mount point with the type of its
|
|
// filesystem: on Linux read from mountInfoPath (see readMountInfo), and
|
|
// on any other system none.
|
|
func mountedFilesystems() (map[string]string, error) {
|
|
if runtime.GOOS != goosLinux {
|
|
return map[string]string{}, nil
|
|
}
|
|
|
|
f, err := os.Open(mountInfoPath)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer func() { _ = f.Close() }()
|
|
|
|
mounts, err := readMountInfo(f)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("read %s: %w", mountInfoPath, err)
|
|
}
|
|
|
|
return mounts, nil
|
|
}
|