]> Cypherpunks repositories - gostls13.git/commitdiff
os: don't use test logger for Getwd
authorIan Lance Taylor <iant@golang.org>
Tue, 12 Dec 2017 00:41:37 +0000 (16:41 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 12 Dec 2017 04:26:40 +0000 (04:26 +0000)
Otherwise, on systems for which syscall does not implement Getwd,
a lot of unnecessary files and directories get added to the testlog,
right up the root directory. This was causing tests on such systems
to fail to cache in practice.

Updates #22593

Change-Id: Ic8cb3450ea62aa0ca8eeb15754349f151cd76f85
Reviewed-on: https://go-review.googlesource.com/83455
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/os/file.go
src/os/file_plan9.go
src/os/file_unix.go
src/os/file_windows.go
src/os/getwd.go
src/os/stat.go [new file with mode: 0644]
src/os/stat_plan9.go
src/os/stat_unix.go
src/os/stat_windows.go

index cba5d5386af6e44b44c054108e04980b4b11699e..f9cf2b61ab23eeb57ef324236a64f4a9b493c3e5 100644 (file)
@@ -258,6 +258,16 @@ func Create(name string) (*File, error) {
        return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
 }
 
+// OpenFile is the generalized open call; most users will use Open
+// or Create instead. It opens the named file with specified flag
+// (O_RDONLY etc.) and perm, (0666 etc.) if applicable. If successful,
+// methods on the returned File can be used for I/O.
+// If there is an error, it will be of type *PathError.
+func OpenFile(name string, flag int, perm FileMode) (*File, error) {
+       testlog.Open(name)
+       return openFileNolog(name, flag, perm)
+}
+
 // lstat is overridden in tests.
 var lstat = Lstat
 
index 3ef0d29aa06fd497ca835b1b5d93735834167d24..7e281789642879315ed36d6e9b32c6a1597ecb22 100644 (file)
@@ -6,7 +6,6 @@ package os
 
 import (
        "internal/poll"
-       "internal/testlog"
        "io"
        "runtime"
        "syscall"
@@ -80,14 +79,8 @@ func syscallMode(i FileMode) (o uint32) {
        return
 }
 
-// OpenFile is the generalized open call; most users will use Open
-// or Create instead. It opens the named file with specified flag
-// (O_RDONLY etc.) and perm, (0666 etc.) if applicable. If successful,
-// methods on the returned File can be used for I/O.
-// If there is an error, it will be of type *PathError.
-func OpenFile(name string, flag int, perm FileMode) (*File, error) {
-       testlog.Open(name)
-
+// openFileNolog is the Plan 9 implementation of OpenFile.
+func openFileNolog(name string, flag int, perm FileMode) (*File, error) {
        var (
                fd     int
                e      error
index 47fde5bbcfc57ff864830c191333ebb286a69f22..39171cdc3514d2352b1d81edc10bc6be9060a33e 100644 (file)
@@ -8,7 +8,6 @@ package os
 
 import (
        "internal/poll"
-       "internal/testlog"
        "runtime"
        "syscall"
 )
@@ -154,14 +153,8 @@ func epipecheck(file *File, e error) {
 // On Unix-like systems, it is "/dev/null"; on Windows, "NUL".
 const DevNull = "/dev/null"
 
-// OpenFile is the generalized open call; most users will use Open
-// or Create instead. It opens the named file with specified flag
-// (O_RDONLY etc.) and perm, (0666 etc.) if applicable. If successful,
-// methods on the returned File can be used for I/O.
-// If there is an error, it will be of type *PathError.
-func OpenFile(name string, flag int, perm FileMode) (*File, error) {
-       testlog.Open(name)
-
+// openFileNolog is the Unix implementation of OpenFile.
+func openFileNolog(name string, flag int, perm FileMode) (*File, error) {
        chmod := false
        if !supportsCreateWithStickyBit && flag&O_CREATE != 0 && perm&ModeSticky != 0 {
                if _, err := Stat(name); IsNotExist(err) {
index fdc7e1687d99517b0cc7b9a51c9c24effc2a6dbf..be19fe273e4f826ddaf809ba0e92beb721331cf9 100644 (file)
@@ -7,7 +7,6 @@ package os
 import (
        "internal/poll"
        "internal/syscall/windows"
-       "internal/testlog"
        "runtime"
        "syscall"
        "unicode/utf16"
@@ -149,14 +148,8 @@ func openDir(name string) (file *File, err error) {
        return f, nil
 }
 
-// OpenFile is the generalized open call; most users will use Open
-// or Create instead. It opens the named file with specified flag
-// (O_RDONLY etc.) and perm, (0666 etc.) if applicable. If successful,
-// methods on the returned File can be used for I/O.
-// If there is an error, it will be of type *PathError.
-func OpenFile(name string, flag int, perm FileMode) (*File, error) {
-       testlog.Open(name)
-
+// openFileNolog is the Windows implementation of OpenFile.
+func openFileNolog(name string, flag int, perm FileMode) (*File, error) {
        if name == "" {
                return nil, &PathError{"open", name, syscall.ENOENT}
        }
index 4c3c0d94cb0354db3506eb095f054d9191287f29..87ad8eb13703e50f1c0b6aaf45464dcd69890982 100644 (file)
@@ -30,13 +30,13 @@ func Getwd() (dir string, err error) {
 
        // Clumsy but widespread kludge:
        // if $PWD is set and matches ".", use it.
-       dot, err := Stat(".")
+       dot, err := statNolog(".")
        if err != nil {
                return "", err
        }
        dir = Getenv("PWD")
        if len(dir) > 0 && dir[0] == '/' {
-               d, err := Stat(dir)
+               d, err := statNolog(dir)
                if err == nil && SameFile(dot, d) {
                        return dir, nil
                }
@@ -56,7 +56,7 @@ func Getwd() (dir string, err error) {
        dir = getwdCache.dir
        getwdCache.Unlock()
        if len(dir) > 0 {
-               d, err := Stat(dir)
+               d, err := statNolog(dir)
                if err == nil && SameFile(dot, d) {
                        return dir, nil
                }
@@ -64,7 +64,7 @@ func Getwd() (dir string, err error) {
 
        // Root is a special case because it has no parent
        // and ends in a slash.
-       root, err := Stat("/")
+       root, err := statNolog("/")
        if err != nil {
                // Can't stat root - no hope.
                return "", err
@@ -81,7 +81,7 @@ func Getwd() (dir string, err error) {
                if len(parent) >= 1024 { // Sanity check
                        return "", syscall.ENAMETOOLONG
                }
-               fd, err := Open(parent)
+               fd, err := openFileNolog(parent, O_RDONLY, 0)
                if err != nil {
                        return "", err
                }
@@ -93,7 +93,7 @@ func Getwd() (dir string, err error) {
                                return "", err
                        }
                        for _, name := range names {
-                               d, _ := Lstat(parent + "/" + name)
+                               d, _ := lstatNolog(parent + "/" + name)
                                if SameFile(d, dot) {
                                        dir = "/" + name + dir
                                        goto Found
diff --git a/src/os/stat.go b/src/os/stat.go
new file mode 100644 (file)
index 0000000..af66838
--- /dev/null
@@ -0,0 +1,23 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package os
+
+import "internal/testlog"
+
+// Stat returns a FileInfo describing the named file.
+// If there is an error, it will be of type *PathError.
+func Stat(name string) (FileInfo, error) {
+       testlog.Stat(name)
+       return statNolog(name)
+}
+
+// Lstat returns a FileInfo describing the named file.
+// If the file is a symbolic link, the returned FileInfo
+// describes the symbolic link. Lstat makes no attempt to follow the link.
+// If there is an error, it will be of type *PathError.
+func Lstat(name string) (FileInfo, error) {
+       testlog.Stat(name)
+       return lstatNolog(name)
+}
index b764092ff823d14c11941ad0ab3d6eb96457002e..8057fd4a02de697e9467db396bfac42f455992e4 100644 (file)
@@ -5,7 +5,6 @@
 package os
 
 import (
-       "internal/testlog"
        "syscall"
        "time"
 )
@@ -87,10 +86,8 @@ func dirstat(arg interface{}) (*syscall.Dir, error) {
        return nil, &PathError{"stat", name, err}
 }
 
-// Stat returns a FileInfo describing the named file.
-// If there is an error, it will be of type *PathError.
-func Stat(name string) (FileInfo, error) {
-       testlog.Stat(name)
+// statNolog implements Stat for Plan 9.
+func statNolog(name string) (FileInfo, error) {
        d, err := dirstat(name)
        if err != nil {
                return nil, err
@@ -98,12 +95,9 @@ func Stat(name string) (FileInfo, error) {
        return fileInfoFromStat(d), nil
 }
 
-// Lstat returns a FileInfo describing the named file.
-// If the file is a symbolic link, the returned FileInfo
-// describes the symbolic link. Lstat makes no attempt to follow the link.
-// If there is an error, it will be of type *PathError.
-func Lstat(name string) (FileInfo, error) {
-       return Stat(name)
+// lstatNolog implements Lstat for Plan 9.
+func lstatNolog(name string) (FileInfo, error) {
+       return statNolog(name)
 }
 
 // For testing.
index 0050f62b24c3f10808d67fbc93f260686a6fc575..b58417150c4890751534149dbd70a8b7ffa5b526 100644 (file)
@@ -7,7 +7,6 @@
 package os
 
 import (
-       "internal/testlog"
        "syscall"
 )
 
@@ -26,10 +25,8 @@ func (f *File) Stat() (FileInfo, error) {
        return &fs, nil
 }
 
-// Stat returns a FileInfo describing the named file.
-// If there is an error, it will be of type *PathError.
-func Stat(name string) (FileInfo, error) {
-       testlog.Stat(name)
+// statNolog stats a file with no test logging.
+func statNolog(name string) (FileInfo, error) {
        var fs fileStat
        err := syscall.Stat(name, &fs.sys)
        if err != nil {
@@ -39,12 +36,8 @@ func Stat(name string) (FileInfo, error) {
        return &fs, nil
 }
 
-// Lstat returns a FileInfo describing the named file.
-// If the file is a symbolic link, the returned FileInfo
-// describes the symbolic link. Lstat makes no attempt to follow the link.
-// If there is an error, it will be of type *PathError.
-func Lstat(name string) (FileInfo, error) {
-       testlog.Stat(name)
+// lstatNolog lstats a file with no test logging.
+func lstatNolog(name string) (FileInfo, error) {
        var fs fileStat
        err := syscall.Lstat(name, &fs.sys)
        if err != nil {
index f88d4e9f128efca5934cb37f33f2492c372cb9c9..5ec56422fdec7bcd0c21fcdb3e883e68b49a699a 100644 (file)
@@ -6,7 +6,6 @@ package os
 
 import (
        "internal/syscall/windows"
-       "internal/testlog"
        "syscall"
        "unsafe"
 )
@@ -57,10 +56,8 @@ func (file *File) Stat() (FileInfo, error) {
        }, nil
 }
 
-// Stat returns a FileInfo structure describing the named file.
-// If there is an error, it will be of type *PathError.
-func Stat(name string) (FileInfo, error) {
-       testlog.Stat(name)
+// statNolog implements Stat for Windows.
+func statNolog(name string) (FileInfo, error) {
        if len(name) == 0 {
                return nil, &PathError{"Stat", name, syscall.Errno(syscall.ERROR_PATH_NOT_FOUND)}
        }
@@ -158,12 +155,8 @@ func statWithFindFirstFile(name string, namep *uint16) (FileInfo, error) {
        }, nil
 }
 
-// Lstat returns the FileInfo structure describing the named file.
-// If the file is a symbolic link, the returned FileInfo
-// describes the symbolic link. Lstat makes no attempt to follow the link.
-// If there is an error, it will be of type *PathError.
-func Lstat(name string) (FileInfo, error) {
-       testlog.Stat(name)
+// lstatNolog implements Lstat for Windows.
+func lstatNolog(name string) (FileInfo, error) {
        if len(name) == 0 {
                return nil, &PathError{"Lstat", name, syscall.Errno(syscall.ERROR_PATH_NOT_FOUND)}
        }