Skip to content

Comments

Give queryPartialDerivationOutputMap an evalStore parameter#8724

Merged
Ericson2314 merged 3 commits intoNixOS:masterfrom
obsidiansystems:queryPartialDerivationOutputMap-evalStore
Jul 21, 2023
Merged

Give queryPartialDerivationOutputMap an evalStore parameter#8724
Ericson2314 merged 3 commits intoNixOS:masterfrom
obsidiansystems:queryPartialDerivationOutputMap-evalStore

Conversation

@Ericson2314
Copy link
Member

Motivation

This makes it more useful. In general, the derivation will be in one
store, and the realisation info is in another.

This also helps us avoid duplication. See how resolveDerivedPath is
now simpler because it uses queryPartialDerivationOutputMap. In #8369
we get more flavors of derived path, and need more code to resolve them
all, and this problem only gets worse.

Context

The fact that we need a new method to deal with the multiple dispatch is
unfortunate, but this generally relates to the fact that Store is a
sub-par interface, too bulky/unwieldy and conflating separate concerns.
Solving that is out of scope of this PR.

This is part of the RFC 92 work. See tracking issue #6316

Checklist for maintainers

Maintainers: tick if completed or explain if not relevant

  • agreed on idea
  • agreed on implementation strategy
  • tests, as appropriate
    • functional tests - tests/**.sh
    • unit tests - src/*/tests
    • integration tests - tests/nixos/*
  • documentation in the manual
  • documentation in the internal API docs
  • code and comments are self-explanatory
  • commit message explains why the change was made
  • new feature or incompatible change: updated release notes

Priorities

Add 👍 to pull requests you find important.

It appeared in 8eb73a8 (by me!) without
justification.
This makes it more useful. In general, the derivation will be in one
store, and the realisation info is in another.

This also helps us avoid duplication. See how `resolveDerivedPath` is
now simpler because it uses `queryPartialDerivationOutputMap`. In NixOS#8369
we get more flavors of derived path, and need more code to resolve them
all, and this problem only gets worse.

The fact that we need a new method to deal with the multiple dispatch is
unfortunate, but this generally relates to the fact that `Store` is a
sub-par interface, too bulky/unwieldy and conflating separate concerns.
Solving that is out of scope of this PR.

This is part of the RFC 92 work. See tracking issue NixOS#6316
Comment on lines -1040 to -1054

if (!experimentalFeatureSettings.isEnabled(Xp::CaDerivations))
return outputs;

auto drv = readInvalidDerivation(path);
auto drvHashes = staticOutputHashes(*this, drv);
for (auto& [outputName, hash] : drvHashes) {
auto realisation = queryRealisation(DrvOutput{hash, outputName});
if (realisation)
outputs.insert_or_assign(outputName, realisation->outPath);
else
outputs.insert({outputName, std::nullopt});
}

return outputs;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code is local-store-agnostic, and thus moved out of here.

@Ericson2314 Ericson2314 merged commit fe1fbdb into NixOS:master Jul 21, 2023
@Ericson2314 Ericson2314 deleted the queryPartialDerivationOutputMap-evalStore branch July 21, 2023 12:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

store Issues and pull requests concerning the Nix store

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants