From 5ee937523da63b26cc6dd264cc3cb2717321c5cd Mon Sep 17 00:00:00 2001 From: John Ericson Date: Thu, 20 Jan 2022 20:45:34 +0000 Subject: [PATCH] Add back `copyClosure` for plain `StorePath`s This was removed in 2e199673a523fa81de31ffdd2a25976ce0814631 when `copyPath` transitioned to use `RealisedPath`. But then in e9848beca704d27a13e28b4403251725bd485bb2 we added it back just for `realisedPath`. I think it is a good utility function --- one can easily imagine it becoming optimized in the future, and copying paths *violating* the closure is a very niche feature. So if we have `copyPaths` for both sorts of paths, I think we should have `copyClosure` for both sorts too. --- src/libstore/store-api.cc | 15 +++++++++++++++ src/libstore/store-api.hh | 7 +++++++ 2 files changed, 22 insertions(+) diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc index 970bafd88..bb9f0967d 100644 --- a/src/libstore/store-api.cc +++ b/src/libstore/store-api.cc @@ -1042,6 +1042,21 @@ void copyClosure( copyPaths(srcStore, dstStore, closure, repair, checkSigs, substitute); } +void copyClosure( + Store & srcStore, + Store & dstStore, + const StorePathSet & storePaths, + RepairFlag repair, + CheckSigsFlag checkSigs, + SubstituteFlag substitute) +{ + if (&srcStore == &dstStore) return; + + StorePathSet closure; + srcStore.computeFSClosure(storePaths, closure); + copyPaths(srcStore, dstStore, closure, repair, checkSigs, substitute); +} + std::optional decodeValidPathInfo(const Store & store, std::istream & str, std::optional hashGiven) { std::string path; diff --git a/src/libstore/store-api.hh b/src/libstore/store-api.hh index 4fb6c40c7..81279c90b 100644 --- a/src/libstore/store-api.hh +++ b/src/libstore/store-api.hh @@ -794,6 +794,13 @@ void copyClosure( CheckSigsFlag checkSigs = CheckSigs, SubstituteFlag substitute = NoSubstitute); +void copyClosure( + Store & srcStore, Store & dstStore, + const StorePathSet & paths, + RepairFlag repair = NoRepair, + CheckSigsFlag checkSigs = CheckSigs, + SubstituteFlag substitute = NoSubstitute); + /* 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. */