summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-04-02 21:46:26 +0200
committerLudovic Courtès <ludo@gnu.org>2016-04-02 22:40:18 +0200
commit8463d1345ef302fd016c73b412bd90fdf8adc818 (patch)
tree009eb22993d35ba73550278855fb0273406bda7e
parent451c1436a38a92d6903f78381f74c935a332ee87 (diff)
downloadguix-8463d1345ef302fd016c73b412bd90fdf8adc818.tar.gz
graph: Edges are colored based on their source node.
* guix/graph.scm (%colors): New variable.
(pop-color): New procedure.
(emit-edge): Use it.
-rw-r--r--guix/graph.scm16
1 files changed, 13 insertions, 3 deletions
diff --git a/guix/graph.scm b/guix/graph.scm
index a39208e7f9..1a8f2d55b3 100644
--- a/guix/graph.scm
+++ b/guix/graph.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -131,6 +131,16 @@ typically returned by 'node-edges' or 'node-back-edges'."
   (node     graph-backend-node)
   (edge     graph-backend-edge))
 
+(define %colors
+  ;; See colortbl.h in Graphviz.
+  #("red" "magenta" "blue" "cyan3" "darkseagreen"
+    "peachpuff4" "darkviolet" "dimgrey" "darkgoldenrod"))
+
+(define (pop-color hint)
+  "Return a Graphviz color based on HINT, an arbitrary object."
+  (let ((index (hash hint (vector-length %colors))))
+    (vector-ref %colors index)))
+
 (define (emit-prologue name port)
   (format port "digraph \"Guix ~a\" {\n"
           name))
@@ -140,8 +150,8 @@ typically returned by 'node-edges' or 'node-back-edges'."
   (format port "  \"~a\" [label = \"~a\", shape = box, fontname = Helvetica];~%"
           id label))
 (define (emit-edge id1 id2 port)
-  (format port "  \"~a\" -> \"~a\" [color = red];~%"
-          id1 id2))
+  (format port "  \"~a\" -> \"~a\" [color = ~a];~%"
+          id1 id2 (pop-color id1)))
 
 (define %graphviz-backend
   (graph-backend emit-prologue emit-epilogue