@@ -143,19 +143,7 @@ func (c *Client) Get(pathname string) (resource.Resource, error) {
143
143
return nil , err
144
144
}
145
145
146
- meta := fi .(hugofs.FileMetaInfo ).Meta ()
147
- pi := meta .PathInfo
148
-
149
- return c .rs .NewResource (resources.ResourceSourceDescriptor {
150
- LazyPublish : true ,
151
- OpenReadSeekCloser : func () (hugio.ReadSeekCloser , error ) {
152
- return c .rs .BaseFs .Assets .Fs .Open (filename )
153
- },
154
- Path : pi ,
155
- GroupIdentity : pi ,
156
- TargetPath : pathname ,
157
- SourceFilenameOrPath : meta .Filename ,
158
- })
146
+ return c .getOrCreateFileResource (fi .(hugofs.FileMetaInfo ))
159
147
})
160
148
}
161
149
@@ -181,6 +169,23 @@ func (c *Client) GetMatch(pattern string) (resource.Resource, error) {
181
169
return res [0 ], err
182
170
}
183
171
172
+ func (c * Client ) getOrCreateFileResource (info hugofs.FileMetaInfo ) (resource.Resource , error ) {
173
+ meta := info .Meta ()
174
+ return c .rs .ResourceCache .GetOrCreateFile (filepath .ToSlash (meta .Filename ), func () (resource.Resource , error ) {
175
+ return c .rs .NewResource (resources.ResourceSourceDescriptor {
176
+ LazyPublish : true ,
177
+ OpenReadSeekCloser : func () (hugio.ReadSeekCloser , error ) {
178
+ return meta .Open ()
179
+ },
180
+ NameNormalized : meta .PathInfo .Path (),
181
+ NameOriginal : meta .PathInfo .Unnormalized ().Path (),
182
+ GroupIdentity : meta .PathInfo ,
183
+ TargetPath : meta .PathInfo .Unnormalized ().Path (),
184
+ SourceFilenameOrPath : meta .Filename ,
185
+ })
186
+ })
187
+ }
188
+
184
189
func (c * Client ) match (name , pattern string , matchFunc func (r resource.Resource ) bool , firstOnly bool ) (resource.Resources , error ) {
185
190
pattern = glob .NormalizePath (pattern )
186
191
partitions := glob .FilterGlobParts (strings .Split (pattern , "/" ))
@@ -191,19 +196,7 @@ func (c *Client) match(name, pattern string, matchFunc func(r resource.Resource)
191
196
var res resource.Resources
192
197
193
198
handle := func (info hugofs.FileMetaInfo ) (bool , error ) {
194
- meta := info .Meta ()
195
-
196
- r , err := c .rs .NewResource (resources.ResourceSourceDescriptor {
197
- LazyPublish : true ,
198
- OpenReadSeekCloser : func () (hugio.ReadSeekCloser , error ) {
199
- return meta .Open ()
200
- },
201
- NameNormalized : meta .PathInfo .Path (),
202
- NameOriginal : meta .PathInfo .Unnormalized ().Path (),
203
- GroupIdentity : meta .PathInfo ,
204
- TargetPath : meta .PathInfo .Unnormalized ().Path (),
205
- SourceFilenameOrPath : meta .Filename ,
206
- })
199
+ r , err := c .getOrCreateFileResource (info )
207
200
if err != nil {
208
201
return true , err
209
202
}
0 commit comments