##// END OF EJS Templates
Prevent SystemStackError on Issue#all_dependent_issues with mutiple circular dependencies (#7320)....
Jean-Philippe Lang -
r4984:9375f1c3a4ea
parent child
Show More
@@ -455,11 +455,11 class Issue < ActiveRecord::Base
455 (relations_from + relations_to).sort
455 (relations_from + relations_to).sort
456 end
456 end
457
457
458 def all_dependent_issues(except=nil)
458 def all_dependent_issues(except=[])
459 except ||= self
459 except << self
460 dependencies = []
460 dependencies = []
461 relations_from.each do |relation|
461 relations_from.each do |relation|
462 if relation.issue_to && relation.issue_to != except
462 if relation.issue_to && !except.include?(relation.issue_to)
463 dependencies << relation.issue_to
463 dependencies << relation.issue_to
464 dependencies += relation.issue_to.all_dependent_issues(except)
464 dependencies += relation.issue_to.all_dependent_issues(except)
465 end
465 end
@@ -686,6 +686,18 class IssueTest < ActiveSupport::TestCase
686
686
687 assert_equal [2, 3], Issue.find(1).all_dependent_issues.collect(&:id).sort
687 assert_equal [2, 3], Issue.find(1).all_dependent_issues.collect(&:id).sort
688 end
688 end
689
690 def test_all_dependent_issues_with_persistent_multiple_circular_dependencies
691 IssueRelation.delete_all
692 assert IssueRelation.create!(:issue_from => Issue.find(1), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_RELATES)
693 assert IssueRelation.create!(:issue_from => Issue.find(2), :issue_to => Issue.find(3), :relation_type => IssueRelation::TYPE_RELATES)
694 assert IssueRelation.create!(:issue_from => Issue.find(3), :issue_to => Issue.find(8), :relation_type => IssueRelation::TYPE_RELATES)
695 # Validation skipping
696 assert IssueRelation.new(:issue_from => Issue.find(8), :issue_to => Issue.find(2), :relation_type => IssueRelation::TYPE_RELATES).save(false)
697 assert IssueRelation.new(:issue_from => Issue.find(3), :issue_to => Issue.find(1), :relation_type => IssueRelation::TYPE_RELATES).save(false)
698
699 assert_equal [2, 3, 8], Issue.find(1).all_dependent_issues.collect(&:id).sort
700 end
689
701
690 context "#done_ratio" do
702 context "#done_ratio" do
691 setup do
703 setup do
General Comments 0
You need to be logged in to leave comments. Login now