github.com/cheshirekow/buildtools@v0.0.0-20200224190056-5d637702fe81/buildifier/utils/tempfile.go (about) 1 package utils 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 ) 8 9 // TempFile keeps track of temporary files and cleans them up in the end 10 type TempFile struct { 11 filenames []string 12 } 13 14 // WriteTemp writes data to a temporary file and returns the name of the file. 15 func (tf *TempFile) WriteTemp(data []byte) (file string, err error) { 16 f, err := ioutil.TempFile("", "buildifier-tmp-") 17 if err != nil { 18 return "", fmt.Errorf("creating temporary file: %v", err) 19 } 20 defer func() { 21 e := f.Close() 22 if e != nil { 23 err = e 24 } 25 }() 26 27 name := f.Name() 28 if _, err := f.Write(data); err != nil { 29 return "", fmt.Errorf("writing temporary file: %v", err) 30 } 31 tf.filenames = append(tf.filenames, name) 32 return name, nil 33 } 34 35 // Clean removes all created temporary files 36 func (tf *TempFile) Clean() error { 37 for _, file := range tf.filenames { 38 if err := os.Remove(file); err != nil { 39 return err 40 } 41 } 42 tf.filenames = []string{} 43 return nil 44 }