aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/remote-store.cc14
-rw-r--r--src/libstore/worker-protocol.hh1
-rw-r--r--src/nix-worker/nix-worker.cc13
3 files changed, 27 insertions, 1 deletions
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc
index 517c886b4..08969a623 100644
--- a/src/libstore/remote-store.cc
+++ b/src/libstore/remote-store.cc
@@ -249,7 +249,19 @@ bool RemoteStore::querySubstitutablePathInfo(const Path & path,
ValidPathInfo RemoteStore::queryPathInfo(const Path & path)
{
- throw Error("not implemented");
+ openConnection();
+ writeInt(wopQueryPathInfo, to);
+ writeString(path, to);
+ processStderr();
+ ValidPathInfo info;
+ info.path = path;
+ info.deriver = readString(from);
+ if (info.deriver != "") assertStorePath(info.deriver);
+ info.hash = parseHash(htSHA256, readString(from));
+ info.references = readStorePaths(from);
+ info.registrationTime = readInt(from);
+ info.narSize = readLongLong(from);
+ return info;
}
diff --git a/src/libstore/worker-protocol.hh b/src/libstore/worker-protocol.hh
index a4dc690b7..2764f82c2 100644
--- a/src/libstore/worker-protocol.hh
+++ b/src/libstore/worker-protocol.hh
@@ -38,6 +38,7 @@ typedef enum {
wopQueryValidPaths = 23,
wopQueryFailedPaths = 24,
wopClearFailedPaths = 25,
+ wopQueryPathInfo = 26,
} WorkerOp;
diff --git a/src/nix-worker/nix-worker.cc b/src/nix-worker/nix-worker.cc
index 9be733d8c..dbcd90be1 100644
--- a/src/nix-worker/nix-worker.cc
+++ b/src/nix-worker/nix-worker.cc
@@ -550,6 +550,19 @@ static void performOp(unsigned int clientVersion,
break;
}
+ case wopQueryPathInfo: {
+ Path path = readStorePath(from);
+ startWork();
+ ValidPathInfo info = store->queryPathInfo(path);
+ stopWork();
+ writeString(info.deriver, to);
+ writeString(printHash(info.hash), to);
+ writeStringSet(info.references, to);
+ writeInt(info.registrationTime, to);
+ writeLongLong(info.narSize, to);
+ break;
+ }
+
default:
throw Error(format("invalid operation %1%") % op);
}