local fs rename: if it fails with a cross device error try a copy

I don't want to add a new setting for this, at least until we get the
first complain for a slow rename :)

Fixes #440
This commit is contained in:
Nicola Murino
2021-05-27 20:14:12 +02:00
parent 3b46e6a6fb
commit e1bf46c6a5
4 changed files with 32 additions and 9 deletions

36
vfs/sys_unix.go Normal file
View File

@@ -0,0 +1,36 @@
// +build !windows
package vfs
import (
"errors"
"os"
"syscall"
"golang.org/x/sys/unix"
)
var (
defaultUID, defaultGID int
)
func init() {
defaultUID = os.Getuid()
defaultGID = os.Getuid()
if defaultUID < 0 {
defaultUID = 65534
}
if defaultGID < 0 {
defaultGID = 65534
}
}
func (fi FileInfo) getFileInfoSys() interface{} {
return &syscall.Stat_t{
Uid: uint32(defaultUID),
Gid: uint32(defaultGID)}
}
func isCrossDeviceError(err error) bool {
return errors.Is(err, unix.EXDEV)
}