mirror of
https://github.com/NixOS/nix
synced 2025-06-27 00:11:17 +02:00
nix-build: Copy drv closure between eval store and build store
This commit is contained in:
parent
2ff3035cf4
commit
e9848beca7
5 changed files with 40 additions and 32 deletions
|
@ -9,6 +9,7 @@
|
|||
#include "url.hh"
|
||||
#include "archive.hh"
|
||||
#include "callback.hh"
|
||||
#include "remote-store.hh"
|
||||
|
||||
#include <regex>
|
||||
|
||||
|
@ -881,6 +882,16 @@ std::map<StorePath, StorePath> copyPaths(ref<Store> srcStore, ref<Store> dstStor
|
|||
for (auto & path : storePaths)
|
||||
pathsMap.insert_or_assign(path, path);
|
||||
|
||||
// FIXME: Temporary hack to copy closures in a single round-trip.
|
||||
if (dynamic_cast<RemoteStore *>(&*dstStore)) {
|
||||
if (!missing.empty()) {
|
||||
auto source = sinkToSource([&](Sink & sink) {
|
||||
srcStore->exportPaths(missing, sink);
|
||||
});
|
||||
dstStore->importPaths(*source, NoCheckSigs);
|
||||
}
|
||||
return pathsMap;
|
||||
}
|
||||
|
||||
Activity act(*logger, lvlInfo, actCopyPaths, fmt("copying %d paths", missing.size()));
|
||||
|
||||
|
@ -958,6 +969,22 @@ std::map<StorePath, StorePath> copyPaths(ref<Store> srcStore, ref<Store> dstStor
|
|||
return pathsMap;
|
||||
}
|
||||
|
||||
void copyClosure(
|
||||
ref<Store> srcStore,
|
||||
ref<Store> dstStore,
|
||||
const RealisedPath::Set & paths,
|
||||
RepairFlag repair,
|
||||
CheckSigsFlag checkSigs,
|
||||
SubstituteFlag substitute)
|
||||
{
|
||||
if (srcStore == dstStore) return;
|
||||
|
||||
RealisedPath::Set closure;
|
||||
RealisedPath::closure(*srcStore, paths, closure);
|
||||
|
||||
copyPaths(srcStore, dstStore, closure, repair, checkSigs, substitute);
|
||||
}
|
||||
|
||||
std::optional<ValidPathInfo> decodeValidPathInfo(const Store & store, std::istream & str, std::optional<HashResult> hashGiven)
|
||||
{
|
||||
std::string path;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue