drone/gitrpc/internal/storage/local.go
Enver Bisevac 578dd13d8d [maint] eb/gitrpc refactor (#51)
* pull/push impl done

* Basic auth for harness

* gitrpc as top level package

* New ctor for package

* gitrpcserver instead of server2
2022-11-03 13:17:03 +01:00

49 lines
946 B
Go

// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package storage
import (
"bytes"
"fmt"
"os"
"path/filepath"
"sync"
)
type LocalStore struct {
mutex sync.RWMutex
files map[string]bool
}
func NewLocalStore() *LocalStore {
return &LocalStore{
files: 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.files[filePath] = true
return filePath, nil
}