aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/misc.cc
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2020-06-13 00:07:42 -0500
committerMatthew Bauer <mjbauer95@gmail.com>2020-06-13 00:07:42 -0500
commitc214cda9401cf50d0419038746428260b0dfdd63 (patch)
tree1081e6f454fcd48cef0361a77f78e534e347a1e8 /src/libstore/misc.cc
parentb2cb288cdd462cbca35ffd3afda9d7ec2d595209 (diff)
Correctly substitute from different storeDir
Originally, the test was only checking for different “real” storeDir. That’s an easy case to handle, but the much harder one is if different virtual store dirs are used. To do this, we need the SubstitutionGoal to know about the ca, so it can recalculate the path to copy it over. An important note here is that the store path passed to copyStorePath needs to be one for srcStore - so that queryPathInfo works properly. This also adds an error message when the store path from queryPathInfo is different from the one we requested.
Diffstat (limited to 'src/libstore/misc.cc')
-rw-r--r--src/libstore/misc.cc12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/libstore/misc.cc b/src/libstore/misc.cc
index 1b0a055d3..109e9e473 100644
--- a/src/libstore/misc.cc
+++ b/src/libstore/misc.cc
@@ -108,12 +108,12 @@ void Store::computeFSClosure(const StorePath & startPath,
}
-static std::optional<std::string> getDerivationCA(ref<Derivation> drv)
+std::optional<std::string> getDerivationCA(const BasicDerivation & drv)
{
- auto outputHashMode = drv->env.find("outputHashMode");
- auto outputHashAlgo = drv->env.find("outputHashAlgo");
- auto outputHash = drv->env.find("outputHash");
- if (outputHashMode != drv->env.end() && outputHashAlgo != drv->env.end() && outputHash != drv->env.end()) {
+ auto outputHashMode = drv.env.find("outputHashMode");
+ auto outputHashAlgo = drv.env.find("outputHashAlgo");
+ auto outputHash = drv.env.find("outputHash");
+ if (outputHashMode != drv.env.end() && outputHashAlgo != drv.env.end() && outputHash != drv.env.end()) {
auto ht = parseHashType(outputHashAlgo->second);
auto h = Hash(outputHash->second, ht);
FileIngestionMethod ingestionMethod;
@@ -182,7 +182,7 @@ void Store::queryMissing(const std::vector<StorePathWithOutputs> & targets,
paths.insert(outPath.clone());
std::map<std::string, std::string> pathsCA = {};
- if (auto ca = getDerivationCA(drv))
+ if (auto ca = getDerivationCA(*drv))
pathsCA.insert({outPathS, *ca});
querySubstitutablePathInfos(paths, infos, pathsCA);