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  }