diff options
author | Antoine Eiche <lewo@abesis.fr> | 2018-09-29T07·42+0200 |
---|---|---|
committer | Antoine Eiche <lewo@abesis.fr> | 2018-10-20T07·48+0200 |
commit | 73c2ae43f08ca35cbb8f86ec7c2efc15ad8686b9 (patch) | |
tree | f9e9e24a187bced536401bcffed46d6791267147 /src/nix-store/nix-store.cc | |
parent | 9617a043541d77d79e4f20f9676aae63de72f45d (diff) |
Add --graphml option to the nix-store --query command
This prints the references graph of the store paths in the graphML format [1]. The graphML format is supported by several graph tools such as the Python Networkx library or the Apache Thinkerpop project. [1] http://graphml.graphdrawing.org
Diffstat (limited to 'src/nix-store/nix-store.cc')
-rw-r--r-- | src/nix-store/nix-store.cc | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/nix-store/nix-store.cc b/src/nix-store/nix-store.cc index fe68f681ae28..4051fdbe166c 100644 --- a/src/nix-store/nix-store.cc +++ b/src/nix-store/nix-store.cc @@ -9,6 +9,7 @@ #include "util.hh" #include "worker-protocol.hh" #include "xmlgraph.hh" +#include "graphml.hh" #include <iostream> #include <algorithm> @@ -273,7 +274,7 @@ static void opQuery(Strings opFlags, Strings opArgs) enum QueryType { qDefault, qOutputs, qRequisites, qReferences, qReferrers , qReferrersClosure, qDeriver, qBinding, qHash, qSize - , qTree, qGraph, qXml, qResolve, qRoots }; + , qTree, qGraph, qXml, qGraphML, qResolve, qRoots }; QueryType query = qDefault; bool useOutput = false; bool includeOutputs = false; @@ -300,6 +301,7 @@ static void opQuery(Strings opFlags, Strings opArgs) else if (i == "--tree") query = qTree; else if (i == "--graph") query = qGraph; else if (i == "--xml") query = qXml; + else if (i == "--graphml") query = qGraphML; else if (i == "--resolve") query = qResolve; else if (i == "--roots") query = qRoots; else if (i == "--use-output" || i == "-u") useOutput = true; @@ -413,6 +415,16 @@ static void opQuery(Strings opFlags, Strings opArgs) break; } + case qGraphML: { + PathSet roots; + for (auto & i : opArgs) { + PathSet paths = maybeUseOutputs(store->followLinksToStorePath(i), useOutput, forceRealise); + roots.insert(paths.begin(), paths.end()); + } + printGraphML(ref<Store>(store), roots); + break; + } + case qResolve: { for (auto & i : opArgs) cout << format("%1%\n") % store->followLinksToStorePath(i); |