def propagate_outdatedness
@items.each { |i| i.outdated_due_to_dependencies = false }
added_items = @items - @previous_items
added_items.each { |i| i.outdated_due_to_dependencies = true }
self.successors_of(nil).each do |i|
i.outdated_due_to_dependencies = true
end
require 'set'
unprocessed = @items.select { |i| i.outdated? }
seen = Set.new(unprocessed)
until unprocessed.empty?
item = unprocessed.shift
self.direct_successors_of(item).each do |successor|
next if seen.include?(successor)
seen << successor
successor.outdated_due_to_dependencies = true
unprocessed << successor
end
end
end