pkg/environment: Migrate fs functions to fsx
This commit is contained in:
parent
45540ab253
commit
5a43ecfaeb
21 changed files with 155 additions and 199 deletions
|
|
@ -1,25 +1,3 @@
|
|||
package environment
|
||||
|
||||
import (
|
||||
"io"
|
||||
"io/fs"
|
||||
)
|
||||
|
||||
// Environment represents an environment that a program can run it.
|
||||
// It mostly mimics the interfaces of the [os] package.
|
||||
type Environment interface {
|
||||
isEnv()
|
||||
|
||||
Create(path string, mode fs.FileMode) (WritableFile, error)
|
||||
Mkdir(path string, mode fs.FileMode) error
|
||||
MkdirAll(path string, mode fs.FileMode) error
|
||||
}
|
||||
|
||||
type WritableFile interface {
|
||||
fs.File
|
||||
io.Writer
|
||||
}
|
||||
|
||||
func init() {
|
||||
var _ Environment = new(Native)
|
||||
}
|
||||
type Environment struct{}
|
||||
|
|
|
|||
|
|
@ -1,61 +0,0 @@
|
|||
package environment
|
||||
|
||||
import (
|
||||
"io"
|
||||
"io/fs"
|
||||
"os"
|
||||
|
||||
"github.com/tkw1536/pkglib/pools"
|
||||
)
|
||||
|
||||
// DefaultFilePerm is the default mode to use for files
|
||||
const DefaultFilePerm fs.FileMode = 0666
|
||||
|
||||
// DefaultDirPerm is the default mode to use for directories
|
||||
const DefaultDirPerm fs.FileMode = fs.ModeDir | fs.ModePerm
|
||||
|
||||
// IsExist checks if the provided error represents a 'does not exist' errror
|
||||
func IsExist(err error) bool {
|
||||
return os.IsExist(err)
|
||||
}
|
||||
|
||||
// IsNotExist checks if the provided error represents a 'does exist' error
|
||||
func IsNotExist(err error) bool {
|
||||
return os.IsNotExist(err)
|
||||
}
|
||||
|
||||
// WriteFile is like [os.WriteFile].
|
||||
func WriteFile(env Environment, path string, data []byte, mode fs.FileMode) error {
|
||||
handle, err := env.Create(path, mode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer handle.Close()
|
||||
|
||||
if _, err := handle.Write(data); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ReadFile is like [os.ReadFile]
|
||||
func ReadFile(env Environment, path string) ([]byte, error) {
|
||||
// open the file!
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
// copy everything into a buffer!
|
||||
buffer := pools.GetBuffer()
|
||||
defer pools.ReleaseBuffer(buffer)
|
||||
|
||||
if _, err := io.Copy(buffer, file); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// return the buffer contents!
|
||||
return buffer.Bytes(), nil
|
||||
}
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
package environment
|
||||
|
||||
import (
|
||||
"io/fs"
|
||||
"os"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Native struct {
|
||||
ulock sync.Mutex
|
||||
umask int
|
||||
}
|
||||
|
||||
func (*Native) isEnv() {}
|
||||
|
||||
func (n *Native) setMask(umask int) {
|
||||
n.ulock.Lock()
|
||||
n.umask = syscall.Umask(umask)
|
||||
}
|
||||
|
||||
func (n *Native) resetMask() {
|
||||
syscall.Umask(n.umask)
|
||||
n.ulock.Unlock()
|
||||
}
|
||||
|
||||
func (n *Native) Create(path string, mode fs.FileMode) (WritableFile, error) {
|
||||
n.ulock.Lock()
|
||||
defer n.ulock.Unlock()
|
||||
|
||||
return os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, mode)
|
||||
}
|
||||
|
||||
func (*Native) Chtimes(name string, atime time.Time, mtime time.Time) error {
|
||||
return os.Chtimes(name, atime, mtime)
|
||||
}
|
||||
|
||||
func (n *Native) Mkdir(path string, mode fs.FileMode) error {
|
||||
n.setMask(0)
|
||||
defer n.resetMask()
|
||||
|
||||
return os.Mkdir(path, fs.ModeDir|mode)
|
||||
}
|
||||
|
||||
func (n *Native) MkdirAll(path string, mode fs.FileMode) error {
|
||||
n.setMask(0)
|
||||
defer n.resetMask()
|
||||
|
||||
return os.MkdirAll(path, fs.ModeDir|mode)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue