# File lib/puppet/transaction/resource_harness.rb, line 129
129:   def evaluate(resource)
130:     start = Time.now
131:     status = Puppet::Resource::Status.new(resource)
132: 
133:     perform_changes(resource).each do |event|
134:       status << event
135:     end
136: 
137:     if status.changed? && ! resource.noop?
138:       cache(resource, :synced, Time.now)
139:       resource.flush if resource.respond_to?(:flush)
140:     end
141: 
142:     return status
143:   rescue => detail
144:     resource.fail "Could not create resource status: #{detail}" unless status
145:     puts detail.backtrace if Puppet[:trace]
146:     resource.err "Could not evaluate: #{detail}"
147:     status.failed = true
148:     return status
149:   ensure
150:     (status.evaluation_time = Time.now - start) if status
151:   end