]> Cypherpunks repositories - gostls13.git/commitdiff
Make os.RemoveAll return no error if path does not exist.
authorAustin Clements <aclements@csail.mit.edu>
Wed, 5 Aug 2009 21:18:54 +0000 (14:18 -0700)
committerAustin Clements <aclements@csail.mit.edu>
Wed, 5 Aug 2009 21:18:54 +0000 (14:18 -0700)
This fixes a problem introduced by CL 32684 into gobuild,
which used to use 'rm -rf' to remove the _obj directory.

R=rsc
APPROVED=rsc
DELTA=8  (4 added, 0 deleted, 4 changed)
OCL=32794
CL=32796

src/pkg/os/path.go

index d8efe51832f0cd6ae2dd8da9df9cddb469ca8561..586760e383202ede341dbd39ed8ce7f3568c99c2 100644 (file)
@@ -58,7 +58,8 @@ func MkdirAll(path string, perm int) Error {
 
 // RemoveAll removes path and any children it contains.
 // It removes everything it can but returns the first error
-// it encounters.
+// it encounters.  If the path does not exist, RemoveAll
+// returns nil (no error).
 func RemoveAll(path string) Error {
        // Simple case: if Remove works, we're done.
        err := Remove(path);
@@ -67,9 +68,12 @@ func RemoveAll(path string) Error {
        }
 
        // Otherwise, is this a directory we need to recurse into?
-       dir, err := os.Lstat(path);
-       if err != nil {
-               return err;
+       dir, serr := os.Lstat(path);
+       if serr != nil {
+               if serr, ok := serr.(*PathError); ok && serr.Error == ENOENT {
+                       return nil;
+               }
+               return serr;
        }
        if !dir.IsDirectory() {
                // Not a directory; return the error from Remove.