1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-12-22 08:51:08 +01:00
Nix, the purely functional package manager
Find a file
Jörg Thalheim 1f739961e5 libstore: simplify registerValidPaths by removing redundant checkInvariants loop
The separate checkInvariants loop after addValidPath was added in 2014
(d210cdc43) to work around an assertion failure:

  nix-store: derivations.cc:242: Assertion 'store.isValidPath(i->first)' failed.

At that time, hashDerivationModulo() contained assert(store.isValidPath(...))
which required input derivations to be registered as valid in the database
before computing their hash. The workaround was to:
1. Call addValidPath with checkOutputs=false
2. Add all references to the database
3. Run checkInvariants in a separate loop after paths were valid

In 2020 (bccff827d), the isValidPath assertion was removed to fix a
deadlock in IFD through the daemon (issue #4235). The fix changed
hashDerivationModulo to use readInvalidDerivation, which reads directly
from the filesystem without requiring database validity.

This made the separate checkInvariants loop unnecessary, but nobody
noticed the code could be simplified. The comment "We can't do this in
addValidPath() above, because the references might not be valid yet"
became stale.

Now we simply call addValidPath() with the default checkOutputs=true,
which runs checkInvariants internally using the already-parsed
derivation. This commit eliminates the separate loop over derivations.
2025-12-18 09:34:17 +01:00
.github Merge pull request #14805 from NixOS/dependabot/github_actions/cachix/install-nix-action-31.9.0 2025-12-16 19:58:01 +00:00
ci/gha ci/gha: Disable linkcheck on darwin 2025-11-05 15:38:23 +01:00
contrib function-trace: always show the trace 2019-09-18 23:23:21 +02:00
doc/manual Remove dependent realisations 2025-12-16 19:56:19 -05:00
maintainers Update release credits 2025-12-09 15:36:45 +01:00
misc zsh/completion: put compdef on first line 2025-10-29 18:09:42 +08:00
nix-meson-build-support build: Disable libstdc++ TBB backend to avoid unnecessary dependency 2025-11-07 20:58:46 +01:00
packaging Fix up dev shell in a few ways 2025-12-17 15:41:47 -05:00
scripts Change channel URLs to channels.nixos.org subdomain 2025-11-09 15:28:12 +01:00
src libstore: simplify registerValidPaths by removing redundant checkInvariants loop 2025-12-18 09:34:17 +01:00
tests Remove dependent realisations 2025-12-16 19:56:19 -05:00
.clang-format Update clang-format with fixing namespace coments, and separate definition blocks 2025-07-18 12:46:51 -04:00
.clang-tidy Add .clang-tidy 2024-02-01 01:01:39 +01:00
.coderabbit.yaml .coderabbit.yaml: Kill chats 2025-11-04 22:55:18 +03:00
.dir-locals.el .dir-locals.el: Set c-block-comment-prefix 2020-07-10 11:21:06 +02:00
.editorconfig No global eval settings in libnixexpr 2024-06-24 12:15:16 -04:00
.git-blame-ignore-revs git-blame-ignore-revs: Add nixfmt 1.0.0 reformat 2025-08-18 20:30:54 +03:00
.gitignore Overriding gtest with gmock 2025-05-31 07:41:27 -07:00
.shellcheckrc housekeeping: shellcheck for tests/functional/ca/build-cache.sh 2024-06-12 17:41:16 -04:00
.version Bump version 2025-12-10 17:35:28 +01:00
CITATION.cff chore: PhD thesis as reference in CITATION.cff 2024-05-18 20:05:22 +02:00
CONTRIBUTING.md chore: document we use sembr in the docs 2025-12-05 23:17:13 +01:00
COPYING COPYING: update to latest lgpl-2.1.txt (fixes #13758) 2025-09-18 00:45:01 +08:00
default.nix Format .nix files 2025-01-24 17:04:02 +01:00
docker.nix Change channel URLs to channels.nixos.org subdomain 2025-11-09 15:28:12 +01:00
flake.lock flake: Bump nixpkgs 2025-11-27 23:43:41 +03:00
flake.nix doc: make HTML manual build optional 2025-12-06 22:35:45 +01:00
HACKING.md Rename doc/manual{src -> source} 2024-10-14 11:21:24 -04:00
meson.build meson.build: Make schema checks optional 2025-11-07 15:15:56 -05:00
meson.format flake: Add meson formatter 2025-06-11 22:08:03 +00:00
meson.options meson.build: Make schema checks optional 2025-11-07 15:15:56 -05:00
README.md fix(docs): update Matrix channel links 2025-05-04 12:17:48 +02:00
shell.nix Remove url literals 2022-01-24 13:28:21 +01:00

Nix

Open Collective supporters CI

Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. Please refer to the Nix manual for more details.

Installation and first steps

Visit nix.dev for installation instructions and beginner tutorials.

Full reference documentation can be found in the Nix manual.

Building and developing

Follow instructions in the Nix reference manual to set up a development environment and build Nix from source.

Contributing

Check the contributing guide if you want to get involved with developing Nix.

Additional resources

Nix was created by Eelco Dolstra and developed as the subject of his PhD thesis The Purely Functional Software Deployment Model, published 2006. Today, a world-wide developer community contributes to Nix and the ecosystem that has grown around it.

License

Nix is released under the LGPL v2.1.