diff options
author | Shea Levy <shea@shealevy.com> | 2011-11-06T00·13+0000 |
---|---|---|
committer | Shea Levy <shea@shealevy.com> | 2011-11-06T00·13+0000 |
commit | 2721e9f56f92f5bd630dcbb0104fc56159cb28d4 (patch) | |
tree | f46ac1a8807b81cc54d176e8fb72915aa057f0ac /src | |
parent | bffe35acedafcd7c7237cb1415798362bff8a180 (diff) | |
parent | a6a3f3a8c26fdd6900880c13e924e6879d6c714c (diff) |
Merge from trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/libexpr/eval.cc | 9 | ||||
-rw-r--r-- | src/libstore/derivations.cc | 3 | ||||
-rw-r--r-- | src/libstore/local-store.cc | 6 | ||||
-rw-r--r-- | src/libstore/local-store.hh | 2 |
4 files changed, 12 insertions, 8 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index c31ec261e318..64e6cbe6419b 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -171,8 +171,8 @@ EvalState::EvalState() size_t size = 32 * 1024 * 1024; #if HAVE_SYSCONF && defined(_SC_PAGESIZE) && defined(_SC_PHYS_PAGES) long pageSize = sysconf(_SC_PAGESIZE); - long pages = sysconf (_SC_PHYS_PAGES); - if (pageSize != -1 && size != -1) + long pages = sysconf(_SC_PHYS_PAGES); + if (pageSize != -1) size = (pageSize * pages) / 4; // 25% of RAM if (size > maxSize) size = maxSize; #endif @@ -1109,7 +1109,10 @@ bool EvalState::isDerivation(Value & v) { if (v.type != tAttrs) return false; Bindings::iterator i = v.attrs->find(sType); - return i != v.attrs->end() && forceStringNoCtx(*i->value) == "derivation"; + if (i == v.attrs->end()) return false; + forceValue(*i->value); + if (i->value->type != tString) return false; + return forceStringNoCtx(*i->value) == "derivation"; } diff --git a/src/libstore/derivations.cc b/src/libstore/derivations.cc index 5a0f4ecc69e0..97343d57d478 100644 --- a/src/libstore/derivations.cc +++ b/src/libstore/derivations.cc @@ -239,7 +239,8 @@ Hash hashDerivationModulo(StoreAPI & store, Derivation drv) foreach (DerivationInputs::const_iterator, i, drv.inputDrvs) { Hash h = drvHashes[i->first]; if (h.type == htUnknown) { - Derivation drv2 = derivationFromPath(store, i->first); + assert(store.isValidPath(i->first)); + Derivation drv2 = parseDerivation(readFile(i->first)); h = hashDerivationModulo(store, drv2); drvHashes[i->first] = h; } diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index 6ad4c84c69ff..702ff67e793e 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -510,7 +510,7 @@ void LocalStore::checkDerivationOutputs(const Path & drvPath, const Derivation & } -unsigned long long LocalStore::addValidPath(const ValidPathInfo & info) +unsigned long long LocalStore::addValidPath(const ValidPathInfo & info, bool checkOutputs) { SQLiteStmtUse use(stmtRegisterValidPath); stmtRegisterValidPath.bind(info.path); @@ -540,7 +540,7 @@ unsigned long long LocalStore::addValidPath(const ValidPathInfo & info) derivations). Note that if this throws an error, then the DB transaction is rolled back, so the path validity registration above is undone. */ - checkDerivationOutputs(info.path, drv); + if (checkOutputs) checkDerivationOutputs(info.path, drv); foreach (DerivationOutputs::iterator, i, drv.outputs) { SQLiteStmtUse use(stmtAddDerivationOutput); @@ -1521,7 +1521,7 @@ void LocalStore::upgradeStore6() SQLiteTxn txn(db); foreach (PathSet::iterator, i, validPaths) { - addValidPath(queryPathInfoOld(*i)); + addValidPath(queryPathInfoOld(*i), false); std::cerr << "."; } diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh index 8cf6b66406a9..7ef01b2644b4 100644 --- a/src/libstore/local-store.hh +++ b/src/libstore/local-store.hh @@ -226,7 +226,7 @@ private: unsigned long long queryValidPathId(const Path & path); - unsigned long long addValidPath(const ValidPathInfo & info); + unsigned long long addValidPath(const ValidPathInfo & info, bool checkOutputs = true); void addReference(unsigned long long referrer, unsigned long long reference); |