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:
parent
9617a04354
commit
73c2ae43f0
4 changed files with 126 additions and 1 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue