diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/issue.rb | 26 |
1 files changed, 7 insertions, 19 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb index 3b4c79def..2e7732089 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -853,28 +853,16 @@ class Issue < ActiveRecord::Base IssueRelation.find(relation_id, :conditions => ["issue_to_id = ? OR issue_from_id = ?", id, id]) end + # Returns all the other issues that depend on the issue def all_dependent_issues(except=[]) except << self dependencies = [] - relations_from.each do |relation| - if relation.issue_to && !except.include?(relation.issue_to) - dependencies << relation.issue_to - dependencies += relation.issue_to.all_dependent_issues(except) - end - end - unless leaf? - children.each do |child| - if !except.include?(child) - dependencies << child - dependencies += child.all_dependent_issues(except) - end - end - end - if parent && !except.include?(parent) - dependencies << parent - dependencies += parent.all_dependent_issues(except) - end - dependencies + dependencies += relations_from.map(&:issue_to) + dependencies += children unless leaf? + dependencies << parent + dependencies.compact! + dependencies -= except + dependencies + dependencies.map {|issue| issue.all_dependent_issues(except)}.flatten end # Returns an array of issues that duplicate this one |