47 lines
897 B
Go
47 lines
897 B
Go
package workspace
|
|
|
|
import (
|
|
"fmt"
|
|
"io/fs"
|
|
"os"
|
|
|
|
"git.michelsen.id/phill/chron/chron-note/internal/domain"
|
|
)
|
|
|
|
func (ws *Workspace) ListObjectIDs() ([]domain.ObjectID, error) {
|
|
entries, err := os.ReadDir(ws.Dir)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("readdir workspace dir: %w", err)
|
|
}
|
|
|
|
out := make([]domain.ObjectID, 0, len(entries))
|
|
for _, e := range entries {
|
|
if e.IsDir() {
|
|
continue
|
|
}
|
|
info, err := e.Info()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("stat workspace entry: %w", err)
|
|
}
|
|
if !info.Mode().IsRegular() {
|
|
continue
|
|
}
|
|
|
|
id, err := domain.ParseObjectID(e.Name())
|
|
if err != nil {
|
|
continue
|
|
}
|
|
out = append(out, id)
|
|
}
|
|
|
|
return out, nil
|
|
}
|
|
|
|
func (ws *Workspace) Stat(id domain.ObjectID) (fs.FileInfo, error) {
|
|
fi, err := os.Stat(ws.ObjectPath(id))
|
|
if err != nil {
|
|
return nil, fmt.Errorf("stat object %s: %w", id.String(), err)
|
|
}
|
|
return fi, nil
|
|
}
|