feat: Port to more UNIXes
This commit is contained in:
@@ -7,14 +7,12 @@ import (
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/pojntfx/stfs/pkg/adapters"
|
||||
"github.com/pojntfx/stfs/pkg/controllers"
|
||||
"github.com/pojntfx/stfs/pkg/formatting"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -102,22 +100,10 @@ var archiveCmd = &cobra.Command{
|
||||
return err
|
||||
}
|
||||
|
||||
var unixStat syscall.Stat_t
|
||||
if err := syscall.Stat(path, &unixStat); err != nil {
|
||||
if err := adapters.EnhanceHeader(path, hdr); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mtimesec, mtimensec := unixStat.Mtim.Unix()
|
||||
atimesec, atimensec := unixStat.Atim.Unix()
|
||||
ctimesec, ctimensec := unixStat.Ctim.Unix()
|
||||
|
||||
hdr.ModTime = time.Unix(mtimesec, mtimensec)
|
||||
hdr.AccessTime = time.Unix(atimesec, atimensec)
|
||||
hdr.ChangeTime = time.Unix(ctimesec, ctimensec)
|
||||
|
||||
hdr.Devmajor = int64(unix.Major(unixStat.Dev))
|
||||
hdr.Devminor = int64(unix.Minor(unixStat.Dev))
|
||||
|
||||
hdr.Name = path
|
||||
hdr.Format = tar.FormatPAX
|
||||
|
||||
|
||||
22
pkg/adapters/darwin.go
Normal file
22
pkg/adapters/darwin.go
Normal file
@@ -0,0 +1,22 @@
|
||||
//go:build darwin
|
||||
|
||||
package adapters
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"syscall"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
func EnhanceHeader(path string, hdr *tar.Header) error {
|
||||
var unixStat syscall.Stat_t
|
||||
if err := syscall.Stat(path, &unixStat); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
hdr.Devmajor = int64(unix.Major(uint64(unixStat.Dev)))
|
||||
hdr.Devminor = int64(unix.Minor(uint64(unixStat.Dev)))
|
||||
|
||||
return nil
|
||||
}
|
||||
31
pkg/adapters/dragonfly.go
Normal file
31
pkg/adapters/dragonfly.go
Normal file
@@ -0,0 +1,31 @@
|
||||
//go:build dragonfly || openbsd || (linux && mips64) || (linux && mips) || (linux && mipsle) || (linux && mips64le)
|
||||
|
||||
package adapters
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
func EnhanceHeader(path string, hdr *tar.Header) error {
|
||||
var unixStat syscall.Stat_t
|
||||
if err := syscall.Stat(path, &unixStat); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mtimesec, mtimensec := unixStat.Mtim.Unix()
|
||||
atimesec, atimensec := unixStat.Atim.Unix()
|
||||
ctimesec, ctimensec := unixStat.Ctim.Unix()
|
||||
|
||||
hdr.ModTime = time.Unix(mtimesec, mtimensec)
|
||||
hdr.AccessTime = time.Unix(atimesec, atimensec)
|
||||
hdr.ChangeTime = time.Unix(ctimesec, ctimensec)
|
||||
|
||||
hdr.Devmajor = int64(unix.Major(uint64(unixStat.Dev)))
|
||||
hdr.Devminor = int64(unix.Minor(uint64(unixStat.Dev)))
|
||||
|
||||
return nil
|
||||
}
|
||||
22
pkg/adapters/freebsd.go
Normal file
22
pkg/adapters/freebsd.go
Normal file
@@ -0,0 +1,22 @@
|
||||
//go:build freebsd || netbsd
|
||||
|
||||
package adapters
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"syscall"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
func EnhanceHeader(path string, hdr *tar.Header) error {
|
||||
var unixStat syscall.Stat_t
|
||||
if err := syscall.Stat(path, &unixStat); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
hdr.Devmajor = int64(unix.Major(unixStat.Dev))
|
||||
hdr.Devminor = int64(unix.Minor(unixStat.Dev))
|
||||
|
||||
return nil
|
||||
}
|
||||
11
pkg/adapters/js.go
Normal file
11
pkg/adapters/js.go
Normal file
@@ -0,0 +1,11 @@
|
||||
//go:build js || windows
|
||||
|
||||
package adapters
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
)
|
||||
|
||||
func EnhanceHeader(path string, hdr *tar.Header) error {
|
||||
return nil
|
||||
}
|
||||
31
pkg/adapters/linux.go
Normal file
31
pkg/adapters/linux.go
Normal file
@@ -0,0 +1,31 @@
|
||||
//go:build !(freebsd || darwin || dragonfly || js || netbsd || openbsd || windows || (linux && mips64) || (linux && mips) || (linux && mipsle) || (linux && mips64le))
|
||||
|
||||
package adapters
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
func EnhanceHeader(path string, hdr *tar.Header) error {
|
||||
var unixStat syscall.Stat_t
|
||||
if err := syscall.Stat(path, &unixStat); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mtimesec, mtimensec := unixStat.Mtim.Unix()
|
||||
atimesec, atimensec := unixStat.Atim.Unix()
|
||||
ctimesec, ctimensec := unixStat.Ctim.Unix()
|
||||
|
||||
hdr.ModTime = time.Unix(mtimesec, mtimensec)
|
||||
hdr.AccessTime = time.Unix(atimesec, atimensec)
|
||||
hdr.ChangeTime = time.Unix(ctimesec, ctimensec)
|
||||
|
||||
hdr.Devmajor = int64(unix.Major(unixStat.Dev))
|
||||
hdr.Devminor = int64(unix.Minor(unixStat.Dev))
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user