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

* Nix-store queries --references' and referers' to query the pointer

graph.  That is, `nix-store --query --references PATH' shows the set
  of paths referenced by PATH, and `nix-store --query --referers PATH'
  shows the set of paths referencing PATH.
This commit is contained in:
Eelco Dolstra 2005-01-19 16:59:56 +00:00
parent 96de272b48
commit e0f4e587c3
3 changed files with 33 additions and 18 deletions

View file

@ -64,10 +64,18 @@ static Path maybeUseOutput(const Path & storePath, bool useOutput)
}
static void printPathSet(const PathSet & paths)
{
for (PathSet::iterator i = paths.begin();
i != paths.end(); i++)
cout << format("%s\n") % *i;
}
/* Perform various sorts of queries. */
static void opQuery(Strings opFlags, Strings opArgs)
{
enum { qOutputs, qRequisites, qPredecessors, qGraph } query = qOutputs;
enum { qOutputs, qRequisites, qReferences, qReferers, qGraph } query = qOutputs;
bool useOutput = false;
bool includeOutputs = false;
@ -75,6 +83,8 @@ static void opQuery(Strings opFlags, Strings opArgs)
i != opFlags.end(); i++)
if (*i == "--outputs") query = qOutputs;
else if (*i == "--requisites" || *i == "-R") query = qRequisites;
else if (*i == "--references") query = qReferences;
else if (*i == "--referers") query = qReferers;
else if (*i == "--graph") query = qGraph;
else if (*i == "--use-output" || *i == "-u") useOutput = true;
else if (*i == "--include-outputs") includeOutputs = true;
@ -92,33 +102,24 @@ static void opQuery(Strings opFlags, Strings opArgs)
break;
}
case qRequisites: {
case qRequisites:
case qReferences:
case qReferers: {
PathSet paths;
for (Strings::iterator i = opArgs.begin();
i != opArgs.end(); i++)
{
Path path = maybeUseOutput(*i, useOutput);
storePathRequisites(path, includeOutputs, paths);
if (query == qRequisites)
storePathRequisites(path, includeOutputs, paths);
else if (query == qReferences) queryReferences(path, paths);
else if (query == qReferers) queryReferers(path, paths);
}
for (PathSet::iterator i = paths.begin();
i != paths.end(); i++)
cout << format("%s\n") % *i;
printPathSet(paths);
break;
}
#if 0
case qPredecessors: {
for (Strings::iterator i = opArgs.begin();
i != opArgs.end(); i++)
{
Paths preds = queryPredecessors(*i);
for (Paths::iterator j = preds.begin();
j != preds.end(); j++)
cout << format("%s\n") % *j;
}
break;
}
case qGraph: {
PathSet roots;
for (Strings::iterator i = opArgs.begin();