aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2005-03-02 15:57:06 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2005-03-02 15:57:06 +0000
commit07b4399fb6f04d0cae58b8cf0a13efeeaf9d590b (patch)
treecd35f9205c15098f51c6c11da5148b27e4c7060f
parent9e50e648a47c1ef3b734bf12945c8b29a8c8f9f8 (diff)
* `nix-store -q --hash' to quickly query the hash of the contents of a
store path (which is stored in the database).
-rw-r--r--src/libstore/store.cc8
-rw-r--r--src/libstore/store.hh3
-rw-r--r--src/nix-store/main.cc23
3 files changed, 28 insertions, 6 deletions
diff --git a/src/libstore/store.cc b/src/libstore/store.cc
index 946be5e02..9f50e597e 100644
--- a/src/libstore/store.cc
+++ b/src/libstore/store.cc
@@ -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)
diff --git a/src/libstore/store.hh b/src/libstore/store.hh
index 3b18664de..d5d8ea81e 100644
--- a/src/libstore/store.hh
+++ b/src/libstore/store.hh
@@ -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,
diff --git a/src/nix-store/main.cc b/src/nix-store/main.cc
index 6e590ba06..543a84210 100644
--- a/src/nix-store/main.cc
+++ b/src/nix-store/main.cc
@@ -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();