aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-03-13 14:07:58 +0100
committerEelco Dolstra <edolstra@gmail.com>2017-03-15 16:48:29 +0100
commit532d73d5d86c3d25d08a8d771a189708dac323e2 (patch)
treedc91152a6d74de4e928ee263b4bc1047c3bdba4a
parent5b86451f0279c384fb379fed9d2979d8025aa269 (diff)
BinaryCacheStore: Implement getBuildLog()
We assume that build logs are stored under log/<drv>, e.g. /nix/store/q7ab198v13p0f8x8wgnd75dva7d5mip6-friday-devil-0.1.1.1.drv maps to https://cache.nixos.org/log/q7ab198v13p0f8x8wgnd75dva7d5mip6-friday-devil-0.1.1.1.drv
-rw-r--r--src/libstore/binary-cache-store.cc24
-rw-r--r--src/libstore/binary-cache-store.hh2
-rw-r--r--src/libstore/local-fs-store.cc6
3 files changed, 31 insertions, 1 deletions
diff --git a/src/libstore/binary-cache-store.cc b/src/libstore/binary-cache-store.cc
index 3e07a2aa2..120345b26 100644
--- a/src/libstore/binary-cache-store.cc
+++ b/src/libstore/binary-cache-store.cc
@@ -382,4 +382,28 @@ ref<FSAccessor> BinaryCacheStore::getFSAccessor()
return make_ref<RemoteFSAccessor>(ref<Store>(shared_from_this()));
}
+std::shared_ptr<std::string> BinaryCacheStore::getBuildLog(const Path & path)
+{
+ Path drvPath;
+
+ if (isDerivation(path))
+ drvPath = path;
+ else {
+ try {
+ auto info = queryPathInfo(path);
+ // FIXME: add a "Log" field to .narinfo
+ if (info->deriver == "") return nullptr;
+ drvPath = info->deriver;
+ } catch (InvalidPath &) {
+ return nullptr;
+ }
+ }
+
+ auto logPath = "log/" + baseNameOf(drvPath);
+
+ debug("fetching build log from binary cache ā€˜%s/%sā€™", getUri(), logPath);
+
+ return getFile(logPath);
+}
+
}
diff --git a/src/libstore/binary-cache-store.hh b/src/libstore/binary-cache-store.hh
index a70d50d49..1c287056c 100644
--- a/src/libstore/binary-cache-store.hh
+++ b/src/libstore/binary-cache-store.hh
@@ -122,6 +122,8 @@ public:
void addSignatures(const Path & storePath, const StringSet & sigs) override
{ notImpl(); }
+ std::shared_ptr<std::string> getBuildLog(const Path & path) override;
+
};
}
diff --git a/src/libstore/local-fs-store.cc b/src/libstore/local-fs-store.cc
index c5da73dba..002ee4a65 100644
--- a/src/libstore/local-fs-store.cc
+++ b/src/libstore/local-fs-store.cc
@@ -95,7 +95,11 @@ std::shared_ptr<std::string> LocalFSStore::getBuildLog(const Path & path_)
assertStorePath(path);
if (!isDerivation(path)) {
- path = queryPathInfo(path)->deriver;
+ try {
+ path = queryPathInfo(path)->deriver;
+ } catch (InvalidPath &) {
+ return nullptr;
+ }
if (path == "") return nullptr;
}