From 258b6a77eed7985afb53a420577835afabe4d36b Mon Sep 17 00:00:00 2001 From: Alexander Neumann Date: Mon, 20 Jul 2015 21:29:21 +0200 Subject: [PATCH] Refactor skipping symlink ModTime checks, add OpenBSD --- cmd/restic/integration_helpers_test.go | 27 ++++++++++++++++++-------- node_test.go | 4 ++-- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/cmd/restic/integration_helpers_test.go b/cmd/restic/integration_helpers_test.go index a981019f0..fe794ab1e 100644 --- a/cmd/restic/integration_helpers_test.go +++ b/cmd/restic/integration_helpers_test.go @@ -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,14 +81,9 @@ func (e *dirEntry) equals(other *dirEntry) bool { return false } - switch runtime.GOOS { - case "darwin", "freebsd": - // Skip ModTime check on darwin and freebsd - default: - 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) diff --git a/node_test.go b/node_test.go index f6ba3dd98..f6104b49b 100644 --- a/node_test.go +++ b/node_test.go @@ -153,10 +153,10 @@ func TestNodeRestoreAt(t *testing.T) { func AssertFsTimeEqual(t *testing.T, label string, nodeType string, t1 time.Time, t2 time.Time) { var equal bool - // Go currently doesn't support setting timestamps of symbolic links on darwin and freebsd + // Go currently doesn't support setting timestamps of symbolic links on darwin and bsd if nodeType == "symlink" { switch runtime.GOOS { - case "darwin", "freebsd": + case "darwin", "freebsd", "openbsd": return } }