Don't ignore an absent drv file in queryPartialDrvOutputMap

This ignore was here because `queryPartialDrvOutputMap` was used both
1. as a cache to avoid having to re-read the derivation (when gc-ing for
example), and
2. as the source of truth for ca realisations

The use-case 2. required it to be able to work even when the derivation
wasn't there anymore (see https://github.com/NixOS/nix/issues/4138).
However, this use-case is now handled by `queryRealisation`, meaning
that we can safely error out if the derivation isn't there anymore
This commit is contained in:
regnat 2020-12-16 13:36:17 +01:00
parent 3765174691
commit cac8d5b742

View file

@ -912,12 +912,7 @@ LocalStore::queryPartialDerivationOutputMap(const StorePath& path_)
auto state(_state.lock()); auto state(_state.lock());
std::map<std::string, std::optional<StorePath>> outputs; std::map<std::string, std::optional<StorePath>> outputs;
uint64_t drvId; uint64_t drvId;
try {
drvId = queryValidPathId(*state, path); drvId = queryValidPathId(*state, path);
} catch (InvalidPath&) {
// Ignore non-existing drvs as they might still have an output map
// defined if ca-derivations is enabled
}
auto use(state->stmts->QueryDerivationOutputs.use()(drvId)); auto use(state->stmts->QueryDerivationOutputs.use()(drvId));
while (use.next()) while (use.next())
outputs.insert_or_assign( outputs.insert_or_assign(