Display the diverging paths in case of a realisation mismatch

This commit is contained in:
regnat 2021-06-22 10:46:29 +02:00
parent 40f925b2da
commit 16fb7d8d95
2 changed files with 14 additions and 4 deletions

View file

@ -65,9 +65,14 @@ void DrvOutputSubstitutionGoal::tryNext()
if (auto localOutputInfo = worker.store.queryRealisation(depId);
localOutputInfo && localOutputInfo->outPath != depPath) {
warn(
"substituter '%s' has an incompatible realisation for '%s', ignoring",
"substituter '%s' has an incompatible realisation for '%s', ignoring.\n"
"Local: %s\n"
"Remote: %s",
sub->getUri(),
depId.to_string());
depId.to_string(),
worker.store.printStorePath(localOutputInfo->outPath),
worker.store.printStorePath(depPath)
);
tryNext();
return;
}

View file

@ -732,8 +732,13 @@ void LocalStore::registerDrvOutput(const Realisation & info)
.exec();
} else {
throw Error("Trying to register a realisation of '%s', but we already "
"have another one locally",
info.id.to_string());
"have another one locally.\n"
"Local: %s\n"
"Remote: %s",
info.id.to_string(),
printStorePath(oldR->outPath),
printStorePath(info.outPath)
);
}
} else {
state->stmts->RegisterRealisedOutput.use()