mirror of
https://github.com/golang/go
synced 2024-11-25 02:07:58 -07:00
os: make MkdirAll work with symlinks
Fixes #1149. R=adg CC=golang-dev https://golang.org/cl/3564041
This commit is contained in:
parent
ae60526848
commit
8959851a96
@ -863,13 +863,14 @@ func TestAppend(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestStatDirWithTrailingSlash(t *testing.T) {
|
func TestStatDirWithTrailingSlash(t *testing.T) {
|
||||||
// Create new dir, in _obj so it will get
|
// Create new dir, in _test so it will get
|
||||||
// cleaned up by make if not by us.
|
// cleaned up by make if not by us.
|
||||||
path := "_obj/_TestStatDirWithSlash_"
|
path := "_test/_TestStatDirWithSlash_"
|
||||||
err := MkdirAll(path, 0777)
|
err := MkdirAll(path, 0777)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("MkdirAll %q: %s", path, err)
|
t.Fatalf("MkdirAll %q: %s", path, err)
|
||||||
}
|
}
|
||||||
|
defer RemoveAll(path)
|
||||||
|
|
||||||
// Stat of path should succeed.
|
// Stat of path should succeed.
|
||||||
_, err = Stat(path)
|
_, err = Stat(path)
|
||||||
@ -882,6 +883,4 @@ func TestStatDirWithTrailingSlash(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("stat failed:", err)
|
t.Fatal("stat failed:", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveAll("_obj/_TestMkdirAll_")
|
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ package os
|
|||||||
// and returns nil.
|
// and returns nil.
|
||||||
func MkdirAll(path string, perm uint32) Error {
|
func MkdirAll(path string, perm uint32) Error {
|
||||||
// If path exists, stop with success or error.
|
// If path exists, stop with success or error.
|
||||||
dir, err := Lstat(path)
|
dir, err := Stat(path)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
if dir.IsDirectory() {
|
if dir.IsDirectory() {
|
||||||
return nil
|
return nil
|
||||||
|
@ -7,17 +7,19 @@ package os_test
|
|||||||
import (
|
import (
|
||||||
. "os"
|
. "os"
|
||||||
"testing"
|
"testing"
|
||||||
|
"runtime"
|
||||||
"syscall"
|
"syscall"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMkdirAll(t *testing.T) {
|
func TestMkdirAll(t *testing.T) {
|
||||||
// Create new dir, in _obj so it will get
|
// Create new dir, in _test so it will get
|
||||||
// cleaned up by make if not by us.
|
// cleaned up by make if not by us.
|
||||||
path := "_obj/_TestMkdirAll_/dir/./dir2"
|
path := "_test/_TestMkdirAll_/dir/./dir2"
|
||||||
err := MkdirAll(path, 0777)
|
err := MkdirAll(path, 0777)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("MkdirAll %q: %s", path, err)
|
t.Fatalf("MkdirAll %q: %s", path, err)
|
||||||
}
|
}
|
||||||
|
defer RemoveAll("_test/_TestMkdirAll_")
|
||||||
|
|
||||||
// Already exists, should succeed.
|
// Already exists, should succeed.
|
||||||
err = MkdirAll(path, 0777)
|
err = MkdirAll(path, 0777)
|
||||||
@ -58,13 +60,11 @@ func TestMkdirAll(t *testing.T) {
|
|||||||
if perr.Path != fpath {
|
if perr.Path != fpath {
|
||||||
t.Fatalf("MkdirAll %q returned wrong error path: %q not %q", ffpath, perr.Path, fpath)
|
t.Fatalf("MkdirAll %q returned wrong error path: %q not %q", ffpath, perr.Path, fpath)
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveAll("_obj/_TestMkdirAll_")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRemoveAll(t *testing.T) {
|
func TestRemoveAll(t *testing.T) {
|
||||||
// Work directory.
|
// Work directory.
|
||||||
path := "_obj/_TestRemoveAll_"
|
path := "_test/_TestRemoveAll_"
|
||||||
fpath := path + "/file"
|
fpath := path + "/file"
|
||||||
dpath := path + "/dir"
|
dpath := path + "/dir"
|
||||||
|
|
||||||
@ -154,3 +154,28 @@ func TestRemoveAll(t *testing.T) {
|
|||||||
t.Fatalf("Lstat %q succeeded after RemoveAll (final)", path)
|
t.Fatalf("Lstat %q succeeded after RemoveAll (final)", path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMkdirAllWithSymlink(t *testing.T) {
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
t.Log("Skipping test: symlinks don't exist under Windows")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err := Mkdir("_test/dir", 0755)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(`Mkdir "_test/dir":`, err)
|
||||||
|
}
|
||||||
|
defer RemoveAll("_test/dir")
|
||||||
|
|
||||||
|
err = Symlink("dir", "_test/link")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(`Symlink "dir", "_test/link":`, err)
|
||||||
|
}
|
||||||
|
defer RemoveAll("_test/link")
|
||||||
|
|
||||||
|
path := "_test/link/foo"
|
||||||
|
err = MkdirAll(path, 0755)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("MkdirAll %q: %s", path, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user