summaryrefslogtreecommitdiffstats
path: root/resource/resource.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-12-27 19:31:42 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-12-28 17:41:51 +0100
commite50a8c7a142487d88fe0780c24873c1b95a2283c (patch)
tree29b1c4ad4e1dd9af49f45fb7b329d2909c511155 /resource/resource.go
parent7e76a6fd3bc78363ed31d712c63e6b17734797d7 (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.go12
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
}