aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/local-store.cc
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2012-10-02 17:13:46 -0400
committerEelco Dolstra <eelco.dolstra@logicblox.com>2012-10-02 17:13:46 -0400
commit2001895f3d2668549feb60a182aa624a7b6292eb (patch)
treef555841859d53cf821bf52dc89bd4d0fe9273186 /src/libstore/local-store.cc
parentcf46f194445c9abc0398dae908295dff794fee98 (diff)
Add a --repair flag to ‘nix-store -r’ to repair derivation outputs
With this flag, if any valid derivation output is missing or corrupt, it will be recreated by using a substitute if available, or by rebuilding the derivation. The latter may use hash rewriting if chroots are not available.
Diffstat (limited to 'src/libstore/local-store.cc')
-rw-r--r--src/libstore/local-store.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index e038cd4b2..a4ad97331 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -1671,6 +1671,16 @@ void LocalStore::verifyPath(const Path & path, const PathSet & store,
}
+bool LocalStore::pathContentsGood(const Path & 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;
+}
+
+
/* Functions for upgrading from the pre-SQLite database. */
PathSet LocalStore::queryValidPathsOld()