- commit
- c26a047
- parent
- 532a539
- author
- Eric Bower
- date
- 2026-04-20 20:39:24 -0400 EDT
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
1@@ -275,6 +275,14 @@ func findPlusFF(dbpool pgsdb.PgsDB, cfg *PgsConfig, userID string) *db.FeatureFl
2 return ff
3 }
4
5+func mtimeToTime(entry *sendutils.FileEntry) time.Time {
6+ var mtime time.Time
7+ if entry.Mtime > 0 {
8+ return time.Unix(entry.Mtime, 0)
9+ }
10+ return mtime
11+}
12+
13 func (h *UploadAssetHandler) Write(s *pssh.SSHServerConnSession, entry *sendutils.FileEntry) (string, error) {
14 logger := pssh.GetLogger(s)
15 user := pssh.GetUser(s)
16@@ -322,12 +330,15 @@ func (h *UploadAssetHandler) Write(s *pssh.SSHServerConnSession, entry *sendutil
17 return "", fmt.Errorf(msg, project.Blocked)
18 }
19
20+ info := &storage.ObjectInfo{
21+ LastModified: mtimeToTime(entry),
22+ }
23 if entry.Mode.IsDir() {
24 _, _, err := h.Cfg.Storage.PutObject(
25 bucket,
26 path.Join(shared.GetAssetFileName(entry), "._pico_keep_dir"),
27 bytes.NewReader([]byte{}),
28- entry,
29+ info,
30 )
31 return "", err
32 }
33@@ -498,11 +509,14 @@ func (h *UploadAssetHandler) Delete(s *pssh.SSHServerConnSession, entry *senduti
34 })
35
36 if len(sibs) == 0 {
37+ info := &storage.ObjectInfo{
38+ LastModified: mtimeToTime(entry),
39+ }
40 _, _, err := h.Cfg.Storage.PutObject(
41 bucket,
42 filepath.Join(pathDir, "._pico_keep_dir"),
43 bytes.NewReader([]byte{}),
44- entry,
45+ info,
46 )
47 if err != nil {
48 return err
49@@ -555,11 +569,14 @@ func (h *UploadAssetHandler) writeAsset(s *pssh.SSHServerConnSession, reader io.
50 "filename", assetFilepath,
51 )
52
53+ info := &storage.ObjectInfo{
54+ LastModified: mtimeToTime(data.FileEntry),
55+ }
56 _, fsize, err := h.Cfg.Storage.PutObject(
57 data.Bucket,
58 assetFilepath,
59 reader,
60- data.FileEntry,
61+ info,
62 )
63 return fsize, err
64 }
+1,
-1
1@@ -289,7 +289,7 @@ func (h *UploadImgHandler) metaImg(data *PostMetaData) error {
2 bucket,
3 h.getObjectPath(data.Filename),
4 sendutils.NopReadAndReaderAtCloser(reader),
5- &sendutils.FileEntry{},
6+ &storage.ObjectInfo{},
7 )
8 if err != nil {
9 return err
+3,
-3
1@@ -148,7 +148,7 @@ func (s *StorageFS) GetObject(bucket Bucket, fpath string) (utils.ReadAndReaderA
2 return dat, objInfo, nil
3 }
4
5-func (s *StorageFS) PutObject(bucket Bucket, fpath string, contents io.Reader, entry *utils.FileEntry) (string, int64, error) {
6+func (s *StorageFS) PutObject(bucket Bucket, fpath string, contents io.Reader, info *ObjectInfo) (string, int64, error) {
7 loc := filepath.Join(bucket.Path, fpath)
8 err := os.MkdirAll(filepath.Dir(loc), os.ModePerm)
9 if err != nil {
10@@ -168,8 +168,8 @@ func (s *StorageFS) PutObject(bucket Bucket, fpath string, contents io.Reader, e
11 return "", 0, err
12 }
13
14- if entry.Mtime > 0 {
15- uTime := time.Unix(entry.Mtime, 0)
16+ if !info.LastModified.IsZero() {
17+ uTime := info.LastModified
18 _ = os.Chtimes(loc, uTime, uTime)
19 }
20
+6,
-6
1@@ -58,8 +58,8 @@ func TestFsAdapter(t *testing.T) {
2
3 str := "here is a test file"
4 reader := strings.NewReader(str)
5- actualPath, size, err := st.PutObject(bucket, "./nice/test.txt", reader, &utils.FileEntry{
6- Mtime: modTime.Unix(),
7+ actualPath, size, err := st.PutObject(bucket, "./nice/test.txt", reader, &ObjectInfo{
8+ LastModified: modTime,
9 })
10 if err != nil {
11 t.Fatal(err)
12@@ -98,8 +98,8 @@ func TestFsAdapter(t *testing.T) {
13
14 str = "a deeply nested test file"
15 reader = strings.NewReader(str)
16- _, _, err = st.PutObject(bucket, "./here/we/go/again.txt", reader, &utils.FileEntry{
17- Mtime: modTime.Unix(),
18+ _, _, err = st.PutObject(bucket, "./here/we/go/again.txt", reader, &ObjectInfo{
19+ LastModified: modTime,
20 })
21 if err != nil {
22 t.Fatal(err)
23@@ -193,8 +193,8 @@ func TestFsAdapter(t *testing.T) {
24
25 str = "a deeply nested test file"
26 reader = strings.NewReader(str)
27- _, _, err = st.PutObject(bucket, "./here/yes/we/can.txt", reader, &utils.FileEntry{
28- Mtime: modTime.Unix(),
29+ _, _, err = st.PutObject(bucket, "./here/yes/we/can.txt", reader, &ObjectInfo{
30+ LastModified: modTime,
31 })
32 if err != nil {
33 t.Fatal(err)
+9,
-1
1@@ -252,11 +252,19 @@ func (h *UploadAssetHandler) writeAsset(s *pssh.SSHServerConnSession, data *File
2 objectFileName,
3 )
4
5+ var mtime time.Time
6+ if data.Mtime > 0 {
7+ mtime = time.Unix(data.Mtime, 0)
8+ }
9+ info := &ObjectInfo{
10+ LastModified: mtime,
11+ }
12+
13 _, _, err = h.Cfg.Storage.PutObject(
14 data.Bucket,
15 objectFileName,
16 utils.NopReadAndReaderAtCloser(reader),
17- data.FileEntry,
18+ info,
19 )
20 if err != nil {
21 return err
+1,
-1
1@@ -105,7 +105,7 @@ func (s *StorageMemory) GetObject(bucket Bucket, fpath string) (utils.ReadAndRea
2 return &seekableReader{bytes.NewReader([]byte(dat))}, objInfo, nil
3 }
4
5-func (s *StorageMemory) PutObject(bucket Bucket, fpath string, contents io.Reader, entry *utils.FileEntry) (string, int64, error) {
6+func (s *StorageMemory) PutObject(bucket Bucket, fpath string, contents io.Reader, info *ObjectInfo) (string, int64, error) {
7 s.mu.Lock()
8 defer s.mu.Unlock()
9
+1,
-1
1@@ -32,7 +32,7 @@ type BucketStorage interface {
2
3 type ObjectStorage interface {
4 GetObject(bucket Bucket, fpath string) (utils.ReadAndReaderAtCloser, *ObjectInfo, error)
5- PutObject(bucket Bucket, fpath string, contents io.Reader, entry *utils.FileEntry) (string, int64, error)
6+ PutObject(bucket Bucket, fpath string, contents io.Reader, info *ObjectInfo) (string, int64, error)
7 DeleteObject(bucket Bucket, fpath string) error
8 ListObjects(bucket Bucket, dir string, recursive bool) ([]os.FileInfo, error)
9 }