Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lazy trees #6530

Draft
wants to merge 390 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
390 commits
Select commit Hold shift + click to select a range
37d859b
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Aug 19, 2022
a115c4f
GitHub fetcher: Restore the lastModified field
edolstra Aug 22, 2022
91aea15
Fix macOS build, where le32toh is not available
edolstra Aug 22, 2022
13c0db4
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Aug 25, 2022
def7b25
readLittleEndian(): Fix 64-bit integer truncation
edolstra Aug 26, 2022
034340a
Fix potential duplicate activity IDs in forked child processes
edolstra Aug 26, 2022
f95c425
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Aug 29, 2022
30be644
Make EvalState::inputAccessors keyed by the accessor number
edolstra Aug 29, 2022
7da3a30
Remove no_pos_tag
edolstra Aug 29, 2022
301f388
Remove FIXME
edolstra Aug 29, 2022
440214f
ZipInputAccessor: Fix invalid read
edolstra Aug 30, 2022
89f1021
Improve display of Git inputs
edolstra Aug 31, 2022
120bec5
GitInputScheme: Do not record 'ref' for dirty trees
edolstra Aug 31, 2022
8a43eaa
GitInputScheme: Add some progress indication
edolstra Aug 31, 2022
7c1bdff
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Sep 2, 2022
c0dd35a
ZipInputAccessor: Improve error messages
edolstra Sep 2, 2022
2d5cfca
Fix accessing 'toString path'
edolstra Sep 2, 2022
3667cf5
Whitespace
edolstra Sep 12, 2022
b293b33
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Sep 12, 2022
48a5879
Decode virtual paths in user-thrown errors
edolstra Sep 12, 2022
1b8065f
posToXML(): Fix displaying paths
edolstra Sep 12, 2022
85c1959
Remove some FIXMEs
edolstra Sep 12, 2022
432a3a1
Move isUri() and resolveUri() out of filetransfer.cc
edolstra Sep 12, 2022
2a1c63c
Support flake references in the old CLI
edolstra Sep 13, 2022
28b62dd
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Sep 28, 2022
a291e37
Improve error messages from call-flake.nix
edolstra Sep 28, 2022
c3c0682
Don't show "from call site" when we don't know the call site
edolstra Sep 28, 2022
cbade16
Handle unlocked overriden inputs
edolstra Sep 29, 2022
241dd54
warnOnce(): Fix boost exception when the message contains a format ch…
edolstra Sep 30, 2022
5c8d67d
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Oct 10, 2022
0286edb
Format GitHub paths as URLs
edolstra Oct 10, 2022
1483c56
Patch libzip to return timestamps in the Unix epoch
edolstra Oct 10, 2022
7317196
Input::getAccessor(): Get the fingerprint from the final accessor
edolstra Oct 10, 2022
5115909
Fix handling of relative paths
edolstra Oct 10, 2022
12dd8d4
Fix 'nix-instantiate --find-file' and add a test
edolstra Oct 12, 2022
e2353b9
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Oct 26, 2022
0402dd0
Interpret absolute paths relative to the root FS rather than the curr…
edolstra Oct 26, 2022
1683872
Use __nix_virtual__ instead of __virtual__
edolstra Oct 26, 2022
e424a8b
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Oct 27, 2022
a653e98
Encode virtual paths as /nix/store/virtual000<N>
edolstra Oct 27, 2022
f02da62
builtins.trace: Decode virtual paths
edolstra Oct 28, 2022
b275aa4
Don't use warnOnce() for the toString warning
edolstra Oct 28, 2022
8342317
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Nov 2, 2022
4072024
GitArchiveInputScheme: Bring back the narHash attribute
edolstra Nov 3, 2022
64a69b4
Fix dirOf on the root of a flake
edolstra Nov 16, 2022
561440b
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Nov 16, 2022
b27cd88
Partially revert "Format GitHub paths as URLs"
edolstra Nov 25, 2022
515b908
Fix decoding virtual paths that are at the root of the tree
edolstra Nov 25, 2022
39a783f
Require flakes for the -I flake:... feature
edolstra Dec 1, 2022
116acc1
Fix readDir for accessors whose readDirectory doesn't return types
edolstra Dec 2, 2022
fcdca3d
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Dec 5, 2022
730f6bf
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Dec 7, 2022
57397a3
Formatting
edolstra Dec 7, 2022
d162222
Remove test for .path in nix flake metadata
edolstra Dec 7, 2022
6d104bb
Don't allow appending a non-absolute path to the root of a source tree
edolstra Dec 8, 2022
f620184
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Dec 9, 2022
d950e3a
Improve error message when flake.nix exists but is not under Git control
edolstra Dec 9, 2022
12c554a
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Dec 12, 2022
a322306
For backward compatibility, allow appending non-root paths to the roo…
edolstra Dec 14, 2022
d8620d7
Append a slash in ./${"foo"}
edolstra Dec 14, 2022
8becbb0
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Dec 14, 2022
3bcaa7d
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Dec 15, 2022
210cd8c
Merge toDerivations() into toDerivedPaths()
edolstra Dec 15, 2022
81a4516
InstallableFlake::toDerivedPaths(): Support paths and store paths
edolstra Dec 15, 2022
880a72b
nix build --json: Only show non-zero startTime / stopTime
edolstra Dec 16, 2022
15d2e0e
Merge remote-tracking branch 'origin/master' into tmp
edolstra Dec 20, 2022
b48e641
Add builtins.filterPath
edolstra Dec 19, 2022
5e3cd3e
Fix FilteringInputAccessor::pathExists()
edolstra Dec 21, 2022
29dff7e
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Jan 11, 2023
20a0a74
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Jan 12, 2023
fa5af1e
Fix support for relative non-flake inputs (path:./bla)
edolstra Jan 12, 2023
9286b1a
Split GitInputScheme::getAccessor() more
edolstra Jan 20, 2023
9512afa
Typo
edolstra Jan 20, 2023
3621d07
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Jan 26, 2023
3522978
Fix tests
edolstra Jan 26, 2023
f4f0f8a
Remove toString deprecation warning
edolstra Jan 26, 2023
37b4a9e
Shut up a gcc warning
edolstra Jan 26, 2023
31bb875
Use libgit2 to provide direct access to Git repositories
edolstra Jan 25, 2023
aaf8b1b
Use C++20
edolstra Jan 31, 2023
b14830b
TarArchive: Remove a duplicate constant and increase the buffer size
edolstra Jan 31, 2023
5c29abc
GitArchiveInputScheme: Revert to downloading tarballs
edolstra Jan 31, 2023
4142982
Remove ZipInputAccessor
edolstra Jan 31, 2023
ca26ce9
Check tarball cache validity
edolstra Feb 3, 2023
219510b
GitArchiveInputScheme: Verify the locked tree hash
edolstra Feb 3, 2023
7b1cda9
GitArchiveInputScheme: Restore the lastModified attribute
edolstra Feb 3, 2023
00b746d
Warn if the computed tree hash differs from the one reported by GitHub
edolstra Feb 3, 2023
bb421ac
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Feb 8, 2023
12f1413
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Feb 17, 2023
02d5c54
Fix clang build
edolstra Feb 17, 2023
26ff9c1
Revert "Shut up a gcc warning"
edolstra Feb 17, 2023
f4009fd
Don't use std::span just yet
edolstra Feb 17, 2023
ece20d5
GitInputAccessor: Support symlinks
edolstra Feb 17, 2023
5d1e5a0
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Feb 21, 2023
c8f7ca2
Fix addErrorContext
edolstra Feb 21, 2023
273df09
Remove unused file
edolstra Feb 21, 2023
21f0a98
Remove unnecessary -lgit2
edolstra Feb 21, 2023
03618bb
Fix GitHub test
edolstra Feb 21, 2023
56a845d
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Feb 22, 2023
98a90cc
Use libgit2 to get the revCount
edolstra Feb 24, 2023
430bfcf
Use libgit2 to get lastModified
edolstra Feb 24, 2023
13e8d70
Use libgit2 for getting isShallow
edolstra Feb 24, 2023
23806db
Use libgit2 to resolve references to commit hashes
edolstra Feb 24, 2023
ab2b0fb
Add a helper class to avoid leaking libgit2 objects
edolstra Feb 24, 2023
8c8f242
Handle revisions used as refs for compatibility
edolstra Feb 24, 2023
579ecd3
Remove a test for the non-presence of git
edolstra Feb 24, 2023
1b0b3b1
Add git_oid -> Hash conversion
edolstra Feb 24, 2023
834d878
Use libgit2 to get workdir info
edolstra Mar 1, 2023
1017b11
Remove dead code
edolstra Mar 1, 2023
86ca2c5
Use libgit2 to create the local cache repos
edolstra Mar 1, 2023
e952d36
Refactor
edolstra Mar 1, 2023
d6cdb07
Rename
edolstra Mar 1, 2023
334348f
Remove use of git cat-file
edolstra Mar 1, 2023
733861d
Support allRefs in git URLs
edolstra Mar 2, 2023
3a1a33d
Use libgit2 for fetching repos
edolstra Mar 2, 2023
b19534a
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 6, 2023
854a311
Fix appending an empty string to a path
edolstra Mar 6, 2023
b8218b5
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 7, 2023
f21e1cf
Fix outPath in flakes
edolstra Mar 8, 2023
aa823c2
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 8, 2023
d7d49fd
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 9, 2023
bb72d1b
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 9, 2023
6192fd0
Fix some clang errors/warnings
edolstra Mar 9, 2023
4f1b0d7
Fix clang compilation
edolstra Mar 10, 2023
cdb946e
Fix test regression
edolstra Mar 13, 2023
7052e19
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 15, 2023
2f1a90b
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 16, 2023
0671807
Fix makefile
edolstra Mar 16, 2023
b2a205e
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 16, 2023
ccd2ad2
Remove git caching
edolstra Mar 17, 2023
2a4462e
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 17, 2023
f432967
Use libgit2 for getting the HEAD ref of local repos
edolstra Mar 20, 2023
f23b969
Check git_remote_fetch() return value
edolstra Mar 20, 2023
2ffa909
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 24, 2023
4b9215c
Handle patches that have a timestamp after the filename
edolstra Mar 28, 2023
9a15ec8
Indentation
edolstra Mar 30, 2023
870e750
Fix root/overriden flakes with dir attribute
edolstra Mar 29, 2023
64b9e50
Add CanonPath::makeRelative()
edolstra Mar 30, 2023
2154084
Allow patches to be applied to flake inputs
edolstra Mar 28, 2023
a0b0cac
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 30, 2023
a1501cf
EvalState::rootPath(): Take a CanonPath
edolstra Apr 3, 2023
8ee59d7
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Apr 3, 2023
791e222
Fix tests
edolstra Apr 6, 2023
5b2be3a
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Apr 25, 2023
0dfc214
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Apr 26, 2023
91aefbd
Factor out FilteringInputAccessor
edolstra Apr 26, 2023
d102273
Fix clang compilation
edolstra May 1, 2023
39079dd
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 9, 2023
2b9ded5
Fix parsing of relative flake inputs without 'path:'
edolstra May 10, 2023
a9d4780
Revert to using git for fetching remote git repos
edolstra May 11, 2023
2dc2f58
Log git fetch errors
edolstra May 11, 2023
ac73702
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 12, 2023
3c4d678
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Jun 2, 2023
e59caad
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Jun 19, 2023
2f18e78
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Jun 26, 2023
f355c34
Fix handling of relative path flakes (and add some tests)
edolstra Jun 26, 2023
56272db
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Aug 3, 2023
3494c29
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Sep 9, 2023
4e16d5e
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Sep 20, 2023
6b70509
Remove dead code
edolstra Sep 21, 2023
eaa785e
Improve error message
edolstra Sep 22, 2023
ea5c2e3
Tarball fetcher: Use the tarball cache
edolstra Oct 11, 2023
b219d76
Tarball cache: Add cache entries for all URLs in the redirect chain
edolstra Oct 11, 2023
0e48afb
Remove the "facts" cache
edolstra Oct 11, 2023
0b72b31
Remove debug statement
edolstra Oct 12, 2023
6513f69
Fix lastModified handling
edolstra Oct 13, 2023
94c028f
Fix file:https:// URLs
edolstra Oct 13, 2023
e350f84
Remove bad.tar.xz check, since libarchive doesn't care
edolstra Oct 13, 2023
fa8618f
Eliminate old downloadTarball()
edolstra Oct 13, 2023
144987e
Revert cache version
edolstra Oct 13, 2023
6a95ff9
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Oct 13, 2023
b4df104
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Oct 17, 2023
601de7f
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Oct 23, 2023
c677ea7
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Oct 23, 2023
aa85359
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Nov 3, 2023
ddca787
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Nov 20, 2023
ec272de
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Nov 22, 2023
b39148e
Post-merge cleanup
edolstra Nov 22, 2023
3099b51
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Nov 28, 2023
0aa13b6
Cleanup
edolstra Nov 30, 2023
be1543e
Merge remote-tracking branch 'upstream/master' into lazy-trees
Ericson2314 Dec 1, 2023
653c100
Merge remote-tracking branch 'upstream/master' into lazy-trees
Ericson2314 Dec 1, 2023
575902b
Merge remote-tracking branch 'upstream/master' into lazy-trees
Ericson2314 Dec 7, 2023
d38f4d9
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Dec 13, 2023
dab2be3
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Dec 13, 2023
2055e28
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Dec 13, 2023
c0b1df7
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Feb 15, 2024
748567b
Doxygen
edolstra Feb 15, 2024
5558d65
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Feb 19, 2024
d022bce
FileInputScheme: Display path properly
edolstra Feb 19, 2024
7eb3ba0
PosixSourceAccessor: Support roots that are not directories
edolstra Feb 19, 2024
d9cfae2
Cleanup
edolstra Feb 21, 2024
43de535
Remove unnecessary pointer
edolstra Feb 21, 2024
0d02a63
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Feb 21, 2024
d2292a1
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Feb 21, 2024
edcd6ce
Merge remote-tracking branch 'origin/master' into lazy-trees
9999years Mar 1, 2024
793a838
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 4, 2024
1c56bdd
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Mar 7, 2024
49f9099
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Apr 2, 2024
ce23764
Remove duplicate comment
edolstra Apr 2, 2024
3369a81
EvalState::findFile(): Resolve symlinks
edolstra Apr 3, 2024
3f70f20
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Apr 19, 2024
1abf058
Merge remote-tracking branch 'upstream/master' into lazy-trees
roberth Apr 21, 2024
147593d
tests/libexpr: Re-enable C api tests that build
roberth Apr 21, 2024
c6b4f01
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Apr 22, 2024
cf02c6a
Fix test
edolstra Apr 22, 2024
4a9b7c8
Fix pre-commit check
edolstra Apr 22, 2024
0efcbbf
Run the flake-regressions test suite
edolstra Apr 24, 2024
c4cd4cd
Hack
edolstra Apr 24, 2024
93cf285
PathInputScheme: Improve path display
edolstra Apr 25, 2024
2fec506
BasicDerivation: Add applyRewrites() method
edolstra Apr 25, 2024
5ddd8e4
Introduce a new string context for representing paths
edolstra Apr 25, 2024
1302bfa
Re-enable some tests
edolstra Apr 25, 2024
9c10fcf
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Apr 30, 2024
71575a2
Debug
edolstra Apr 30, 2024
333d35a
callPathFilter(): Pass a lazy store path
edolstra Apr 30, 2024
0950094
Fix fileset compatibility
edolstra Apr 30, 2024
2101916
Test baseNameOf behaviour on the root of a flake
edolstra Apr 30, 2024
fc4d948
Cleanup
edolstra Apr 30, 2024
db6c219
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Apr 30, 2024
a65c8a9
Debug
edolstra Apr 30, 2024
c5ae41d
Copy roots to the store as /nix/store/<hash1>-<hash2>-source
edolstra Apr 30, 2024
ea54be0
filterPath: Ensure /nix/store/<hash>-<hash>-source
edolstra Apr 30, 2024
a435a40
Disable some GitHub narHash related tests for now
edolstra Apr 30, 2024
7332321
Run more flake regression tests
edolstra Apr 30, 2024
299d0b7
TarballInputScheme: Fix fetchToStore() caching
edolstra May 3, 2024
3a96ba0
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 6, 2024
25635e5
EvalState: Rename decodePaths() -> prettyPrintPaths()
edolstra May 6, 2024
b5be3b0
Pretty-print virtual paths in more contexts
edolstra May 6, 2024
2409e6b
Add tests for tree laziness
edolstra May 6, 2024
44d20c3
Warn against use of `toString ./path` as a derivation attribute
edolstra May 6, 2024
4133514
Remove unused
edolstra May 6, 2024
2cb003c
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 6, 2024
8fc36e2
Fix concatenating to an attrset
edolstra May 6, 2024
bcb1be4
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 6, 2024
f0cf5d8
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 7, 2024
a123f87
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 8, 2024
26f1431
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 10, 2024
b7255f8
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 13, 2024
584fece
flake-regressions.sh: Make the sort order deterministic
edolstra May 14, 2024
4d39908
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra May 14, 2024
e255be6
builtins.toPath: Rewrite virtual paths
edolstra May 14, 2024
a33aad3
Use fetchToStore() instead of computeStorePath()
edolstra May 14, 2024
35bbd85
Warn about double copies
edolstra May 14, 2024
b6be10d
Skip a broken test
edolstra May 15, 2024
57e1692
Backwards compatibility hack to handle `/. + path`
edolstra May 15, 2024
57b2cc2
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Jul 2, 2024
1b20945
Formatting
edolstra Jul 2, 2024
53fabdc
Busywork
edolstra Jul 2, 2024
34e4a61
Merge branch 'master' into lazy-trees
Ericson2314 Jul 5, 2024
0d3a157
Merge remote-tracking branch 'origin/master' into lazy-trees
edolstra Jul 8, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Merge remote-tracking branch 'origin/master' into lazy-trees
  • Loading branch information
edolstra committed Dec 5, 2022
commit fcdca3d776db24e5cb1ae485942508d9b54ed6bb
42 changes: 42 additions & 0 deletions doc/manual/src/release-notes/rl-next.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,48 @@
a context just because they are read from a store path
([#7260](https://github.com/NixOS/nix/pull/7260)).

* Nix can now automatically pick UIDs for builds, removing the need to
create `nixbld*` user accounts. These UIDs are allocated starting at
872415232 (0x34000000) on Linux and 56930 on macOS.

This is an experimental feature. To enable it, add the following to
`nix.conf`:

```
extra-experimental-features = auto-allocate-uids
auto-allocate-uids = true
```

* On Linux, Nix can now run builds in a user namespace where the build
runs as root (UID 0) and has 65,536 UIDs available. This is
primarily useful for running containers such as `systemd-nspawn`
inside a Nix build. For an example, see
https://github.com/NixOS/nix/blob/67bcb99700a0da1395fa063d7c6586740b304598/tests/systemd-nspawn.nix.

A build can enable this by requiring the `uid-range` system feature,
i.e. by setting the derivation attribute

```
requiredSystemFeatures = [ "uid-range" ];
```

The `uid-range` system feature requires the `auto-allocate-uids`
setting to be enabled (see above).

* On Linux, Nix has experimental support for running builds inside a
cgroup. It can be enabled by adding

```
extra-experimental-features = cgroups
use-cgroups = true
```

to `nix.conf`. Cgroups are required for derivations that require the
`uid-range` system feature.

Copy link
Member

@infinisil infinisil Dec 6, 2022

Choose a reason for hiding this comment

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

Another problem I just discovered: baseNameOf return the virtual path string for lazy path roots:

nix-repl> baseNameOf lazyPath
"virtual0000000000000000000000004-source"

It should really throw an error, it doesn't make sense to get the base name of a lazy path.

Copy link
Member

Choose a reason for hiding this comment

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

It should really throw an error, it doesn't make sense to get the base name of a lazy path.

This is again similar to the basename of the filesystem root.

nix-repl> baseNameOf /. 
""

It would be more consistent for baseNameOf lazy to return "", but I'm not sure which is better.

Copy link
Member

Choose a reason for hiding this comment

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

I just found a piece of code that would use baseNameOf on flake paths and whose behavior would change silently with this PR. While there's problems with that piece of code (inspecting store paths isn't great), and this was pointed out, it still shows how easy it is for this PR to break code in unintentional ways. I still think baseNameOf should give an error or as suggested by @roberth at least be consistent with baseNameOf /. == "". This also relates to my thinking that lazy paths shouldn't be toString'able at all: #6530 (comment)

Copy link
Member

Choose a reason for hiding this comment

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

Relatedly, dirOf has no effect on the lazy path roots:

nix-repl> lazyPath       
/home/tweagysil/src/nix/

nix-repl> dirOf lazyPath
/home/tweagysil/src/nix/

But this does make sense, because the lazy path root essentially acts like a filesystem root, and the directory of a filesystem root is the root itself, which Nix also does with /:

nix-repl> /.                        
/

nix-repl> dirOf /.
/

So I don't think this needs any fixes, but it would be good to write a note about this in the docs.

* `nix build --json` now prints some statistics about top-level
derivations, such as CPU statistics when cgroups are enabled.

* You can now use flake references in the old CLI, e.g.

```
Expand Down
12 changes: 6 additions & 6 deletions src/libexpr/eval.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2482,9 +2482,9 @@ void EvalState::printStats()
obj["name"] = nullptr;
if (auto pos = positions[fun->pos]) {
if (auto path = std::get_if<SourcePath>(&pos.origin))
Copy link
Member

Choose a reason for hiding this comment

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

I think it would be nice to cover the other variants (or at least stdin and string) in some way here too -- maybe even add some further metadata to allow distinguishing --apply from --expr strings. Nothing that needs to be resolved in this PR though IMHO.

obj.attr("file", path->to_string());
obj.attr("line", pos.line);
obj.attr("column", pos.column);
obj["file"] = path->to_string();
obj["line"] = pos.line;
obj["column"] = pos.column;
}
obj["count"] = count;
list.push_back(obj);
Expand All @@ -2497,9 +2497,9 @@ void EvalState::printStats()
json obj = json::object();
if (auto pos = positions[i.first]) {
if (auto path = std::get_if<SourcePath>(&pos.origin))
obj.attr("file", path->to_string());
obj.attr("line", pos.line);
obj.attr("column", pos.column);
obj["file"] = path->to_string();
obj["line"] = pos.line;
obj["column"] = pos.column;
}
obj["count"] = i.second;
list.push_back(obj);
Expand Down
7 changes: 3 additions & 4 deletions src/libexpr/value-to-json.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,10 @@ json printValueAsJSON(EvalState & state, bool strict,

case nPath:
if (copyToStore)
out.write(
state.store->printStorePath(
state.copyPathToStore(context, v.path())));
out = state.store->printStorePath(
state.copyPathToStore(context, v.path()));
else
out.write(v.path().path.abs());
out = v.path().path.abs();
break;

case nNull:
Expand Down
35 changes: 20 additions & 15 deletions src/nix/flake.cc
Original file line number Diff line number Diff line change
Expand Up @@ -912,18 +912,11 @@ struct CmdFlakeArchive : FlakeCommand, MixJSON

auto flake = lockFlake();

auto jsonRoot = json ? std::optional<JSONObject>(std::cout) : std::nullopt;

{
Activity act(*logger, lvlChatty, actUnknown, fmt("archiving root"));
auto storePath = flake.flake.lockedRef.input.fetchToStore(dstStore).first;
if (jsonRoot)
jsonRoot->attr("path", store->printStorePath(storePath));
}
auto jsonRoot = json ? std::optional<nlohmann::json>() : std::nullopt;

// FIXME: use graph output, handle cycles.
std::function<void(const Node & node, const InputPath & parentPath, std::optional<JSONObject> & jsonObj)> traverse;
traverse = [&](const Node & node, const InputPath & parentPath, std::optional<JSONObject> & jsonObj)
std::function<nlohmann::json(const Node & node, const InputPath & parentPath)> traverse;
traverse = [&](const Node & node, const InputPath & parentPath)
{
nlohmann::json jsonObj2 = json ? json::object() : nlohmann::json(nullptr);
for (auto & [inputName, input] : node.inputs) {
Expand All @@ -932,17 +925,29 @@ struct CmdFlakeArchive : FlakeCommand, MixJSON
inputPath.push_back(inputName);
Activity act(*logger, lvlChatty, actUnknown,
fmt("archiving input '%s'", printInputPath(inputPath)));
auto jsonObj3 = jsonObj2 ? jsonObj2->object(inputName) : std::optional<JSONObject>();
auto storePath = (*inputNode)->lockedRef.input.fetchToStore(dstStore).first;
if (jsonObj3)
jsonObj3->attr("path", store->printStorePath(storePath));
traverse(**inputNode, inputPath, jsonObj3);
auto res = traverse(**inputNode, inputPath);
if (json) {
auto & jsonObj3 = jsonObj2[inputName];
jsonObj3["path"] = store->printStorePath(storePath);
jsonObj3["inputs"] = res;
}
}
}
return jsonObj2;
};

traverse(*flake.lockFile.root, {}, jsonRoot);
auto res = traverse(*flake.lockFile.root, {});

if (json) {
Activity act(*logger, lvlChatty, actUnknown, fmt("archiving root"));
auto storePath = flake.flake.lockedRef.input.fetchToStore(dstStore).first;
nlohmann::json jsonRoot = {
{"path", store->printStorePath(storePath)},
{"inputs", res},
};
std::cout << jsonRoot.dump() << std::endl;
}
}
};

Expand Down
You are viewing a condensed version of this merge commit. You can view the full changes here.