From 1eab47b63fae03be99362938e83ee79e86370a30 Mon Sep 17 00:00:00 2001 From: Nestor Date: Fri, 22 Feb 2019 15:08:26 +0100 Subject: [PATCH] fix abs path with symlinks Signed-off-by: Nestor --- pkg/fs/confirmeddir.go | 12 ++++++++++-- pkg/fs/confirmeddir_test.go | 16 ++++++++++++++++ pkg/fs/realfs_test.go | 6 +++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/pkg/fs/confirmeddir.go b/pkg/fs/confirmeddir.go index 6d2f5c30d..5d12bf077 100644 --- a/pkg/fs/confirmeddir.go +++ b/pkg/fs/confirmeddir.go @@ -26,7 +26,7 @@ import ( // that was confirmed to point to an existing directory. type ConfirmedDir string -// Return a temporary dir, else error. +// NewTmpConfirmedDir returns a temporary dir, else error. // The directory is cleaned, no symlinks, etc. so its // returned as a ConfirmedDir. func NewTmpConfirmedDir() (ConfirmedDir, error) { @@ -34,7 +34,15 @@ func NewTmpConfirmedDir() (ConfirmedDir, error) { if err != nil { return "", err } - return ConfirmedDir(n), nil + + // In MacOs `ioutil.TempDir` creates a directory + // with root in the `/var` folder, which is in turn a symlinked path + // to `/private/var`. + // Function `filepath.EvalSymlinks`is used to + // resolve the real absolute path. + deLinked, err := filepath.EvalSymlinks(n) + return ConfirmedDir(deLinked), err + } // HasPrefix returns true if the directory argument diff --git a/pkg/fs/confirmeddir_test.go b/pkg/fs/confirmeddir_test.go index eddc2a198..7b603f733 100644 --- a/pkg/fs/confirmeddir_test.go +++ b/pkg/fs/confirmeddir_test.go @@ -17,6 +17,7 @@ limitations under the License. package fs import ( + "path/filepath" "testing" ) @@ -101,3 +102,18 @@ func TestHasPrefix_SlashFooBar(t *testing.T) { t.Fatalf("/foo/bar should have prefix /") } } + +func TestNewTempConfirmDir(t *testing.T) { + tmp, err := NewTmpConfirmedDir() + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + delinked, err := filepath.EvalSymlinks(string(tmp)) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if string(tmp) != delinked { + t.Fatalf("unexpected path containing symlinks") + } +} diff --git a/pkg/fs/realfs_test.go b/pkg/fs/realfs_test.go index 74bc318cd..6e07f2fe3 100644 --- a/pkg/fs/realfs_test.go +++ b/pkg/fs/realfs_test.go @@ -27,7 +27,11 @@ import ( func makeTestDir(t *testing.T) (FileSystem, string) { x := MakeRealFS() - testDir, err := ioutil.TempDir("", "kustomize_testing_dir") + td, err := ioutil.TempDir("", "kustomize_testing_dir") + if err != nil { + t.Fatalf("unexpected error %s", err) + } + testDir, err := filepath.EvalSymlinks(td) if err != nil { t.Fatalf("unexpected error %s", err) }