post_publish.go (1491B)
1 // Copyright 2020 The Hugo Authors. All rights reserved. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package resources 15 16 import ( 17 "github.com/gohugoio/hugo/resources/postpub" 18 "github.com/gohugoio/hugo/resources/resource" 19 ) 20 21 type transformationKeyer interface { 22 TransformationKey() string 23 } 24 25 // PostProcess wraps the given Resource for later processing. 26 func (spec *Spec) PostProcess(r resource.Resource) (postpub.PostPublishedResource, error) { 27 key := r.(transformationKeyer).TransformationKey() 28 spec.postProcessMu.RLock() 29 result, found := spec.PostProcessResources[key] 30 spec.postProcessMu.RUnlock() 31 if found { 32 return result, nil 33 } 34 35 spec.postProcessMu.Lock() 36 defer spec.postProcessMu.Unlock() 37 38 // Double check 39 result, found = spec.PostProcessResources[key] 40 if found { 41 return result, nil 42 } 43 44 result = postpub.NewPostPublishResource(spec.incr.Incr(), r) 45 if result == nil { 46 panic("got nil result") 47 } 48 spec.PostProcessResources[key] = result 49 50 return result, nil 51 }