@@ -91,118 +91,25 @@ func LoadDatasetRefs(ctx context.Context, fs qfs.Filesystem, path string) (*data
91
91
// DerefDataset attempts to fully dereference a dataset
92
92
func DerefDataset (ctx context.Context , store qfs.Filesystem , ds * dataset.Dataset ) error {
93
93
log .Debugf ("DerefDataset path=%q" , ds .Path )
94
- if err := DerefDatasetMeta (ctx , store , ds ); err != nil {
94
+ if err := DerefMeta (ctx , store , ds ); err != nil {
95
95
return err
96
96
}
97
- if err := DerefDatasetStructure (ctx , store , ds ); err != nil {
97
+ if err := DerefStructure (ctx , store , ds ); err != nil {
98
98
return err
99
99
}
100
- if err := DerefDatasetTransform (ctx , store , ds ); err != nil {
100
+ if err := DerefTransform (ctx , store , ds ); err != nil {
101
101
return err
102
102
}
103
- if err := DerefDatasetViz (ctx , store , ds ); err != nil {
103
+ if err := DerefViz (ctx , store , ds ); err != nil {
104
104
return err
105
105
}
106
- if err := DerefDatasetReadme (ctx , store , ds ); err != nil {
106
+ if err := DerefReadme (ctx , store , ds ); err != nil {
107
107
return err
108
108
}
109
- return DerefDatasetCommit (ctx , store , ds )
110
- }
111
-
112
- // DerefDatasetStructure derferences a dataset's structure element if required
113
- // should be a no-op if ds.Structure is nil or isn't a reference
114
- func DerefDatasetStructure (ctx context.Context , store qfs.Filesystem , ds * dataset.Dataset ) error {
115
- if ds .Structure != nil && ds .Structure .IsEmpty () && ds .Structure .Path != "" {
116
- st , err := loadStructure (ctx , store , ds .Structure .Path )
117
- if err != nil {
118
- log .Debug (err .Error ())
119
- return fmt .Errorf ("error loading dataset structure: %s" , err .Error ())
120
- }
121
- // assign path to retain internal reference to path
122
- // st.Assign(dataset.NewStructureRef(ds.Structure.Path))
123
- ds .Structure = st
124
- }
125
- return nil
126
- }
127
-
128
- // DerefDatasetViz dereferences a dataset's Viz element if required
129
- // should be a no-op if ds.Viz is nil or isn't a reference
130
- func DerefDatasetViz (ctx context.Context , store qfs.Filesystem , ds * dataset.Dataset ) error {
131
- if ds .Viz != nil && ds .Viz .IsEmpty () && ds .Viz .Path != "" {
132
- vz , err := loadViz (ctx , store , ds .Viz .Path )
133
- if err != nil {
134
- log .Debug (err .Error ())
135
- return fmt .Errorf ("error loading dataset viz: %s" , err .Error ())
136
- }
137
- // assign path to retain internal reference to path
138
- // vz.Assign(dataset.NewVizRef(ds.Viz.Path))
139
- ds .Viz = vz
140
- }
141
- return nil
142
- }
143
-
144
- // DerefDatasetReadme dereferences a dataset's Readme element if required
145
- // should be a no-op if ds.Readme is nil or isn't a reference
146
- func DerefDatasetReadme (ctx context.Context , store qfs.Filesystem , ds * dataset.Dataset ) error {
147
- if ds .Readme != nil && ds .Readme .IsEmpty () && ds .Readme .Path != "" {
148
- rm , err := loadReadme (ctx , store , ds .Readme .Path )
149
- if err != nil {
150
- log .Debug (err .Error ())
151
- return fmt .Errorf ("error loading dataset readme: %s" , err .Error ())
152
- }
153
- // assign path to retain internal reference to path
154
- // rm.Assign(dataset.NewVizRef(ds.Readme.Path))
155
- ds .Readme = rm
156
- }
157
- return nil
158
- }
159
-
160
- // DerefDatasetTransform derferences a dataset's transform element if required
161
- // should be a no-op if ds.Structure is nil or isn't a reference
162
- func DerefDatasetTransform (ctx context.Context , store qfs.Filesystem , ds * dataset.Dataset ) error {
163
- if ds .Transform != nil && ds .Transform .IsEmpty () && ds .Transform .Path != "" {
164
- t , err := loadTransform (ctx , store , ds .Transform .Path )
165
- if err != nil {
166
- log .Debug (err .Error ())
167
- return fmt .Errorf ("error loading dataset transform: %s" , err .Error ())
168
- }
169
- // assign path to retain internal reference to path
170
- // t.Assign(dataset.NewTransformRef(ds.Transform.Path))
171
- ds .Transform = t
172
- }
173
- return nil
174
- }
175
-
176
- // DerefDatasetMeta derferences a dataset's transform element if required
177
- // should be a no-op if ds.Structure is nil or isn't a reference
178
- func DerefDatasetMeta (ctx context.Context , store qfs.Filesystem , ds * dataset.Dataset ) error {
179
- if ds .Meta != nil && ds .Meta .IsEmpty () && ds .Meta .Path != "" {
180
- md , err := loadMeta (ctx , store , ds .Meta .Path )
181
- if err != nil {
182
- log .Debug (err .Error ())
183
- return fmt .Errorf ("error loading dataset metadata: %s" , err .Error ())
184
- }
185
- // assign path to retain internal reference to path
186
- // md.Assign(dataset.NewMetaRef(ds.Meta.Path))
187
- ds .Meta = md
188
- }
189
- return nil
190
- }
191
-
192
- // DerefDatasetCommit derferences a dataset's Commit element if required
193
- // should be a no-op if ds.Structure is nil or isn't a reference
194
- func DerefDatasetCommit (ctx context.Context , store qfs.Filesystem , ds * dataset.Dataset ) error {
195
- if ds .Commit != nil && ds .Commit .IsEmpty () && ds .Commit .Path != "" {
196
- cm , err := loadCommit (ctx , store , ds .Commit .Path )
197
- if err != nil {
198
- log .Debug (err .Error ())
199
- return fmt .Errorf ("error loading dataset commit: %s" , err .Error ())
200
- }
201
- // assign path to retain internal reference to path
202
- cm .Assign (dataset .NewCommitRef (ds .Commit .Path ))
203
- ds .Commit = cm
109
+ if err := DerefStats (ctx , store , ds ); err != nil {
110
+ return err
204
111
}
205
- return nil
112
+ return DerefCommit ( ctx , store , ds )
206
113
}
207
114
208
115
// SaveSwitches represents options for saving a dataset
@@ -349,6 +256,21 @@ func buildFileGraph(fs qfs.Filesystem, ds *dataset.Dataset, privKey crypto.PrivK
349
256
files = append (files , stf )
350
257
}
351
258
259
+ // stats relies on a structure component & a body file
260
+ if statsCompFile , ok := bdf .(statsComponentFile ); ok {
261
+ hook := func (ctx context.Context , f qfs.File , added map [string ]string ) (io.Reader , error ) {
262
+ sa , err := statsCompFile .StatsComponent ()
263
+ if err != nil {
264
+ return nil , err
265
+ }
266
+ ds .Stats = sa
267
+ return JSONFile (f .FullPath (), sa )
268
+ }
269
+
270
+ hookFile := qfs .NewWriteHookFile (qfs .NewMemfileBytes (PackageFileStats .Filename (), []byte {}), hook , PackageFileStructure .Filename ())
271
+ files = append (files , hookFile )
272
+ }
273
+
352
274
if ds .Meta != nil {
353
275
ds .Meta .DropTransientValues ()
354
276
mdf , err := JSONFile (PackageFileMeta .Filename (), ds .Meta )
@@ -454,6 +376,8 @@ func buildFileGraph(fs qfs.Filesystem, ds *dataset.Dataset, privKey crypto.PrivK
454
376
ds .Viz = dataset .NewVizRef (pathMap [comp ])
455
377
case PackageFileMeta .Filename ():
456
378
ds .Meta = dataset .NewMetaRef (pathMap [comp ])
379
+ case PackageFileStats .Filename ():
380
+ ds .Stats = dataset .NewStatsRef (pathMap [comp ])
457
381
case bdf .FullPath ():
458
382
ds .BodyPath = pathMap [comp ]
459
383
}
0 commit comments