* Re-enable dot graph generation.
This commit is contained in:
parent
298dd487bb
commit
6f788880b6
2 changed files with 44 additions and 34 deletions
|
@ -2,7 +2,6 @@
|
|||
#include "build.hh"
|
||||
|
||||
|
||||
#if 0
|
||||
static string dotQuote(const string & s)
|
||||
{
|
||||
return "\"" + s + "\"";
|
||||
|
@ -40,10 +39,8 @@ static string makeNode(const string & id, const string & label,
|
|||
static string symbolicName(const string & path)
|
||||
{
|
||||
string p = baseNameOf(path);
|
||||
if (isHash(string(p, 0, md5HashSize * 2)) &&
|
||||
p[md5HashSize * 2] == '-')
|
||||
p = string(p, md5HashSize * 2 + 1);
|
||||
return p;
|
||||
int dash = p.find('-');
|
||||
return string(p, dash + 1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -53,12 +50,13 @@ string pathLabel(const Path & nePath, const string & elemPath)
|
|||
}
|
||||
|
||||
|
||||
#if 0
|
||||
void printClosure(const Path & nePath, const StoreExpr & fs)
|
||||
{
|
||||
PathSet workList(fs.closure.roots);
|
||||
PathSet doneSet;
|
||||
|
||||
for (PathSet::iterator i = workList.begin(); i != workList.end(); i++) {
|
||||
for (PathSet::iterator i = workList.begin(); i != workList.end(); ++i) {
|
||||
cout << makeEdge(pathLabel(nePath, *i), nePath);
|
||||
}
|
||||
|
||||
|
@ -74,7 +72,7 @@ void printClosure(const Path & nePath, const StoreExpr & fs)
|
|||
throw Error(format("bad closure, missing path `%1%'") % path);
|
||||
|
||||
for (StringSet::const_iterator i = elem->second.refs.begin();
|
||||
i != elem->second.refs.end(); i++)
|
||||
i != elem->second.refs.end(); ++i)
|
||||
{
|
||||
workList.insert(*i);
|
||||
cout << makeEdge(pathLabel(nePath, *i), pathLabel(nePath, path));
|
||||
|
@ -85,6 +83,7 @@ void printClosure(const Path & nePath, const StoreExpr & fs)
|
|||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void printDotGraph(const PathSet & roots)
|
||||
|
@ -95,43 +94,56 @@ void printDotGraph(const PathSet & roots)
|
|||
cout << "digraph G {\n";
|
||||
|
||||
while (!workList.empty()) {
|
||||
Path nePath = *(workList.begin());
|
||||
workList.erase(nePath);
|
||||
Path path = *(workList.begin());
|
||||
workList.erase(path);
|
||||
|
||||
if (doneSet.find(nePath) == doneSet.end()) {
|
||||
doneSet.insert(nePath);
|
||||
if (doneSet.find(path) != doneSet.end()) continue;
|
||||
doneSet.insert(path);
|
||||
|
||||
StoreExpr ne = storeExprFromPath(nePath);
|
||||
cout << makeNode(path, symbolicName(path), "#ff0000");
|
||||
|
||||
PathSet references;
|
||||
queryReferences(noTxn, path, references);
|
||||
|
||||
for (PathSet::iterator i = references.begin();
|
||||
i != references.end(); ++i)
|
||||
{
|
||||
workList.insert(*i);
|
||||
cout << makeEdge(*i, path);
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
StoreExpr ne = storeExprFromPath(path);
|
||||
|
||||
string label, colour;
|
||||
|
||||
if (ne.type == StoreExpr::neDerivation) {
|
||||
for (PathSet::iterator i = ne.derivation.inputs.begin();
|
||||
i != ne.derivation.inputs.end(); i++)
|
||||
i != ne.derivation.inputs.end(); ++i)
|
||||
{
|
||||
workList.insert(*i);
|
||||
cout << makeEdge(*i, nePath);
|
||||
cout << makeEdge(*i, path);
|
||||
}
|
||||
|
||||
label = "derivation";
|
||||
colour = "#00ff00";
|
||||
for (StringPairs::iterator i = ne.derivation.env.begin();
|
||||
i != ne.derivation.env.end(); i++)
|
||||
i != ne.derivation.env.end(); ++i)
|
||||
if (i->first == "name") label = i->second;
|
||||
}
|
||||
|
||||
else if (ne.type == StoreExpr::neClosure) {
|
||||
label = "<closure>";
|
||||
colour = "#00ffff";
|
||||
printClosure(nePath, ne);
|
||||
printClosure(path, ne);
|
||||
}
|
||||
|
||||
else abort();
|
||||
|
||||
cout << makeNode(nePath, label, colour);
|
||||
}
|
||||
cout << makeNode(path, label, colour);
|
||||
#endif
|
||||
}
|
||||
|
||||
cout << "}\n";
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -67,20 +67,20 @@ static void opRealise(Strings opFlags, Strings opArgs)
|
|||
if (!opFlags.empty()) throw UsageError("unknown flag");
|
||||
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
i != opArgs.end(); ++i)
|
||||
*i = fixPath(*i);
|
||||
|
||||
if (opArgs.size() > 1) {
|
||||
PathSet drvPaths;
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
i != opArgs.end(); ++i)
|
||||
if (isDerivation(*i))
|
||||
drvPaths.insert(*i);
|
||||
buildDerivations(drvPaths);
|
||||
}
|
||||
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
i != opArgs.end(); ++i)
|
||||
cout << format("%1%\n") % realisePath(*i);
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ static void opAdd(Strings opFlags, Strings opArgs)
|
|||
{
|
||||
if (!opFlags.empty()) throw UsageError("unknown flag");
|
||||
|
||||
for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); i++)
|
||||
for (Strings::iterator i = opArgs.begin(); i != opArgs.end(); ++i)
|
||||
cout << format("%1%\n") % addToStore(*i);
|
||||
}
|
||||
|
||||
|
@ -145,7 +145,7 @@ static Path maybeUseOutput(const Path & storePath, bool useOutput, bool forceRea
|
|||
static void printPathSet(const PathSet & paths)
|
||||
{
|
||||
for (PathSet::iterator i = paths.begin();
|
||||
i != paths.end(); i++)
|
||||
i != paths.end(); ++i)
|
||||
cout << format("%s\n") % *i;
|
||||
}
|
||||
|
||||
|
@ -263,7 +263,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||
|
||||
case qOutputs: {
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
i != opArgs.end(); ++i)
|
||||
{
|
||||
*i = fixPath(*i);
|
||||
if (forceRealise) realisePath(*i);
|
||||
|
@ -279,7 +279,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||
case qReferersClosure: {
|
||||
PathSet paths;
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
i != opArgs.end(); ++i)
|
||||
{
|
||||
Path path = maybeUseOutput(fixPath(*i), useOutput, forceRealise);
|
||||
if (query == qRequisites)
|
||||
|
@ -294,7 +294,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||
|
||||
case qDeriver:
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
i != opArgs.end(); ++i)
|
||||
{
|
||||
Path deriver = queryDeriver(noTxn, fixPath(*i));
|
||||
cout << format("%1%\n") %
|
||||
|
@ -304,7 +304,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||
|
||||
case qBinding:
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
i != opArgs.end(); ++i)
|
||||
{
|
||||
*i = fixPath(*i);
|
||||
Derivation drv = derivationFromPath(*i);
|
||||
|
@ -318,7 +318,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||
|
||||
case qHash:
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
i != opArgs.end(); ++i)
|
||||
{
|
||||
Path path = maybeUseOutput(fixPath(*i), useOutput, forceRealise);
|
||||
Hash hash = queryPathHash(path);
|
||||
|
@ -330,21 +330,19 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||
case qTree: {
|
||||
PathSet done;
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
i != opArgs.end(); ++i)
|
||||
printDrvTree(fixPath(*i), "", "", done);
|
||||
break;
|
||||
}
|
||||
|
||||
#if 0
|
||||
case qGraph: {
|
||||
PathSet roots;
|
||||
for (Strings::iterator i = opArgs.begin();
|
||||
i != opArgs.end(); i++)
|
||||
roots.insert(maybeNormalise(*i, normalise, realise));
|
||||
i != opArgs.end(); ++i)
|
||||
roots.insert(maybeUseOutput(fixPath(*i), useOutput, forceRealise));
|
||||
printDotGraph(roots);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
abort();
|
||||
|
|
Loading…
Reference in a new issue