[PATCH] guix: add edgelist graph-backend.

  • Open
  • quality assurance status badge
Details
2 participants
  • kyle
  • Liliana Marie Prikler
Owner
unassigned
Submitted by
kyle
Severity
normal
Merged with
K
(address . guix-patches@gnu.org)(name . Kyle Andrews)(address . kyle@posteo.net)
0019ab80bbec15bbd5ae52e18d9a3dd6fd708a78.1677642438.git.kyle@posteo.net
From: Kyle Andrews <kyle@posteo.net>

* guix/graph.scm: Add csv backend.
---
doc/guix.texi | 14 ++++++++------
guix/graph.scm | 21 ++++++++++++++++++++-
2 files changed, 28 insertions(+), 7 deletions(-)

Toggle diff (78 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 27a0c62532..09d6be4edb 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -14844,16 +14844,18 @@ Invoking guix graph
Packages and their dependencies form a @dfn{graph}, specifically a
directed acyclic graph (DAG). It can quickly become difficult to have a
mental model of the package DAG, so the @command{guix graph} command
-provides a visual representation of the DAG@. By default,
-@command{guix graph} emits a DAG representation in the input format of
+provides a visual representation of the DAG@. By default, @command{guix
+graph} emits a DAG representation in the input format of
@uref{https://www.graphviz.org/, Graphviz}, so its output can be passed
directly to the @command{dot} command of Graphviz. It can also emit an
HTML page with embedded JavaScript code to display a ``chord diagram''
in a Web browser, using the @uref{https://d3js.org/, d3.js} library, or
emit Cypher queries to construct a graph in a graph database supporting
-the @uref{https://www.opencypher.org/, openCypher} query language. With
-@option{--path}, it simply displays the shortest path between two
-packages. The general syntax is:
+the @uref{https://www.opencypher.org/, openCypher} query language. It
+can also emit a CSV table with the raw data required to reconstruct the
+graph using generic network analysis software like
+@uref{https://igraph.org/, igraph}. With @option{--path}, it simply
+displays the shortest path between two packages. The general syntax is:
@example
guix graph @var{options} @var{package}@dots{}
@@ -15061,7 +15063,7 @@ Invoking guix graph
@item --list-backends
List the supported graph backends.
-Currently, the available backends are Graphviz and d3.js.
+Currently, the available backends are Graphviz, Cypher, d3.js, and csv.
@item --path
Display the shortest path between two nodes of the type specified by
diff --git a/guix/graph.scm b/guix/graph.scm
index 41219ab67d..6a3f802da9 100644
--- a/guix/graph.scm
+++ b/guix/graph.scm
@@ -255,6 +255,24 @@ (define %graphviz-backend
emit-prologue emit-epilogue
emit-node emit-edge))
+(define (emit-csv-prologue name port)
+ (display "table, from, to\n" port))
+
+(define (emit-csv-epilogue port)
+ (display "" port))
+
+(define (emit-csv-node id label port)
+ (format port "package, ~a, ~a\n" label id))
+
+(define (emit-csv-edge id1 id2 port)
+ (format port "depends, ~a, ~a\n" id1 id2))
+
+(define %csv-backend
+ (graph-backend "csv"
+ "Generate graph in CSV format"
+ emit-csv-prologue emit-csv-epilogue
+ emit-csv-node emit-csv-edge))
+
;;;
;;; d3js export.
@@ -338,7 +356,8 @@ (define %cypher-backend
(define %graph-backends
(list %graphviz-backend
%d3js-backend
- %cypher-backend))
+ %cypher-backend
+ %csv-backend))
(define (lookup-backend name)
"Return the graph backend called NAME. Raise an error if it is not found."
--
2.37.2
L
L
Liliana Marie Prikler wrote on 1 Mar 2023 10:32
(address . control@debbugs.gnu.org)(name . Kyle Andrews)(address . kyle@posteo.net)
a2064a92dd87c1c6509e3096e8df7d23493e3f16.camel@ist.tugraz.at
merge 61527 61888
thanks

@Kyle: Next time, use the reroll-count option of git send-email and
resend your patch to the bug that's already open.

Cheers
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 61888@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 61888
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch