mirror of
https://github.com/NixOS/nix.git
synced 2024-11-25 16:23:02 +00:00
* Make `nix-store --query --tree' work on non-derivations (i.e., on
any store path).
This commit is contained in:
parent
90905634ed
commit
4271385a73
@ -233,38 +233,36 @@ static Paths topoSort(const PathSet & paths)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void printDrvTree(const Path & drvPath,
|
static void printTree(const Path & path,
|
||||||
const string & firstPad, const string & tailPad, PathSet & done)
|
const string & firstPad, const string & tailPad, PathSet & done)
|
||||||
{
|
{
|
||||||
if (done.find(drvPath) != done.end()) {
|
if (done.find(path) != done.end()) {
|
||||||
cout << format("%1%%2% [...]\n") % firstPad % drvPath;
|
cout << format("%1%%2% [...]\n") % firstPad % path;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
done.insert(drvPath);
|
done.insert(path);
|
||||||
|
|
||||||
cout << format("%1%%2%\n") % firstPad % drvPath;
|
cout << format("%1%%2%\n") % firstPad % path;
|
||||||
|
|
||||||
Derivation drv = derivationFromPath(drvPath);
|
PathSet references;
|
||||||
|
queryReferences(noTxn, path, references);
|
||||||
|
|
||||||
|
#if 0
|
||||||
for (PathSet::iterator i = drv.inputSrcs.begin();
|
for (PathSet::iterator i = drv.inputSrcs.begin();
|
||||||
i != drv.inputSrcs.end(); ++i)
|
i != drv.inputSrcs.end(); ++i)
|
||||||
cout << format("%1%%2%\n") % (tailPad + treeConn) % *i;
|
cout << format("%1%%2%\n") % (tailPad + treeConn) % *i;
|
||||||
|
#endif
|
||||||
PathSet inputs;
|
|
||||||
for (DerivationInputs::iterator i = drv.inputDrvs.begin();
|
|
||||||
i != drv.inputDrvs.end(); ++i)
|
|
||||||
inputs.insert(i->first);
|
|
||||||
|
|
||||||
/* Topologically sort under the relation A < B iff A \in
|
/* Topologically sort under the relation A < B iff A \in
|
||||||
closure(B). That is, if derivation A is an (possibly indirect)
|
closure(B). That is, if derivation A is an (possibly indirect)
|
||||||
input of B, then A is printed first. This has the effect of
|
input of B, then A is printed first. This has the effect of
|
||||||
flattening the tree, preventing deeply nested structures. */
|
flattening the tree, preventing deeply nested structures. */
|
||||||
Paths sorted = topoSort(inputs);
|
Paths sorted = topoSort(references);
|
||||||
reverse(sorted.begin(), sorted.end());
|
reverse(sorted.begin(), sorted.end());
|
||||||
|
|
||||||
for (Paths::iterator i = sorted.begin(); i != sorted.end(); ++i) {
|
for (Paths::iterator i = sorted.begin(); i != sorted.end(); ++i) {
|
||||||
Paths::iterator j = i; ++j;
|
Paths::iterator j = i; ++j;
|
||||||
printDrvTree(*i, tailPad + treeConn,
|
printTree(*i, tailPad + treeConn,
|
||||||
j == sorted.end() ? tailPad + treeNull : tailPad + treeLine,
|
j == sorted.end() ? tailPad + treeNull : tailPad + treeLine,
|
||||||
done);
|
done);
|
||||||
}
|
}
|
||||||
@ -377,7 +375,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
|
|||||||
PathSet done;
|
PathSet done;
|
||||||
for (Strings::iterator i = opArgs.begin();
|
for (Strings::iterator i = opArgs.begin();
|
||||||
i != opArgs.end(); ++i)
|
i != opArgs.end(); ++i)
|
||||||
printDrvTree(fixPath(*i), "", "", done);
|
printTree(fixPath(*i), "", "", done);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user