aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/binary-cache-store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2018-03-27 22:16:01 +0200
committerEelco Dolstra <edolstra@gmail.com>2018-05-30 13:34:37 +0200
commit81ea8bd5ceb3dcae6af0b79c81a39ecbf2ba97a8 (patch)
tree2e96cec431e4ec67d8cfb50328a9da1b0c931145 /src/libstore/binary-cache-store.cc
parent1672bcd230447f1ce0c3291950bdd9a662cee974 (diff)
Simplify the callback mechanism
Diffstat (limited to 'src/libstore/binary-cache-store.cc')
-rw-r--r--src/libstore/binary-cache-store.cc37
1 files changed, 21 insertions, 16 deletions
diff --git a/src/libstore/binary-cache-store.cc b/src/libstore/binary-cache-store.cc
index 2e9a13e56..45be49076 100644
--- a/src/libstore/binary-cache-store.cc
+++ b/src/libstore/binary-cache-store.cc
@@ -58,12 +58,13 @@ std::shared_ptr<std::string> BinaryCacheStore::getFile(const std::string & path)
{
std::promise<std::shared_ptr<std::string>> promise;
getFile(path,
- [&](std::shared_ptr<std::string> result) {
- promise.set_value(result);
- },
- [&](std::exception_ptr exc) {
- promise.set_exception(exc);
- });
+ {[&](std::future<std::shared_ptr<std::string>> result) {
+ try {
+ promise.set_value(result.get());
+ } catch (...) {
+ promise.set_exception(std::current_exception());
+ }
+ }});
return promise.get_future().get();
}
@@ -218,8 +219,7 @@ void BinaryCacheStore::narFromPath(const Path & storePath, Sink & sink)
}
void BinaryCacheStore::queryPathInfoUncached(const Path & storePath,
- std::function<void(std::shared_ptr<ValidPathInfo>)> success,
- std::function<void(std::exception_ptr exc)> failure)
+ Callback<std::shared_ptr<ValidPathInfo>> callback)
{
auto uri = getUri();
auto act = std::make_shared<Activity>(*logger, lvlTalkative, actQueryPathInfo,
@@ -229,17 +229,22 @@ void BinaryCacheStore::queryPathInfoUncached(const Path & storePath,
auto narInfoFile = narInfoFileFor(storePath);
getFile(narInfoFile,
- [=](std::shared_ptr<std::string> data) {
- if (!data) return success(0);
+ {[=](std::future<std::shared_ptr<std::string>> fut) {
+ try {
+ auto data = fut.get();
+
+ if (!data) return callback(nullptr);
- stats.narInfoRead++;
+ stats.narInfoRead++;
- callSuccess(success, failure, (std::shared_ptr<ValidPathInfo>)
- std::make_shared<NarInfo>(*this, *data, narInfoFile));
+ callback((std::shared_ptr<ValidPathInfo>)
+ std::make_shared<NarInfo>(*this, *data, narInfoFile));
- (void) act; // force Activity into this lambda to ensure it stays alive
- },
- failure);
+ (void) act; // force Activity into this lambda to ensure it stays alive
+ } catch (...) {
+ callback.rethrow();
+ }
+ }});
}
Path BinaryCacheStore::addToStore(const string & name, const Path & srcPath,