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 }