github.com/chenbh/concourse/v6@v6.4.2/worker/runtime/file_store.go (about)

     1  package runtime
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  )
     9  
    10  //go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 . FileStore
    11  
    12  // FileStore is responsible for managing files associated with containers.
    13  //
    14  type FileStore interface {
    15  	// CreateFile creates a file with a particular content in the store.
    16  	//
    17  	Create(name string, content []byte) (absPath string, err error)
    18  
    19  	// DeleteFile removes a file previously created in the store.
    20  	//
    21  	Delete(name string) (err error)
    22  }
    23  
    24  type fileStore struct {
    25  	root string
    26  }
    27  
    28  var _ FileStore = (*fileStore)(nil)
    29  
    30  func NewFileStore(root string) *fileStore {
    31  	return &fileStore{
    32  		root: root,
    33  	}
    34  }
    35  
    36  func (f fileStore) Create(name string, content []byte) (string, error) {
    37  	absPath := filepath.Join(f.root, name)
    38  	dir := filepath.Dir(absPath)
    39  
    40  	err := os.MkdirAll(dir, 0755)
    41  	if err != nil {
    42  		return "", fmt.Errorf("mkdirall: %w", err)
    43  	}
    44  
    45  	err = ioutil.WriteFile(absPath, content, 0755)
    46  	if err != nil {
    47  		return "", fmt.Errorf("write file: %w", err)
    48  	}
    49  
    50  	return absPath, nil
    51  }
    52  
    53  func (f fileStore) Delete(path string) error {
    54  	absPath := filepath.Join(f.root, path)
    55  
    56  	err := os.RemoveAll(absPath)
    57  	if err != nil {
    58  		return fmt.Errorf("remove all: %w", err)
    59  	}
    60  
    61  	return nil
    62  }