mirror of
https://github.com/restic/restic.git
synced 2024-12-23 08:16:36 +00:00
Refactor skipping symlink ModTime checks, add OpenBSD
This commit is contained in:
parent
bd3ce5d4a3
commit
258b6a77ee
2 changed files with 21 additions and 10 deletions
|
@ -54,6 +54,22 @@ func walkDir(dir string) <-chan *dirEntry {
|
||||||
return ch
|
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 {
|
func (e *dirEntry) equals(other *dirEntry) bool {
|
||||||
if e.path != other.path {
|
if e.path != other.path {
|
||||||
fmt.Fprintf(os.Stderr, "%v: path does not match (%v != %v)\n", e.path, e.path, other.path)
|
fmt.Fprintf(os.Stderr, "%v: path does not match (%v != %v)\n", e.path, e.path, other.path)
|
||||||
|
@ -65,15 +81,10 @@ func (e *dirEntry) equals(other *dirEntry) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
switch runtime.GOOS {
|
if !sameModTime(e.fi, other.fi) {
|
||||||
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())
|
fmt.Fprintf(os.Stderr, "%v: ModTime does not match (%v != %v)\n", e.path, e.fi.ModTime(), other.fi.ModTime())
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
stat, _ := e.fi.Sys().(*syscall.Stat_t)
|
stat, _ := e.fi.Sys().(*syscall.Stat_t)
|
||||||
stat2, _ := other.fi.Sys().(*syscall.Stat_t)
|
stat2, _ := other.fi.Sys().(*syscall.Stat_t)
|
||||||
|
|
|
@ -153,10 +153,10 @@ func TestNodeRestoreAt(t *testing.T) {
|
||||||
func AssertFsTimeEqual(t *testing.T, label string, nodeType string, t1 time.Time, t2 time.Time) {
|
func AssertFsTimeEqual(t *testing.T, label string, nodeType string, t1 time.Time, t2 time.Time) {
|
||||||
var equal bool
|
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" {
|
if nodeType == "symlink" {
|
||||||
switch runtime.GOOS {
|
switch runtime.GOOS {
|
||||||
case "darwin", "freebsd":
|
case "darwin", "freebsd", "openbsd":
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue