github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/kbfs/ioutil/os_wrap.go (about)

     1  // Copyright 2016 Keybase Inc. All rights reserved.
     2  // Use of this source code is governed by a BSD
     3  // license that can be found in the LICENSE file.
     4  
     5  package ioutil
     6  
     7  import (
     8  	"os"
     9  
    10  	"github.com/pkg/errors"
    11  )
    12  
    13  // OpenFile wraps OpenFile from "os".
    14  func OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) {
    15  	f, err := os.OpenFile(name, flag, perm)
    16  	if err != nil {
    17  		return nil, errors.Wrapf(err, "failed to open %q", name)
    18  	}
    19  
    20  	return f, nil
    21  }
    22  
    23  // Lstat wraps Lstat from "os".
    24  func Lstat(name string) (os.FileInfo, error) {
    25  	info, err := os.Lstat(name)
    26  	if err != nil {
    27  		return nil, errors.Wrapf(err, "failed to lstat %q", name)
    28  	}
    29  
    30  	return info, nil
    31  }
    32  
    33  // Mkdir wraps MkdirAll from "os".
    34  func Mkdir(path string, perm os.FileMode) error {
    35  	err := os.MkdirAll(path, perm)
    36  	if err != nil {
    37  		return errors.Wrapf(err, "failed to mkdir %q", path)
    38  	}
    39  
    40  	return nil
    41  }
    42  
    43  // MkdirAll wraps MkdirAll from "os".
    44  func MkdirAll(path string, perm os.FileMode) error {
    45  	twoAttempts := false
    46  	err := os.MkdirAll(path, perm)
    47  	// KBFS-3245: Simple workaround for test flake where a directory
    48  	// seems to disappear out from under us.
    49  	if os.IsNotExist(err) {
    50  		twoAttempts = true
    51  		err = os.MkdirAll(path, perm)
    52  	}
    53  	if err != nil {
    54  		return errors.Wrapf(err,
    55  			"failed to mkdir (all) %q, twoAttempts=%t", path, twoAttempts)
    56  	}
    57  
    58  	return nil
    59  }
    60  
    61  // Stat wraps Stat from "os".
    62  func Stat(name string) (os.FileInfo, error) {
    63  	info, err := os.Stat(name)
    64  	if err != nil {
    65  		return nil, errors.Wrapf(err, "failed to stat %q", name)
    66  	}
    67  
    68  	return info, nil
    69  }
    70  
    71  // Remove wraps Remove from "os".
    72  func Remove(name string) error {
    73  	err := os.Remove(name)
    74  	if err != nil {
    75  		return errors.Wrapf(err, "failed to remove %q", name)
    76  	}
    77  
    78  	return nil
    79  }
    80  
    81  // RemoveAll wraps RemoveAll from "os".
    82  func RemoveAll(name string) error {
    83  	err := os.RemoveAll(name)
    84  	if err != nil {
    85  		return errors.Wrapf(err, "failed to remove (all) %q", name)
    86  	}
    87  
    88  	return nil
    89  }
    90  
    91  // Rename wraps Rename from "os".
    92  func Rename(oldpath, newpath string) error {
    93  	err := os.Rename(oldpath, newpath)
    94  	if err != nil {
    95  		return errors.Wrapf(
    96  			err, "failed to rename %q to %q", oldpath, newpath)
    97  	}
    98  
    99  	return nil
   100  }