diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-12-27 19:31:42 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2017-12-28 17:41:51 +0100 |
commit | e50a8c7a142487d88fe0780c24873c1b95a2283c (patch) | |
tree | 29b1c4ad4e1dd9af49f45fb7b329d2909c511155 /resource/resource.go | |
parent | 7e76a6fd3bc78363ed31d712c63e6b17734797d7 (diff) |
resource: Use MD5 to identify image files
But only a set of byte chunks spread around in the image file to calculate the fingerprint, which is much faster than reading the whole file:
```bash
BenchmarkMD5FromFileFast/full=false-4 300000 4356 ns/op 240 B/op 5 allocs/op
BenchmarkMD5FromFileFast/full=true-4 30000 42899 ns/op 32944 B/op 5 allocs/op
```
Fixes #4186
Diffstat (limited to 'resource/resource.go')
-rw-r--r-- | resource/resource.go | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/resource/resource.go b/resource/resource.go index 2c934d031..19392f3d3 100644 --- a/resource/resource.go +++ b/resource/resource.go @@ -153,7 +153,19 @@ func (r *Spec) newResource( gr := r.newGenericResource(linker, fi, absPublishDir, absSourceFilename, filepath.ToSlash(relTargetFilename), mimeType) if mimeType == "image" { + f, err := r.Fs.Source.Open(absSourceFilename) + if err != nil { + return nil, err + } + defer f.Close() + + hash, err := helpers.MD5FromFileFast(f) + if err != nil { + return nil, err + } + return &Image{ + hash: hash, imaging: r.imaging, genericResource: gr}, nil } |