mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-30 01:26:15 +02:00
Make sure references are empty for store path replacing
also copy info2 instead of casting
This commit is contained in:
parent
8974755d19
commit
be50de1142
3 changed files with 6 additions and 6 deletions
|
@ -4437,8 +4437,8 @@ void SubstitutionGoal::tryNext()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->path != storePath) {
|
if (info->path != storePath) {
|
||||||
if (info->isContentAddressed(*sub)) {
|
if (info->isContentAddressed(*sub) && info->references.empty()) {
|
||||||
auto info2 = std::const_pointer_cast<ValidPathInfo>(std::shared_ptr<const ValidPathInfo>(info));
|
auto info2 = std::make_shared<ValidPathInfo>(*info);
|
||||||
info2->path = storePath;
|
info2->path = storePath;
|
||||||
info = info2;
|
info = info2;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -863,7 +863,7 @@ void LocalStore::querySubstitutablePathInfos(const StorePathSet & paths,
|
||||||
try {
|
try {
|
||||||
auto info = sub->queryPathInfo(subPath);
|
auto info = sub->queryPathInfo(subPath);
|
||||||
|
|
||||||
if (sub->storeDir != storeDir && !info->isContentAddressed(*sub))
|
if (sub->storeDir != storeDir && !(info->isContentAddressed(*sub) && info->references.empty()))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
auto narInfo = std::dynamic_pointer_cast<const NarInfo>(
|
auto narInfo = std::dynamic_pointer_cast<const NarInfo>(
|
||||||
|
|
|
@ -595,7 +595,7 @@ void copyStorePath(ref<Store> srcStore, ref<Store> dstStore,
|
||||||
uint64_t total = 0;
|
uint64_t total = 0;
|
||||||
|
|
||||||
// recompute store path on the chance dstStore does it differently
|
// recompute store path on the chance dstStore does it differently
|
||||||
if (info->isContentAddressed(*srcStore)) {
|
if (info->isContentAddressed(*srcStore) && info->references.empty()) {
|
||||||
auto info2 = make_ref<ValidPathInfo>(*info);
|
auto info2 = make_ref<ValidPathInfo>(*info);
|
||||||
info2->path = dstStore->makeFixedOutputPathFromCA(info->path.name(), info->ca);
|
info2->path = dstStore->makeFixedOutputPathFromCA(info->path.name(), info->ca);
|
||||||
if (dstStore->storeDir == srcStore->storeDir)
|
if (dstStore->storeDir == srcStore->storeDir)
|
||||||
|
@ -670,7 +670,7 @@ void copyPaths(ref<Store> srcStore, ref<Store> dstStore, const StorePathSet & st
|
||||||
|
|
||||||
auto info = srcStore->queryPathInfo(storePath);
|
auto info = srcStore->queryPathInfo(storePath);
|
||||||
auto storePathForDst = storePath;
|
auto storePathForDst = storePath;
|
||||||
if (info->isContentAddressed(*srcStore)) {
|
if (info->isContentAddressed(*srcStore) && info->references.empty()) {
|
||||||
storePathForDst = dstStore->makeFixedOutputPathFromCA(storePath.name(), info->ca);
|
storePathForDst = dstStore->makeFixedOutputPathFromCA(storePath.name(), info->ca);
|
||||||
if (dstStore->storeDir == srcStore->storeDir)
|
if (dstStore->storeDir == srcStore->storeDir)
|
||||||
assert(storePathForDst == storePath);
|
assert(storePathForDst == storePath);
|
||||||
|
@ -697,7 +697,7 @@ void copyPaths(ref<Store> srcStore, ref<Store> dstStore, const StorePathSet & st
|
||||||
auto info = srcStore->queryPathInfo(storePath);
|
auto info = srcStore->queryPathInfo(storePath);
|
||||||
|
|
||||||
auto storePathForDst = storePath;
|
auto storePathForDst = storePath;
|
||||||
if (info->isContentAddressed(*srcStore)) {
|
if (info->isContentAddressed(*srcStore) && info->references.empty()) {
|
||||||
storePathForDst = dstStore->makeFixedOutputPathFromCA(storePath.name(), info->ca);
|
storePathForDst = dstStore->makeFixedOutputPathFromCA(storePath.name(), info->ca);
|
||||||
if (dstStore->storeDir == srcStore->storeDir)
|
if (dstStore->storeDir == srcStore->storeDir)
|
||||||
assert(storePathForDst == storePath);
|
assert(storePathForDst == storePath);
|
||||||
|
|
Loading…
Reference in a new issue