* `nix-store -q --hash' to quickly query the hash of the contents of a

store path (which is stored in the database).
This commit is contained in:
Eelco Dolstra 2005-03-02 15:57:06 +00:00
parent 9e50e648a4
commit 07b4399fb6
3 changed files with 28 additions and 6 deletions

View File

@ -509,6 +509,14 @@ static Hash queryHash(const Transaction & txn, const Path & storePath)
}
Hash queryPathHash(const Path & path)
{
if (!isValidPath(path))
throw Error(format("path `%1%' is not valid") % path);
return queryHash(noTxn, path);
}
void registerValidPath(const Transaction & txn,
const Path & _path, const Hash & hash, const PathSet & references,
const Path & deriver)

View File

@ -89,6 +89,9 @@ void canonicalisePathMetaData(const Path & path);
/* Checks whether a path is valid. */
bool isValidPath(const Path & path);
/* Queries the hash of a valid path. */
Hash queryPathHash(const Path & path);
/* Sets the set of outgoing FS references for a store path. Use with
care! */
void setReferences(const Transaction & txn, const Path & storePath,

View File

@ -228,8 +228,9 @@ static void printDrvTree(const Path & drvPath,
/* Perform various sorts of queries. */
static void opQuery(Strings opFlags, Strings opArgs)
{
enum { qOutputs, qRequisites, qReferences, qReferers,
qReferersClosure, qDeriver, qBinding, qTree, qGraph } query = qOutputs;
enum { qOutputs, qRequisites, qReferences, qReferers
, qReferersClosure, qDeriver, qBinding, qHash
, qTree, qGraph } query = qOutputs;
bool useOutput = false;
bool includeOutputs = false;
bool forceRealise = false;
@ -250,6 +251,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
opArgs.pop_front();
query = qBinding;
}
else if (*i == "--hash") query = qHash;
else if (*i == "--tree") query = qTree;
else if (*i == "--graph") query = qGraph;
else if (*i == "--use-output" || *i == "-u") useOutput = true;
@ -279,8 +281,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
for (Strings::iterator i = opArgs.begin();
i != opArgs.end(); i++)
{
*i = fixPath(*i);
Path path = maybeUseOutput(*i, useOutput, forceRealise);
Path path = maybeUseOutput(fixPath(*i), useOutput, forceRealise);
if (query == qRequisites)
storePathRequisites(path, includeOutputs, paths);
else if (query == qReferences) queryReferences(noTxn, path, paths);
@ -295,8 +296,7 @@ static void opQuery(Strings opFlags, Strings opArgs)
for (Strings::iterator i = opArgs.begin();
i != opArgs.end(); i++)
{
*i = fixPath(*i);
Path deriver = queryDeriver(noTxn, *i);
Path deriver = queryDeriver(noTxn, fixPath(*i));
cout << format("%1%\n") %
(deriver == "" ? "unknown-deriver" : deriver);
}
@ -316,6 +316,17 @@ static void opQuery(Strings opFlags, Strings opArgs)
}
break;
case qHash:
for (Strings::iterator i = opArgs.begin();
i != opArgs.end(); i++)
{
Path path = maybeUseOutput(fixPath(*i), useOutput, forceRealise);
Hash hash = queryPathHash(path);
assert(hash.type == htSHA256);
cout << format("sha256:%1%\n") % printHash32(hash);
}
break;
case qTree: {
PathSet done;
for (Strings::iterator i = opArgs.begin();