Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Cai <jcai@gitlab.com>2019-07-03 19:52:22 +0300
committerJohn Cai <jcai@gitlab.com>2019-07-03 19:52:22 +0300
commit80d97b14e1614d3fc19df2cf089bede962979bf9 (patch)
tree8068b86448dabead6ab4817fad860652b886de15
parent1729ccd20b04e687e6c1c8cc06750b541a3ace44 (diff)
parenta8ec7642d55878c00dacfb7b3a7f6672c93f26ab (diff)
Merge branch 'fstype-bsd-support' into 'master'
Fix file system type detection on *BSD and Darwin. See merge request gitlab-org/gitaly!1344
-rw-r--r--internal/helper/fstype/detect_darwin.go15
-rw-r--r--internal/helper/fstype/detect_linux.go99
-rw-r--r--internal/helper/fstype/detect_openbsd.go24
-rw-r--r--internal/helper/fstype/detect_unix.go26
-rw-r--r--internal/helper/fstype/fstype.go103
5 files changed, 148 insertions, 119 deletions
diff --git a/internal/helper/fstype/detect_darwin.go b/internal/helper/fstype/detect_darwin.go
deleted file mode 100644
index d82e26f80..000000000
--- a/internal/helper/fstype/detect_darwin.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package fstype
-
-// syscall should not be included in the linux package given that runs in
-// production.
-// See: https://docs.google.com/document/d/1QXzI9I1pOfZPujQzxhyRy6EeHYTQitKKjHfpq0zpxZs
-import "syscall"
-
-func statFileSystemType(path string) (int64, error) {
- var stat syscall.Statfs_t
- if err := syscall.Statfs(path, &stat); err != nil {
- return 0, err
- }
-
- return int64(stat.Type), nil
-}
diff --git a/internal/helper/fstype/detect_linux.go b/internal/helper/fstype/detect_linux.go
index 98c7b1b8a..87ef046a9 100644
--- a/internal/helper/fstype/detect_linux.go
+++ b/internal/helper/fstype/detect_linux.go
@@ -2,13 +2,106 @@ package fstype
import "golang.org/x/sys/unix"
-func statFileSystemType(path string) (int64, error) {
+func detectFileSystem(path string) string {
var stat unix.Statfs_t
if err := unix.Statfs(path, &stat); err != nil {
- return 0, err
+ return unknownFS
}
// This explicit cast to int64 is required for systems where the syscall
// returns an int32 instead.
- return int64(stat.Type), nil
+ fsType, found := magicMap[int64(stat.Type)]
+ if !found {
+ return unknownFS
+ }
+
+ return fsType
}
+
+// This map has been collected from `man 2 statfs` and is non-exhaustive
+// The values of EXT2, EXT3, and EXT4 have been renamed to a generic EXT as their
+// key values were duplicate. This value is now called EXT_2_3_4
+var (
+ magicMap = map[int64]string{
+ 0xadf5: "ADFS",
+ 0xadff: "AFFS",
+ 0x5346414f: "AFS",
+ 0x09041934: "ANON_INODE_FS",
+ 0x0187: "AUTOFS",
+ 0x62646576: "BDEVFS",
+ 0x42465331: "BEFS",
+ 0x1badface: "BFS",
+ 0x42494e4d: "BINFMTFS",
+ 0xcafe4a11: "BPF_FS",
+ 0x9123683e: "BTRFS",
+ 0x73727279: "BTRFS_TEST",
+ 0x27e0eb: "CGROUP",
+ 0x63677270: "CGROUP2",
+ 0xff534d42: "CIFS_NUMBER",
+ 0x73757245: "CODA",
+ 0x012ff7b7: "COH",
+ 0x28cd3d45: "CRAMFS",
+ 0x64626720: "DEBUGFS",
+ 0x1373: "DEVFS",
+ 0x1cd1: "DEVPTS",
+ 0xf15f: "ECRYPTFS",
+ 0xde5e81e4: "EFIVARFS",
+ 0x00414a53: "EFS",
+ 0x137d: "EXT",
+ 0xef51: "EXT2_OLD",
+ 0xef53: "EXT_2_3_4",
+ 0xf2f52010: "F2FS",
+ 0x65735546: "FUSE",
+ 0xbad1dea: "FUTEXFS",
+ 0x4244: "HFS",
+ 0x00c0ffee: "HOSTFS",
+ 0xf995e849: "HPFS",
+ 0x958458f6: "HUGETLBFS",
+ 0x9660: "ISOFS",
+ 0x72b6: "JFFS2",
+ 0x3153464a: "JFS",
+ 0x137f: "MINIX",
+ 0x138f: "MINIX2",
+ 0x2468: "MINIX2",
+ 0x2478: "MINIX22",
+ 0x4d5a: "MINIX3",
+ 0x19800202: "MQUEUE",
+ 0x4d44: "MSDOS",
+ 0x11307854: "MTD_INODE_FS",
+ 0x564c: "NCP",
+ 0x6969: "NFS",
+ 0x3434: "NILFS",
+ 0x6e736673: "NSFS",
+ 0x5346544e: "NTFS_SB",
+ 0x7461636f: "OCFS2",
+ 0x9fa1: "OPENPROM",
+ 0x794c7630: "OVERLAYFS",
+ 0x50495045: "PIPEFS",
+ 0x9fa0: "PROC",
+ 0x6165676c: "PSTOREFS",
+ 0x002f: "QNX4",
+ 0x68191122: "QNX6",
+ 0x858458f6: "RAMFS",
+ 0x52654973: "REISERFS",
+ 0x7275: "ROMFS",
+ 0x73636673: "SECURITYFS",
+ 0xf97cff8c: "SELINUX",
+ 0x43415d53: "SMACK",
+ 0x517b: "SMB",
+ 0x534f434b: "SOCKFS",
+ 0x73717368: "SQUASHFS",
+ 0x62656572: "SYSFS",
+ 0x012ff7b6: "SYSV2",
+ 0x012ff7b5: "SYSV4",
+ 0x01021994: "TMPFS",
+ 0x74726163: "TRACEFS",
+ 0x15013346: "UDF",
+ 0x00011954: "UFS",
+ 0x9fa2: "USBDEVICE",
+ 0x01021997: "V9FS",
+ 0xa501fcf5: "VXFS",
+ 0xabba1974: "XENFS",
+ 0x012ff7b4: "XENIX",
+ 0x58465342: "XFS",
+ }
+)
diff --git a/internal/helper/fstype/detect_openbsd.go b/internal/helper/fstype/detect_openbsd.go
new file mode 100644
index 000000000..bf01ada1b
--- /dev/null
+++ b/internal/helper/fstype/detect_openbsd.go
@@ -0,0 +1,24 @@
+package fstype
+
+import "golang.org/x/sys/unix"
+
+func detectFileSystem(path string) string {
+ var stat unix.Statfs_t
+ if err := unix.Statfs(path, &stat); err != nil {
+ return unknownFS
+ }
+
+ var buf []byte
+ for _, c := range stat.F_fstypename {
+ if c == 0 {
+ break
+ }
+ buf = append(buf, byte(c))
+ }
+
+ if len(buf) == 0 {
+ return unknownFS
+ }
+
+ return string(buf)
+}
diff --git a/internal/helper/fstype/detect_unix.go b/internal/helper/fstype/detect_unix.go
new file mode 100644
index 000000000..f946002e0
--- /dev/null
+++ b/internal/helper/fstype/detect_unix.go
@@ -0,0 +1,26 @@
+// +build darwin dragonfly freebsd
+
+package fstype
+
+import "golang.org/x/sys/unix"
+
+func detectFileSystem(path string) string {
+ var stat unix.Statfs_t
+ if err := unix.Statfs(path, &stat); err != nil {
+ return unknownFS
+ }
+
+ var buf []byte
+ for _, c := range stat.Fstypename {
+ if c == 0 {
+ break
+ }
+ buf = append(buf, byte(c))
+ }
+
+ if len(buf) == 0 {
+ return unknownFS
+ }
+
+ return string(buf)
+}
diff --git a/internal/helper/fstype/fstype.go b/internal/helper/fstype/fstype.go
index 84860e720..5561f7f59 100644
--- a/internal/helper/fstype/fstype.go
+++ b/internal/helper/fstype/fstype.go
@@ -2,106 +2,7 @@ package fstype
const unknownFS = "unknown"
-// FileSystem will return the type of filesystem is being used at the passed path
+// FileSystem will return the type of filesystem being used at the passed path
func FileSystem(path string) string {
- kind, err := statFileSystemType(path)
- if err != nil {
- return unknownFS
- }
-
- fsType, ok := magicMap[kind]
- if !ok {
- return unknownFS
- }
-
- return fsType
-
+ return detectFileSystem(path)
}
-
-// This map has been collected from `man 2 statfs` and is non-exhaustive
-// The values of EXT2, EXT3, and EXT4 have been renamed to a generic EXT as their
-// key values were duplicate. This value is now called EXT_2_3_4
-var (
- magicMap = map[int64]string{
- 0xadf5: "ADFS",
- 0xadff: "AFFS",
- 0x5346414f: "AFS",
- 0x09041934: "ANON_INODE_FS",
- 0x0187: "AUTOFS",
- 0x62646576: "BDEVFS",
- 0x42465331: "BEFS",
- 0x1badface: "BFS",
- 0x42494e4d: "BINFMTFS",
- 0xcafe4a11: "BPF_FS",
- 0x9123683e: "BTRFS",
- 0x73727279: "BTRFS_TEST",
- 0x27e0eb: "CGROUP",
- 0x63677270: "CGROUP2",
- 0xff534d42: "CIFS_NUMBER",
- 0x73757245: "CODA",
- 0x012ff7b7: "COH",
- 0x28cd3d45: "CRAMFS",
- 0x64626720: "DEBUGFS",
- 0x1373: "DEVFS",
- 0x1cd1: "DEVPTS",
- 0xf15f: "ECRYPTFS",
- 0xde5e81e4: "EFIVARFS",
- 0x00414a53: "EFS",
- 0x137d: "EXT",
- 0xef51: "EXT2_OLD",
- 0xef53: "EXT_2_3_4",
- 0xf2f52010: "F2FS",
- 0x65735546: "FUSE",
- 0xbad1dea: "FUTEXFS",
- 0x4244: "HFS",
- 0x00c0ffee: "HOSTFS",
- 0xf995e849: "HPFS",
- 0x958458f6: "HUGETLBFS",
- 0x9660: "ISOFS",
- 0x72b6: "JFFS2",
- 0x3153464a: "JFS",
- 0x137f: "MINIX",
- 0x138f: "MINIX2",
- 0x2468: "MINIX2",
- 0x2478: "MINIX22",
- 0x4d5a: "MINIX3",
- 0x19800202: "MQUEUE",
- 0x4d44: "MSDOS",
- 0x11307854: "MTD_INODE_FS",
- 0x564c: "NCP",
- 0x6969: "NFS",
- 0x3434: "NILFS",
- 0x6e736673: "NSFS",
- 0x5346544e: "NTFS_SB",
- 0x7461636f: "OCFS2",
- 0x9fa1: "OPENPROM",
- 0x794c7630: "OVERLAYFS",
- 0x50495045: "PIPEFS",
- 0x9fa0: "PROC",
- 0x6165676c: "PSTOREFS",
- 0x002f: "QNX4",
- 0x68191122: "QNX6",
- 0x858458f6: "RAMFS",
- 0x52654973: "REISERFS",
- 0x7275: "ROMFS",
- 0x73636673: "SECURITYFS",
- 0xf97cff8c: "SELINUX",
- 0x43415d53: "SMACK",
- 0x517b: "SMB",
- 0x534f434b: "SOCKFS",
- 0x73717368: "SQUASHFS",
- 0x62656572: "SYSFS",
- 0x012ff7b6: "SYSV2",
- 0x012ff7b5: "SYSV4",
- 0x01021994: "TMPFS",
- 0x74726163: "TRACEFS",
- 0x15013346: "UDF",
- 0x00011954: "UFS",
- 0x9fa2: "USBDEVICE",
- 0x01021997: "V9FS",
- 0xa501fcf5: "VXFS",
- 0xabba1974: "XENFS",
- 0x012ff7b4: "XENIX",
- 0x58465342: "XFS",
- }
-)