* Re-enable dot graph generation.

This commit is contained in:
Eelco Dolstra 2005-03-26 22:06:57 +00:00
parent 298dd487bb
commit 6f788880b6
2 changed files with 44 additions and 34 deletions

View file

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

View file

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