github.com/jmigpin/editor@v1.6.0/util/osutil/tmpfiles.go (about)

     1  package osutil
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  )
     8  
     9  type TmpFiles struct {
    10  	Dir string
    11  }
    12  
    13  func NewTmpFiles(prefix string) *TmpFiles {
    14  	f := &TmpFiles{}
    15  	f.setupDir(prefix)
    16  	return f
    17  }
    18  
    19  func (tf *TmpFiles) setupDir(prefix string) error {
    20  	d, err := ioutil.TempDir(os.TempDir(), prefix)
    21  	if err != nil {
    22  		return err
    23  	}
    24  	tf.Dir = d
    25  	return nil
    26  }
    27  
    28  func (tf *TmpFiles) MkdirInTmp(path string) (string, error) {
    29  	fp := filepath.Join(tf.Dir, path)
    30  	if err := os.MkdirAll(fp, 0700); err != nil {
    31  		return "", err
    32  	}
    33  	return fp, nil
    34  }
    35  
    36  func (tf *TmpFiles) WriteFileInTmp(path string, src []byte) (string, error) {
    37  	fp := filepath.Join(tf.Dir, path)
    38  	baseDir := filepath.Dir(fp)
    39  	if err := os.MkdirAll(baseDir, 0700); err != nil {
    40  		return "", err
    41  	}
    42  	if err := ioutil.WriteFile(fp, src, 0600); err != nil {
    43  		return "", err
    44  	}
    45  	return fp, nil
    46  }
    47  
    48  func (tf *TmpFiles) RemoveAll() error {
    49  	return os.RemoveAll(tf.Dir)
    50  }
    51  
    52  //----------
    53  
    54  // Returns the filename
    55  func (tf *TmpFiles) MkdirInTmpOrPanic(path string) string {
    56  	s, err := tf.MkdirInTmp(path)
    57  	if err != nil {
    58  		panic(err)
    59  	}
    60  	return s
    61  }
    62  
    63  // Returns the filename
    64  func (tf *TmpFiles) WriteFileInTmpOrPanic(path string, src []byte) string {
    65  	s, err := tf.WriteFileInTmp(path, src)
    66  	if err != nil {
    67  		panic(err)
    68  	}
    69  	return s
    70  }
    71  
    72  // Returns the filename
    73  func (tf *TmpFiles) WriteFileInTmp2OrPanic(path string, src string) string {
    74  	return tf.WriteFileInTmpOrPanic(path, []byte(src))
    75  }