From f9ff67e9487a0085ad6536016791242364ce70d9 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 13 Jun 2013 14:46:07 +0200 Subject: [PATCH] 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). --- src/libstore/build.cc | 2 +- src/libstore/local-store.cc | 7 ++++--- 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); }