Depsgraph: make the dependency cycle report more readable.

Since it is a continuous cycle, there's no need to repeat the
name of the previous bone. Also, dot is a common symbol in object
and bone names, so use '/' instead for node nesting.
This commit is contained in:
Alexander Gavrilov
2019-04-23 18:29:36 +03:00
parent 40baa2e2b3
commit 80b036afab
2 changed files with 9 additions and 16 deletions

View File

@@ -182,20 +182,16 @@ void solve_cycles(CyclesSolverState *state)
OperationNode *to = (OperationNode *)rel->to;
eCyclicCheckVisitedState to_state = get_node_visited_state(to);
if (to_state == NODE_IN_STACK) {
printf("Dependency cycle detected:\n");
printf(" '%s' depends on '%s' through '%s'\n",
to->full_identifier().c_str(),
node->full_identifier().c_str(),
rel->name);
string cycle_str = " " + to->full_identifier() + " depends on\n " +
node->full_identifier() + " via '" + rel->name + "'\n";
StackEntry *current = entry;
while (current->node != to) {
BLI_assert(current != NULL);
printf(" '%s' depends on '%s' through '%s'\n",
current->node->full_identifier().c_str(),
current->from->node->full_identifier().c_str(),
current->via_relation->name);
cycle_str += " " + current->from->node->full_identifier() + " via '" +
current->via_relation->name + "'\n";
current = current->from;
}
printf("Dependency cycle detected:\n%s", cycle_str.c_str());
Relation *sacrificial_relation = select_relation_to_murder(rel, entry);
sacrificial_relation->flag |= RELATION_FLAG_CYCLIC;
++state->num_cycles;

View File

@@ -208,14 +208,11 @@ string OperationNode::identifier() const
* used for logging and debug prints. */
string OperationNode::full_identifier() const
{
string owner_str = "";
if (owner->type == NodeType::BONE) {
owner_str = string(owner->owner->name) + "." + owner->name;
string owner_str = owner->owner->name;
if (owner->type == NodeType::BONE || !owner->name.empty()) {
owner_str += "/" + owner->name;
}
else {
owner_str = owner->owner->name;
}
return owner_str + "." + identifier();
return owner_str + "/" + identifier();
}
void OperationNode::tag_update(Depsgraph *graph, eUpdateSource source)