mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-25 22:00:58 +02:00
resources/images: Make the image cache more robust
Also allow timeout to be set as a duration string, e.g. `30s`. Fixes #6501
This commit is contained in:
@@ -88,7 +88,7 @@ func (i *imageResource) getExif() (*exif.Exif, error) {
|
||||
|
||||
key := i.getImageMetaCacheTargetPath()
|
||||
|
||||
read := func(info filecache.ItemInfo, r io.Reader) error {
|
||||
read := func(info filecache.ItemInfo, r io.ReadSeeker) error {
|
||||
meta := &imageMeta{}
|
||||
data, err := ioutil.ReadAll(r)
|
||||
if err != nil {
|
||||
|
@@ -96,12 +96,18 @@ func (c *imageCache) getOrCreate(
|
||||
// These funcs are protected by a named lock.
|
||||
// read clones the parent to its new name and copies
|
||||
// the content to the destinations.
|
||||
read := func(info filecache.ItemInfo, r io.Reader) error {
|
||||
read := func(info filecache.ItemInfo, r io.ReadSeeker) error {
|
||||
img = parent.clone(nil)
|
||||
rp := img.getResourcePaths()
|
||||
rp.relTargetDirFile.file = relTarget.file
|
||||
img.setSourceFilename(info.Name)
|
||||
|
||||
if err := img.InitConfig(r); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
r.Seek(0, 0)
|
||||
|
||||
w, err := img.openDestinationsForWriting()
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -114,6 +120,7 @@ func (c *imageCache) getOrCreate(
|
||||
|
||||
defer w.Close()
|
||||
_, err = io.Copy(w, r)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
|
@@ -123,6 +123,15 @@ func (i Image) WithSpec(s Spec) *Image {
|
||||
return &i
|
||||
}
|
||||
|
||||
// InitConfig reads the image config from the given reader.
|
||||
func (i *Image) InitConfig(r io.Reader) error {
|
||||
var err error
|
||||
i.configInit.Do(func() {
|
||||
i.config, _, err = image.DecodeConfig(r)
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *Image) initConfig() error {
|
||||
var err error
|
||||
i.configInit.Do(func() {
|
||||
@@ -130,10 +139,7 @@ func (i *Image) initConfig() error {
|
||||
return
|
||||
}
|
||||
|
||||
var (
|
||||
f hugio.ReadSeekCloser
|
||||
config image.Config
|
||||
)
|
||||
var f hugio.ReadSeekCloser
|
||||
|
||||
f, err = i.Spec.ReadSeekCloser()
|
||||
if err != nil {
|
||||
@@ -141,11 +147,7 @@ func (i *Image) initConfig() error {
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
config, _, err = image.DecodeConfig(f)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
i.config = config
|
||||
i.config, _, err = image.DecodeConfig(f)
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user