1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-06 00:51:47 +02:00

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
This commit is contained in:
Antoine Eiche 2018-09-29 09:42:11 +02:00
parent 9617a04354
commit 73c2ae43f0
4 changed files with 126 additions and 1 deletions

View file

@ -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);