summaryrefslogtreecommitdiffstats
path: root/src/graphviz.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2012-02-14 00:18:46 (GMT)
committerEvan Martin <martine@danga.com>2012-02-14 00:20:18 (GMT)
commit51066421eef67847b244154119ca77a893bd6be8 (patch)
tree73648e2b9bede41bf0045c7bf073c4e645760a20 /src/graphviz.cc
parenta1ea9c2d3b74bbc8b290d41c31b4d54f905146ec (diff)
downloadNinja-51066421eef67847b244154119ca77a893bd6be8.zip
Ninja-51066421eef67847b244154119ca77a893bd6be8.tar.gz
Ninja-51066421eef67847b244154119ca77a893bd6be8.tar.bz2
graphviz: don't draw edges multiple times
From a patch from Ian Godin <iangodin@gmail.com>.
Diffstat (limited to 'src/graphviz.cc')
-rw-r--r--src/graphviz.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/graphviz.cc b/src/graphviz.cc
index 3ead975..8354a22 100644
--- a/src/graphviz.cc
+++ b/src/graphviz.cc
@@ -19,11 +19,11 @@
#include "graph.h"
void GraphViz::AddTarget(Node* node) {
- if (visited_.find(node) != visited_.end())
+ if (visited_nodes_.find(node) != visited_nodes_.end())
return;
printf("\"%p\" [label=\"%s\"]\n", node, node->path().c_str());
- visited_.insert(node);
+ visited_nodes_.insert(node);
Edge* edge = node->in_edge();
@@ -33,6 +33,10 @@ void GraphViz::AddTarget(Node* node) {
return;
}
+ if (visited_edges_.find(edge) != visited_edges_.end())
+ return;
+ visited_edges_.insert(edge);
+
if (edge->inputs_.size() == 1 && edge->outputs_.size() == 1) {
// Can draw simply.
// Note extra space before label text -- this is cosmetic and feels