aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2013-06-13 14:46:07 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2013-06-13 14:46:07 +0200
commitf9ff67e9487a0085ad6536016791242364ce70d9 (patch)
tree50fbdfa73fbc10748b773562ece51be427a67ef2
parent6b05f688ee6849b89e7fb0d3fb7b678f316039e7 (diff)
In repair mode, update the hash of rebuilt paths
Otherwise subsequent invocations of "--repair" will keep rebuilding the path. This only happens if the path content differs between builds (e.g. due to timestamps).
-rw-r--r--src/libstore/build.cc2
-rw-r--r--src/libstore/local-store.cc7
2 files changed, 5 insertions, 4 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index 6fe726a48..5034e208e 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -1673,7 +1673,7 @@ void DerivationGoal::startBuilder()
{
PathSet missing = outputPaths(drv.outputs);
foreach (PathSet::iterator, i, validPaths) missing.erase(*i);
- startNest(nest, lvlInfo, format("building path(s) %1%") % showPaths(missing));
+ startNest(nest, lvlInfo, format(repair ? "repairing path(s) %1%" : "building path(s) %1%") % showPaths(missing));
/* Right platform? */
if (!canBuildLocally(drv.platform))
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index b44e025b5..857d4cee0 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -1202,9 +1202,10 @@ void LocalStore::registerValidPaths(const ValidPathInfos & infos)
foreach (ValidPathInfos::const_iterator, i, infos) {
assert(i->hash.type == htSHA256);
- /* !!! Maybe the registration info should be updated if the
- path is already valid. */
- if (!isValidPath(i->path)) addValidPath(*i);
+ if (isValidPath(i->path))
+ updatePathInfo(*i);
+ else
+ addValidPath(*i);
paths.insert(i->path);
}