issue_status[self] = ePROCESS_ALL
while (!queue.empty?) do
-
current_issue = queue.shift
current_issue_status = issue_status[current_issue]
-
dependencies << current_issue
# Add parent to queue, if not already in it.
parentStatus = issue_status[parent]
if parent && (parentStatus == eNOT_DISCOVERED) && !except.include?(parent)
-
queue << parent
issue_status[parent] = ePROCESS_RELATIONS_ONLY
-
end
# Add children to queue, but only if they are not already in it and
# the children of the current node need to be processed.
if current_issue.children && (current_issue_status == ePROCESS_CHILDREN_ONLY || current_issue_status == ePROCESS_ALL)
-
current_issue.children.each do |child|
-
if (issue_status[child] == eNOT_DISCOVERED) && !except.include?(child)
queue << child
issue_status[child] = ePROCESS_ALL
-
elsif (issue_status[child] == eRELATIONS_PROCESSED) && !except.include?(child)
queue << child
issue_status[child] = ePROCESS_CHILDREN_ONLY
-
elsif (issue_status[child] == ePROCESS_RELATIONS_ONLY) && !except.include?(child)
queue << child
issue_status[child] = ePROCESS_ALL
# Add related issues to the queue, if they are not already in it.
current_issue.relations_from.map(&:issue_to).each do |relatedIssue|
-
if (issue_status[relatedIssue] == eNOT_DISCOVERED) && !except.include?(relatedIssue)
queue << relatedIssue
issue_status[relatedIssue] = ePROCESS_ALL
-
elsif (issue_status[relatedIssue] == eRELATIONS_PROCESSED) && !except.include?(relatedIssue)
queue << relatedIssue
issue_status[relatedIssue] = ePROCESS_CHILDREN_ONLY
-
elsif (issue_status[relatedIssue] == ePROCESS_RELATIONS_ONLY) && !except.include?(relatedIssue)
queue << relatedIssue
issue_status[relatedIssue] = ePROCESS_ALL
# Set new status for current issue
if (current_issue_status == ePROCESS_ALL) || (current_issue_status == ePROCESS_CHILDREN_ONLY)
issue_status[current_issue] = eALL_PROCESSED
-
elsif (current_issue_status == ePROCESS_RELATIONS_ONLY)
issue_status[current_issue] = eRELATIONS_PROCESSED
end
-
end # while
# Remove the issues from the "except" parameter from the result array