storage.go 837 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package app
  2. import (
  3. "log/slog"
  4. "os"
  5. "path/filepath"
  6. "github.com/sst/opencode/pkg/app/paths"
  7. "gocloud.dev/blob"
  8. "gocloud.dev/blob/fileblob"
  9. )
  10. type Storage struct {
  11. bucket *blob.Bucket
  12. app *App
  13. log *slog.Logger
  14. }
  15. func initStorage(app *App) (*Storage, error) {
  16. var err error
  17. result := &Storage{
  18. app: app,
  19. }
  20. storageDir := paths.Storage(app.directory)
  21. if err := os.MkdirAll(storageDir, 0755); err != nil {
  22. return nil, err
  23. }
  24. result.bucket, err = fileblob.OpenBucket(storageDir, &fileblob.Options{
  25. NoTempDir: true,
  26. })
  27. if err != nil {
  28. return nil, err
  29. }
  30. return result, nil
  31. }
  32. type StorageWriterOptions = blob.WriterOptions
  33. func (s *Storage) NewWriter(opts *StorageWriterOptions, path ...string) (*blob.Writer, error) {
  34. joined := filepath.Join(path...)
  35. return s.bucket.NewWriter(s.app.ctx, joined, nil)
  36. }