Commit c26a047

Eric Bower  ·  2026-04-20 20:39:24 -0400 EDT
parent 532a539
refactor(storage): put accepts ObjectInfo instead of FileEntry

This is a symmetric change so everything uses the same objects
7 files changed,  +41, -16
+20, -3
......@@ -275,6 +275,14 @@ func findPlusFF(dbpool pgsdb.PgsDB, cfg *PgsConfig, userID string) *db.FeatureFl
275275 return ff
276276 }
277277
278+func mtimeToTime(entry *sendutils.FileEntry) time.Time {
279+ var mtime time.Time
280+ if entry.Mtime > 0 {
281+ return time.Unix(entry.Mtime, 0)
282+ }
283+ return mtime
284+}
285+
278286 func (h *UploadAssetHandler) Write(s *pssh.SSHServerConnSession, entry *sendutils.FileEntry) (string, error) {
279287 logger := pssh.GetLogger(s)
280288 user := pssh.GetUser(s)
......@@ -322,12 +330,15 @@ func (h *UploadAssetHandler) Write(s *pssh.SSHServerConnSession, entry *sendutil
322330 return "", fmt.Errorf(msg, project.Blocked)
323331 }
324332
333+ info := &storage.ObjectInfo{
334+ LastModified: mtimeToTime(entry),
335+ }
325336 if entry.Mode.IsDir() {
326337 _, _, err := h.Cfg.Storage.PutObject(
327338 bucket,
328339 path.Join(shared.GetAssetFileName(entry), "._pico_keep_dir"),
329340 bytes.NewReader([]byte{}),
330- entry,
341+ info,
331342 )
332343 return "", err
333344 }
......@@ -498,11 +509,14 @@ func (h *UploadAssetHandler) Delete(s *pssh.SSHServerConnSession, entry *senduti
498509 })
499510
500511 if len(sibs) == 0 {
512+ info := &storage.ObjectInfo{
513+ LastModified: mtimeToTime(entry),
514+ }
501515 _, _, err := h.Cfg.Storage.PutObject(
502516 bucket,
503517 filepath.Join(pathDir, "._pico_keep_dir"),
504518 bytes.NewReader([]byte{}),
505- entry,
519+ info,
506520 )
507521 if err != nil {
508522 return err
......@@ -555,11 +569,14 @@ func (h *UploadAssetHandler) writeAsset(s *pssh.SSHServerConnSession, reader io.
555569 "filename", assetFilepath,
556570 )
557571
572+ info := &storage.ObjectInfo{
573+ LastModified: mtimeToTime(data.FileEntry),
574+ }
558575 _, fsize, err := h.Cfg.Storage.PutObject(
559576 data.Bucket,
560577 assetFilepath,
561578 reader,
562- data.FileEntry,
579+ info,
563580 )
564581 return fsize, err
565582 }
+1, -1
......@@ -289,7 +289,7 @@ func (h *UploadImgHandler) metaImg(data *PostMetaData) error {
289289 bucket,
290290 h.getObjectPath(data.Filename),
291291 sendutils.NopReadAndReaderAtCloser(reader),
292- &sendutils.FileEntry{},
292+ &storage.ObjectInfo{},
293293 )
294294 if err != nil {
295295 return err
+3, -3
......@@ -148,7 +148,7 @@ func (s *StorageFS) GetObject(bucket Bucket, fpath string) (utils.ReadAndReaderA
148148 return dat, objInfo, nil
149149 }
150150
151-func (s *StorageFS) PutObject(bucket Bucket, fpath string, contents io.Reader, entry *utils.FileEntry) (string, int64, error) {
151+func (s *StorageFS) PutObject(bucket Bucket, fpath string, contents io.Reader, info *ObjectInfo) (string, int64, error) {
152152 loc := filepath.Join(bucket.Path, fpath)
153153 err := os.MkdirAll(filepath.Dir(loc), os.ModePerm)
154154 if err != nil {
......@@ -168,8 +168,8 @@ func (s *StorageFS) PutObject(bucket Bucket, fpath string, contents io.Reader, e
168168 return "", 0, err
169169 }
170170
171- if entry.Mtime > 0 {
172- uTime := time.Unix(entry.Mtime, 0)
171+ if !info.LastModified.IsZero() {
172+ uTime := info.LastModified
173173 _ = os.Chtimes(loc, uTime, uTime)
174174 }
175175
+6, -6
......@@ -58,8 +58,8 @@ func TestFsAdapter(t *testing.T) {
5858
5959 str := "here is a test file"
6060 reader := strings.NewReader(str)
61- actualPath, size, err := st.PutObject(bucket, "./nice/test.txt", reader, &utils.FileEntry{
62- Mtime: modTime.Unix(),
61+ actualPath, size, err := st.PutObject(bucket, "./nice/test.txt", reader, &ObjectInfo{
62+ LastModified: modTime,
6363 })
6464 if err != nil {
6565 t.Fatal(err)
......@@ -98,8 +98,8 @@ func TestFsAdapter(t *testing.T) {
9898
9999 str = "a deeply nested test file"
100100 reader = strings.NewReader(str)
101- _, _, err = st.PutObject(bucket, "./here/we/go/again.txt", reader, &utils.FileEntry{
102- Mtime: modTime.Unix(),
101+ _, _, err = st.PutObject(bucket, "./here/we/go/again.txt", reader, &ObjectInfo{
102+ LastModified: modTime,
103103 })
104104 if err != nil {
105105 t.Fatal(err)
......@@ -193,8 +193,8 @@ func TestFsAdapter(t *testing.T) {
193193
194194 str = "a deeply nested test file"
195195 reader = strings.NewReader(str)
196- _, _, err = st.PutObject(bucket, "./here/yes/we/can.txt", reader, &utils.FileEntry{
197- Mtime: modTime.Unix(),
196+ _, _, err = st.PutObject(bucket, "./here/yes/we/can.txt", reader, &ObjectInfo{
197+ LastModified: modTime,
198198 })
199199 if err != nil {
200200 t.Fatal(err)
+9, -1
......@@ -252,11 +252,19 @@ func (h *UploadAssetHandler) writeAsset(s *pssh.SSHServerConnSession, data *File
252252 objectFileName,
253253 )
254254
255+ var mtime time.Time
256+ if data.Mtime > 0 {
257+ mtime = time.Unix(data.Mtime, 0)
258+ }
259+ info := &ObjectInfo{
260+ LastModified: mtime,
261+ }
262+
255263 _, _, err = h.Cfg.Storage.PutObject(
256264 data.Bucket,
257265 objectFileName,
258266 utils.NopReadAndReaderAtCloser(reader),
259- data.FileEntry,
267+ info,
260268 )
261269 if err != nil {
262270 return err
+1, -1
......@@ -105,7 +105,7 @@ func (s *StorageMemory) GetObject(bucket Bucket, fpath string) (utils.ReadAndRea
105105 return &seekableReader{bytes.NewReader([]byte(dat))}, objInfo, nil
106106 }
107107
108-func (s *StorageMemory) PutObject(bucket Bucket, fpath string, contents io.Reader, entry *utils.FileEntry) (string, int64, error) {
108+func (s *StorageMemory) PutObject(bucket Bucket, fpath string, contents io.Reader, info *ObjectInfo) (string, int64, error) {
109109 s.mu.Lock()
110110 defer s.mu.Unlock()
111111
+1, -1
......@@ -32,7 +32,7 @@ type BucketStorage interface {
3232
3333 type ObjectStorage interface {
3434 GetObject(bucket Bucket, fpath string) (utils.ReadAndReaderAtCloser, *ObjectInfo, error)
35- PutObject(bucket Bucket, fpath string, contents io.Reader, entry *utils.FileEntry) (string, int64, error)
35+ PutObject(bucket Bucket, fpath string, contents io.Reader, info *ObjectInfo) (string, int64, error)
3636 DeleteObject(bucket Bucket, fpath string) error
3737 ListObjects(bucket Bucket, dir string, recursive bool) ([]os.FileInfo, error)
3838 }