diff --git a/fs/manifest_test.go b/fs/manifest_test.go index 0b31c7f..2cbc610 100644 --- a/fs/manifest_test.go +++ b/fs/manifest_test.go @@ -75,6 +75,17 @@ func TestManifestFromDir(t *testing.T) { actual.root.items["s"].(*directory).items["k"].(*file).content.Close() } +func TestSymlinks(t *testing.T) { + rootDirectory := NewDir(t, "root", + WithFile("foo.txt", "foo"), + WithSymlink("foo.link", "foo.txt")) + defer rootDirectory.Remove() + expected := Expected(t, + WithFile("foo.txt", "foo"), + WithSymlink("foo.link", rootDirectory.Join("foo.txt"))) + assert.Assert(t, Equal(rootDirectory.Path(), expected)) +} + var cmpManifest = cmp.Options{ cmp.AllowUnexported(Manifest{}, resource{}, file{}, symlink{}, directory{}), cmp.Comparer(func(x, y io.ReadCloser) bool { diff --git a/fs/manifest_unix.go b/fs/manifest_unix.go index bba2fcd..d2956f3 100644 --- a/fs/manifest_unix.go +++ b/fs/manifest_unix.go @@ -1,16 +1,24 @@ +//go:build !windows // +build !windows package fs import ( "os" + "runtime" "syscall" ) -const ( - defaultRootDirMode = os.ModeDir | 0700 - defaultSymlinkMode = os.ModeSymlink | 0777 -) +const defaultRootDirMode = os.ModeDir | 0700 + +var defaultSymlinkMode = os.ModeSymlink | 0777 + +func init() { + switch runtime.GOOS { + case "darwin": + defaultSymlinkMode = os.ModeSymlink | 0755 + } +} func newResourceFromInfo(info os.FileInfo) resource { statT := info.Sys().(*syscall.Stat_t)