drone/internal/gitrpc/local.go
Enver Bisevac 1cf07b6417 initial work on create repository (#27)
* initial work on create repository

* create repository as single method call using client stream

* resources handler and files

* minor fix for wire dep graph
2022-10-11 17:48:04 +02:00

45 lines
757 B
Go

package gitrpc
import (
"bytes"
"fmt"
"os"
"path/filepath"
"sync"
)
type localStore struct {
mutex sync.RWMutex
images map[string]bool
}
func newLocalStore() *localStore {
return &localStore{
images: make(map[string]bool),
}
}
func (store *localStore) Save(filePath string, data bytes.Buffer) (string, error) {
err := os.MkdirAll(filepath.Dir(filePath), 0o777)
if err != nil {
return "", err
}
file, err := os.Create(filePath)
if err != nil {
return "", fmt.Errorf("cannot create file: %w", err)
}
defer file.Close()
_, err = data.WriteTo(file)
if err != nil {
return "", fmt.Errorf("cannot write to file: %w", err)
}
store.mutex.Lock()
defer store.mutex.Unlock()
store.images[filePath] = true
return filePath, nil
}