# File lib/puppet/transaction.rb, line 110
110:     def apply_changes(resource, changes)
111:         changes.collect { |change|
112:             @changes << change
113:             @count += 1
114:             events = nil
115:             begin
116:                 # use an array, so that changes can return more than one
117:                 # event if they want
118:                 events = [change.forward].flatten.reject { |e| e.nil? }
119:             rescue => detail
120:                 if Puppet[:trace]
121:                     puts detail.backtrace
122:                 end
123:                 change.property.err "change from %s to %s failed: %s" %
124:                     [change.property.is_to_s(change.is), change.property.should_to_s(change.should), detail]
125:                 @failures[resource] += 1
126:                 next
127:                 # FIXME this should support using onerror to determine
128:                 # behaviour; or more likely, the client calling us
129:                 # should do so
130:             end
131: 
132:             # Mark that our change happened, so it can be reversed
133:             # if we ever get to that point
134:             unless events.nil? or (events.is_a?(Array) and (events.empty?) or events.include?(:noop))
135:                 change.changed = true
136:                 @resourcemetrics[:applied] += 1
137:             end
138: 
139:             events
140:         }.flatten.reject { |e| e.nil? }
141:     end