Add copyClosure utility function for Hydra
This commit is contained in:
parent
629ab80022
commit
35db4f65a0
2 changed files with 29 additions and 0 deletions
|
@ -414,6 +414,30 @@ void copyStorePath(ref<Store> srcStore, ref<Store> dstStore,
|
|||
}
|
||||
|
||||
|
||||
void copyClosure(ref<Store> srcStore, ref<Store> dstStore,
|
||||
const PathSet & storePaths, bool repair)
|
||||
{
|
||||
PathSet closure;
|
||||
for (auto & path : storePaths)
|
||||
srcStore->computeFSClosure(path, closure);
|
||||
|
||||
PathSet valid = dstStore->queryValidPaths(closure);
|
||||
|
||||
if (valid.size() == closure.size()) return;
|
||||
|
||||
Paths sorted = srcStore->topoSortPaths(closure);
|
||||
|
||||
Paths missing;
|
||||
for (auto i = sorted.rbegin(); i != sorted.rend(); ++i)
|
||||
if (!valid.count(*i)) missing.push_back(*i);
|
||||
|
||||
printMsg(lvlDebug, format("copying %1% missing paths") % missing.size());
|
||||
|
||||
for (auto & i : missing)
|
||||
copyStorePath(srcStore, dstStore, i, repair);
|
||||
}
|
||||
|
||||
|
||||
ValidPathInfo decodeValidPathInfo(std::istream & str, bool hashGiven)
|
||||
{
|
||||
ValidPathInfo info;
|
||||
|
|
|
@ -585,6 +585,11 @@ void copyStorePath(ref<Store> srcStore, ref<Store> dstStore,
|
|||
const Path & storePath, bool repair = false);
|
||||
|
||||
|
||||
/* Copy the closure of the specified paths from one store to another. */
|
||||
void copyClosure(ref<Store> srcStore, ref<Store> dstStore,
|
||||
const PathSet & storePaths, bool repair = false);
|
||||
|
||||
|
||||
/* Remove the temporary roots file for this process. Any temporary
|
||||
root becomes garbage after this point unless it has been registered
|
||||
as a (permanent) root. */
|
||||
|
|
Loading…
Reference in a new issue