diff options
Diffstat (limited to 'src/libstore/local-store.cc')
-rw-r--r-- | src/libstore/local-store.cc | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index a4ad97331ad3..b55ab428421f 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -1673,11 +1673,27 @@ void LocalStore::verifyPath(const Path & path, const PathSet & store, bool LocalStore::pathContentsGood(const Path & path) { + std::map<Path, bool>::iterator i = pathContentsGoodCache.find(path); + if (i != pathContentsGoodCache.end()) return i->second; + printMsg(lvlInfo, format("checking path `%1%'...") % path); ValidPathInfo info = queryPathInfo(path); - if (!pathExists(path)) return false; - HashResult current = hashPath(info.hash.type, path); - Hash nullHash(htSHA256); - return info.hash == nullHash || info.hash == current.first; + bool res; + if (!pathExists(path)) + res = false; + else { + HashResult current = hashPath(info.hash.type, path); + Hash nullHash(htSHA256); + res = info.hash == nullHash || info.hash == current.first; + } + pathContentsGoodCache[path] = res; + if (!res) printMsg(lvlError, format("path `%1%' is corrupted or missing!") % path); + return res; +} + + +void LocalStore::markContentsGood(const Path & path) +{ + pathContentsGoodCache[path] = true; } |