mirror of
https://github.com/octoleo/restic.git
synced 2024-12-23 11:28:54 +00:00
Merge pull request #238 from restic/fix-checks-on-bsd
Refactor skipping symlink timestamp checks on *bsd and darwin
This commit is contained in:
commit
aeb5a694d3
7
Vagrantfile
vendored
7
Vagrantfile
vendored
@ -7,6 +7,13 @@ def packages_freebsd
|
||||
return <<-EOF
|
||||
pkg install -y git
|
||||
pkg install -y curl
|
||||
|
||||
echo 'fuse_load="YES"' >> /boot/loader.conf
|
||||
echo 'vfs.usermount=1' >> /etc/sysctl.conf
|
||||
|
||||
kldload fuse
|
||||
sysctl vfs.usermount=1
|
||||
pw groupmod operator -M vagrant
|
||||
EOF
|
||||
end
|
||||
|
||||
|
@ -54,6 +54,22 @@ func walkDir(dir string) <-chan *dirEntry {
|
||||
return ch
|
||||
}
|
||||
|
||||
func isSymlink(fi os.FileInfo) bool {
|
||||
mode := fi.Mode() & (os.ModeType | os.ModeCharDevice)
|
||||
return mode == os.ModeSymlink
|
||||
}
|
||||
|
||||
func sameModTime(fi1, fi2 os.FileInfo) bool {
|
||||
switch runtime.GOOS {
|
||||
case "darwin", "freebsd", "openbsd":
|
||||
if isSymlink(fi1) && isSymlink(fi2) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return fi1.ModTime() == fi2.ModTime()
|
||||
}
|
||||
|
||||
func (e *dirEntry) equals(other *dirEntry) bool {
|
||||
if e.path != other.path {
|
||||
fmt.Fprintf(os.Stderr, "%v: path does not match (%v != %v)\n", e.path, e.path, other.path)
|
||||
@ -65,11 +81,9 @@ func (e *dirEntry) equals(other *dirEntry) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
if runtime.GOOS != "darwin" {
|
||||
if e.fi.ModTime() != other.fi.ModTime() {
|
||||
fmt.Fprintf(os.Stderr, "%v: ModTime does not match (%v != %v)\n", e.path, e.fi.ModTime(), other.fi.ModTime())
|
||||
return false
|
||||
}
|
||||
if !sameModTime(e.fi, other.fi) {
|
||||
fmt.Fprintf(os.Stderr, "%v: ModTime does not match (%v != %v)\n", e.path, e.fi.ModTime(), other.fi.ModTime())
|
||||
return false
|
||||
}
|
||||
|
||||
stat, _ := e.fi.Sys().(*syscall.Stat_t)
|
||||
|
12
node_test.go
12
node_test.go
@ -153,17 +153,21 @@ func TestNodeRestoreAt(t *testing.T) {
|
||||
func AssertFsTimeEqual(t *testing.T, label string, nodeType string, t1 time.Time, t2 time.Time) {
|
||||
var equal bool
|
||||
|
||||
if runtime.GOOS == "darwin" {
|
||||
// Go currently doesn't support setting timestamps of symbolic links on darwin
|
||||
if nodeType == "symlink" {
|
||||
// Go currently doesn't support setting timestamps of symbolic links on darwin and bsd
|
||||
if nodeType == "symlink" {
|
||||
switch runtime.GOOS {
|
||||
case "darwin", "freebsd", "openbsd":
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
switch runtime.GOOS {
|
||||
case "darwin":
|
||||
// HFS+ timestamps don't support sub-second precision,
|
||||
// see https://en.wikipedia.org/wiki/Comparison_of_file_systems
|
||||
diff := int(t1.Sub(t2).Seconds())
|
||||
equal = diff == 0
|
||||
} else {
|
||||
default:
|
||||
equal = t1.Equal(t2)
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ func RandomReader(seed, size int) *bytes.Reader {
|
||||
|
||||
// SetupTarTestFixture extracts the tarFile to outputDir.
|
||||
func SetupTarTestFixture(t testing.TB, outputDir, tarFile string) {
|
||||
err := System("sh", "-c", `(cd "$1" && tar xz) < "$2"`,
|
||||
err := System("sh", "-c", `(cd "$1" && tar xzf - ) < "$2"`,
|
||||
"sh", outputDir, tarFile)
|
||||
OK(t, err)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user