mirror of
https://github.com/NixOS/nix
synced 2025-06-27 21:01:16 +02:00
Merge remote-tracking branch 'origin/master' into flake-substitution
This commit is contained in:
commit
4fcd458512
529 changed files with 996 additions and 747 deletions
|
@ -23,7 +23,7 @@ assignees: ''
|
||||||
- [ ] checked [open documentation issues and pull requests] for possible duplicates
|
- [ ] checked [open documentation issues and pull requests] for possible duplicates
|
||||||
|
|
||||||
[latest Nix manual]: https://nixos.org/manual/nix/unstable/
|
[latest Nix manual]: https://nixos.org/manual/nix/unstable/
|
||||||
[source]: https://github.com/NixOS/nix/tree/master/doc/manual/src
|
[source]: https://github.com/NixOS/nix/tree/master/doc/manual/source
|
||||||
[open documentation issues and pull requests]: https://github.com/NixOS/nix/labels/documentation
|
[open documentation issues and pull requests]: https://github.com/NixOS/nix/labels/documentation
|
||||||
|
|
||||||
## Priorities
|
## Priorities
|
||||||
|
|
4
.github/labeler.yml
vendored
4
.github/labeler.yml
vendored
|
@ -1,7 +1,7 @@
|
||||||
"c api":
|
"c api":
|
||||||
- changed-files:
|
- changed-files:
|
||||||
- any-glob-to-any-file: "src/lib*-c/**/*"
|
- any-glob-to-any-file: "src/lib*-c/**/*"
|
||||||
- any-glob-to-any-file: "test/unit/**/nix_api_*"
|
- any-glob-to-any-file: "src/*test*/**/nix_api_*"
|
||||||
- any-glob-to-any-file: "doc/external-api/**/*"
|
- any-glob-to-any-file: "doc/external-api/**/*"
|
||||||
|
|
||||||
"contributor-experience":
|
"contributor-experience":
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
- any-glob-to-any-file: "CONTRIBUTING.md"
|
- any-glob-to-any-file: "CONTRIBUTING.md"
|
||||||
- any-glob-to-any-file: ".github/ISSUE_TEMPLATE/*"
|
- any-glob-to-any-file: ".github/ISSUE_TEMPLATE/*"
|
||||||
- any-glob-to-any-file: ".github/PULL_REQUEST_TEMPLATE.md"
|
- any-glob-to-any-file: ".github/PULL_REQUEST_TEMPLATE.md"
|
||||||
- any-glob-to-any-file: "doc/manual/src/contributing/**"
|
- any-glob-to-any-file: "doc/manual/source/contributing/**"
|
||||||
|
|
||||||
"documentation":
|
"documentation":
|
||||||
- changed-files:
|
- changed-files:
|
||||||
|
|
32
.gitignore
vendored
32
.gitignore
vendored
|
@ -23,17 +23,17 @@ perl/Makefile.config
|
||||||
/doc/manual/conf-file.json
|
/doc/manual/conf-file.json
|
||||||
/doc/manual/language.json
|
/doc/manual/language.json
|
||||||
/doc/manual/xp-features.json
|
/doc/manual/xp-features.json
|
||||||
/doc/manual/src/SUMMARY.md
|
/doc/manual/source/SUMMARY.md
|
||||||
/doc/manual/src/SUMMARY-rl-next.md
|
/doc/manual/source/SUMMARY-rl-next.md
|
||||||
/doc/manual/src/store/types/*
|
/doc/manual/source/store/types/*
|
||||||
!/doc/manual/src/store/types/index.md.in
|
!/doc/manual/source/store/types/index.md.in
|
||||||
/doc/manual/src/command-ref/new-cli
|
/doc/manual/source/command-ref/new-cli
|
||||||
/doc/manual/src/command-ref/conf-file.md
|
/doc/manual/source/command-ref/conf-file.md
|
||||||
/doc/manual/src/command-ref/experimental-features-shortlist.md
|
/doc/manual/source/command-ref/experimental-features-shortlist.md
|
||||||
/doc/manual/src/contributing/experimental-feature-descriptions.md
|
/doc/manual/source/contributing/experimental-feature-descriptions.md
|
||||||
/doc/manual/src/language/builtins.md
|
/doc/manual/source/language/builtins.md
|
||||||
/doc/manual/src/language/builtin-constants.md
|
/doc/manual/source/language/builtin-constants.md
|
||||||
/doc/manual/src/release-notes/rl-next.md
|
/doc/manual/source/release-notes/rl-next.md
|
||||||
|
|
||||||
# /scripts/
|
# /scripts/
|
||||||
/scripts/nix-profile.sh
|
/scripts/nix-profile.sh
|
||||||
|
@ -49,22 +49,22 @@ perl/Makefile.config
|
||||||
/src/libexpr/parser-tab.output
|
/src/libexpr/parser-tab.output
|
||||||
/src/libexpr/nix.tbl
|
/src/libexpr/nix.tbl
|
||||||
/src/libexpr/tests
|
/src/libexpr/tests
|
||||||
/tests/unit/libexpr/libnixexpr-tests
|
/src/libexpr-tests/libnixexpr-tests
|
||||||
|
|
||||||
# /src/libfetchers
|
# /src/libfetchers
|
||||||
/tests/unit/libfetchers/libnixfetchers-tests
|
/src/libfetchers-tests/libnixfetchers-tests
|
||||||
|
|
||||||
# /src/libflake
|
# /src/libflake
|
||||||
/tests/unit/libflake/libnixflake-tests
|
/src/libflake-tests/libnixflake-tests
|
||||||
|
|
||||||
# /src/libstore/
|
# /src/libstore/
|
||||||
*.gen.*
|
*.gen.*
|
||||||
/src/libstore/tests
|
/src/libstore/tests
|
||||||
/tests/unit/libstore/libnixstore-tests
|
/src/libstore-tests/libnixstore-tests
|
||||||
|
|
||||||
# /src/libutil/
|
# /src/libutil/
|
||||||
/src/libutil/tests
|
/src/libutil/tests
|
||||||
/tests/unit/libutil/libnixutil-tests
|
/src/libutil-tests/libnixutil-tests
|
||||||
|
|
||||||
/src/nix/nix
|
/src/nix/nix
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ Check out the [security policy](https://github.com/NixOS/nix/security/policy).
|
||||||
- Functional tests – [`tests/functional/**.sh`](./tests/functional)
|
- Functional tests – [`tests/functional/**.sh`](./tests/functional)
|
||||||
- Unit tests – [`src/*/tests`](./src/)
|
- Unit tests – [`src/*/tests`](./src/)
|
||||||
- Integration tests – [`tests/nixos/*`](./tests/nixos)
|
- Integration tests – [`tests/nixos/*`](./tests/nixos)
|
||||||
- [ ] User documentation in the [manual](./doc/manual/src)
|
- [ ] User documentation in the [manual](./doc/manual/source)
|
||||||
- [ ] API documentation in header files
|
- [ ] API documentation in header files
|
||||||
- [ ] Code and comments are self-explanatory
|
- [ ] Code and comments are self-explanatory
|
||||||
- [ ] Commit message explains **why** the change was made
|
- [ ] Commit message explains **why** the change was made
|
||||||
|
@ -90,7 +90,7 @@ Check out the [security policy](https://github.com/NixOS/nix/security/policy).
|
||||||
## Making changes to the Nix manual
|
## Making changes to the Nix manual
|
||||||
|
|
||||||
The Nix reference manual is hosted on https://nixos.org/manual/nix.
|
The Nix reference manual is hosted on https://nixos.org/manual/nix.
|
||||||
The underlying source files are located in [`doc/manual/src`](./doc/manual/src).
|
The underlying source files are located in [`doc/manual/source`](./doc/manual/source).
|
||||||
For small changes you can [use GitHub to edit these files](https://docs.github.com/en/repositories/working-with-files/managing-files/editing-files)
|
For small changes you can [use GitHub to edit these files](https://docs.github.com/en/repositories/working-with-files/managing-files/editing-files)
|
||||||
For larger changes see the [Nix reference manual](https://nix.dev/manual/nix/development/development/contributing.html).
|
For larger changes see the [Nix reference manual](https://nix.dev/manual/nix/development/development/contributing.html).
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
doc/manual/src/development/building.md
|
doc/manual/source/development/building.md
|
16
Makefile
16
Makefile
|
@ -40,14 +40,14 @@ endif
|
||||||
|
|
||||||
ifeq ($(ENABLE_UNIT_TESTS), yes)
|
ifeq ($(ENABLE_UNIT_TESTS), yes)
|
||||||
makefiles += \
|
makefiles += \
|
||||||
tests/unit/libutil/local.mk \
|
src/libutil-tests/local.mk \
|
||||||
tests/unit/libutil-support/local.mk \
|
src/libutil-test-support/local.mk \
|
||||||
tests/unit/libstore/local.mk \
|
src/libstore-tests/local.mk \
|
||||||
tests/unit/libstore-support/local.mk \
|
src/libstore-test-support/local.mk \
|
||||||
tests/unit/libfetchers/local.mk \
|
src/libfetchers-tests/local.mk \
|
||||||
tests/unit/libexpr/local.mk \
|
src/libexpr-tests/local.mk \
|
||||||
tests/unit/libexpr-support/local.mk \
|
src/libexpr-test-support/local.mk \
|
||||||
tests/unit/libflake/local.mk
|
src/libflake-tests/local.mk
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(ENABLE_FUNCTIONAL_TESTS), yes)
|
ifeq ($(ENABLE_FUNCTIONAL_TESTS), yes)
|
||||||
|
|
17
configure.ac
17
configure.ac
|
@ -62,12 +62,16 @@ AC_CHECK_TOOL([AR], [ar])
|
||||||
AC_SYS_LARGEFILE
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
|
|
||||||
# Solaris-specific stuff.
|
# OS-specific stuff.
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
solaris*)
|
solaris*)
|
||||||
# Solaris requires -lsocket -lnsl for network functions
|
# Solaris requires -lsocket -lnsl for network functions
|
||||||
LDFLAGS="-lsocket -lnsl $LDFLAGS"
|
LDFLAGS="-lsocket -lnsl $LDFLAGS"
|
||||||
;;
|
;;
|
||||||
|
darwin*)
|
||||||
|
# Need to link to libsandbox.
|
||||||
|
LDFLAGS="-lsandbox $LDFLAGS"
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
@ -89,9 +93,10 @@ AC_LANG_POP(C++)
|
||||||
AC_CHECK_FUNCS([statvfs pipe2 close_range])
|
AC_CHECK_FUNCS([statvfs pipe2 close_range])
|
||||||
|
|
||||||
|
|
||||||
# Check for lutimes, optionally used for changing the mtime of
|
# Check for lutimes and utimensat, optionally used for changing the
|
||||||
# symlinks.
|
# mtime of symlinks.
|
||||||
AC_CHECK_FUNCS([lutimes])
|
AC_CHECK_DECLS([AT_SYMLINK_NOFOLLOW], [], [], [[#include <fcntl.h>]])
|
||||||
|
AC_CHECK_FUNCS([lutimes utimensat])
|
||||||
|
|
||||||
|
|
||||||
# Check whether the store optimiser can optimise symlinks.
|
# Check whether the store optimiser can optimise symlinks.
|
||||||
|
@ -170,6 +175,10 @@ AS_IF(
|
||||||
[test "$ENABLE_FUNCTIONAL_TESTS" == "yes" || test "$ENABLE_DOC_GEN" == "yes"],
|
[test "$ENABLE_FUNCTIONAL_TESTS" == "yes" || test "$ENABLE_DOC_GEN" == "yes"],
|
||||||
[NEED_PROG(jq, jq)])
|
[NEED_PROG(jq, jq)])
|
||||||
|
|
||||||
|
AS_IF(
|
||||||
|
[test "$ENABLE_DOC_GEN" == "yes"],
|
||||||
|
[NEED_PROG(man, man)])
|
||||||
|
|
||||||
AS_IF([test "$ENABLE_BUILD" == "yes"],[
|
AS_IF([test "$ENABLE_BUILD" == "yes"],[
|
||||||
|
|
||||||
# Look for boost, a required dependency.
|
# Look for boost, a required dependency.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
[book]
|
[book]
|
||||||
title = "Nix Reference Manual"
|
title = "Nix Reference Manual"
|
||||||
|
src = "source"
|
||||||
|
|
||||||
[output.html]
|
[output.html]
|
||||||
additional-css = ["custom.css"]
|
additional-css = ["custom.css"]
|
||||||
|
@ -7,7 +8,7 @@ additional-js = ["redirects.js"]
|
||||||
edit-url-template = "https://github.com/NixOS/nix/tree/master/doc/manual/{path}"
|
edit-url-template = "https://github.com/NixOS/nix/tree/master/doc/manual/{path}"
|
||||||
git-repository-url = "https://github.com/NixOS/nix"
|
git-repository-url = "https://github.com/NixOS/nix"
|
||||||
|
|
||||||
# Handles replacing @docroot@ with a path to ./src relative to that markdown file,
|
# Handles replacing @docroot@ with a path to ./source relative to that markdown file,
|
||||||
# {{#include handlebars}}, and the @generated@ syntax used within these. it mostly
|
# {{#include handlebars}}, and the @generated@ syntax used within these. it mostly
|
||||||
# but not entirely replaces the links preprocessor (which we cannot simply use due
|
# but not entirely replaces the links preprocessor (which we cannot simply use due
|
||||||
# to @generated@ files living in a different directory to make meson happy). we do
|
# to @generated@ files living in a different directory to make meson happy). we do
|
||||||
|
|
|
@ -21,7 +21,7 @@ let
|
||||||
|
|
||||||
"index.md" = replaceStrings
|
"index.md" = replaceStrings
|
||||||
[ "@store-types@" ] [ index ]
|
[ "@store-types@" ] [ index ]
|
||||||
(readFile ./src/store/types/index.md.in);
|
(readFile ./source/store/types/index.md.in);
|
||||||
|
|
||||||
tableOfContents =
|
tableOfContents =
|
||||||
let
|
let
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
doc_nix = $(nix_PATH)
|
doc_nix = $(nix_PATH)
|
||||||
|
|
||||||
MANUAL_SRCS := \
|
MANUAL_SRCS := \
|
||||||
$(call rwildcard, $(d)/src, *.md) \
|
$(call rwildcard, $(d)/source, *.md) \
|
||||||
$(call rwildcard, $(d)/src, */*.md)
|
$(call rwildcard, $(d)/source, */*.md)
|
||||||
|
|
||||||
man-pages := $(foreach n, \
|
man-pages := $(foreach n, \
|
||||||
nix-env.1 nix-store.1 \
|
nix-env.1 nix-store.1 \
|
||||||
|
@ -18,11 +18,11 @@ man-pages := $(foreach n, \
|
||||||
, $(d)/$(n))
|
, $(d)/$(n))
|
||||||
|
|
||||||
# man pages for subcommands
|
# man pages for subcommands
|
||||||
# convert from `$(d)/src/command-ref/nix-{1}/{2}.md` to `$(d)/nix-{1}-{2}.1`
|
# convert from `$(d)/source/command-ref/nix-{1}/{2}.md` to `$(d)/nix-{1}-{2}.1`
|
||||||
# FIXME: unify with how nix3-cli man pages are generated
|
# FIXME: unify with how nix3-cli man pages are generated
|
||||||
man-pages += $(foreach subcommand, \
|
man-pages += $(foreach subcommand, \
|
||||||
$(filter-out %opt-common.md %env-common.md, $(wildcard $(d)/src/command-ref/nix-*/*.md)), \
|
$(filter-out %opt-common.md %env-common.md, $(wildcard $(d)/source/command-ref/nix-*/*.md)), \
|
||||||
$(d)/$(subst /,-,$(subst $(d)/src/command-ref/,,$(subst .md,.1,$(subcommand)))))
|
$(d)/$(subst /,-,$(subst $(d)/source/command-ref/,,$(subst .md,.1,$(subcommand)))))
|
||||||
|
|
||||||
clean-files += $(d)/*.1 $(d)/*.5 $(d)/*.8
|
clean-files += $(d)/*.1 $(d)/*.5 $(d)/*.8
|
||||||
|
|
||||||
|
@ -49,11 +49,11 @@ define process-includes
|
||||||
done < <(grep '{{#include' $(1))
|
done < <(grep '{{#include' $(1))
|
||||||
endef
|
endef
|
||||||
|
|
||||||
$(d)/nix-env-%.1: $(d)/src/command-ref/nix-env/%.md
|
$(d)/nix-env-%.1: $(d)/source/command-ref/nix-env/%.md
|
||||||
@printf "Title: %s\n\n" "$(subst nix-env-,nix-env --,$$(basename "$@" .1))" > $^.tmp
|
@printf "Title: %s\n\n" "$(subst nix-env-,nix-env --,$$(basename "$@" .1))" > $^.tmp
|
||||||
$(render-subcommand)
|
$(render-subcommand)
|
||||||
|
|
||||||
$(d)/nix-store-%.1: $(d)/src/command-ref/nix-store/%.md
|
$(d)/nix-store-%.1: $(d)/source/command-ref/nix-store/%.md
|
||||||
@printf -- 'Title: %s\n\n' "$(subst nix-store-,nix-store --,$$(basename "$@" .1))" > $^.tmp
|
@printf -- 'Title: %s\n\n' "$(subst nix-store-,nix-store --,$$(basename "$@" .1))" > $^.tmp
|
||||||
$(render-subcommand)
|
$(render-subcommand)
|
||||||
|
|
||||||
|
@ -69,50 +69,50 @@ define render-subcommand
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
||||||
$(d)/%.1: $(d)/src/command-ref/%.md
|
$(d)/%.1: $(d)/source/command-ref/%.md
|
||||||
@printf "Title: %s\n\n" "$$(basename $@ .1)" > $^.tmp
|
@printf "Title: %s\n\n" "$$(basename $@ .1)" > $^.tmp
|
||||||
@cat $^ >> $^.tmp
|
@cat $^ >> $^.tmp
|
||||||
@$(call process-includes,$^,$^.tmp)
|
@$(call process-includes,$^,$^.tmp)
|
||||||
$(trace-gen) lowdown -sT man --nroff-nolinks -M section=1 $^.tmp -o $@
|
$(trace-gen) lowdown -sT man --nroff-nolinks -M section=1 $^.tmp -o $@
|
||||||
@rm $^.tmp
|
@rm $^.tmp
|
||||||
|
|
||||||
$(d)/%.8: $(d)/src/command-ref/%.md
|
$(d)/%.8: $(d)/source/command-ref/%.md
|
||||||
@printf "Title: %s\n\n" "$$(basename $@ .8)" > $^.tmp
|
@printf "Title: %s\n\n" "$$(basename $@ .8)" > $^.tmp
|
||||||
@cat $^ >> $^.tmp
|
@cat $^ >> $^.tmp
|
||||||
$(trace-gen) lowdown -sT man --nroff-nolinks -M section=8 $^.tmp -o $@
|
$(trace-gen) lowdown -sT man --nroff-nolinks -M section=8 $^.tmp -o $@
|
||||||
@rm $^.tmp
|
@rm $^.tmp
|
||||||
|
|
||||||
$(d)/nix.conf.5: $(d)/src/command-ref/conf-file.md
|
$(d)/nix.conf.5: $(d)/source/command-ref/conf-file.md
|
||||||
@printf "Title: %s\n\n" "$$(basename $@ .5)" > $^.tmp
|
@printf "Title: %s\n\n" "$$(basename $@ .5)" > $^.tmp
|
||||||
@cat $^ >> $^.tmp
|
@cat $^ >> $^.tmp
|
||||||
@$(call process-includes,$^,$^.tmp)
|
@$(call process-includes,$^,$^.tmp)
|
||||||
$(trace-gen) lowdown -sT man --nroff-nolinks -M section=5 $^.tmp -o $@
|
$(trace-gen) lowdown -sT man --nroff-nolinks -M section=5 $^.tmp -o $@
|
||||||
@rm $^.tmp
|
@rm $^.tmp
|
||||||
|
|
||||||
$(d)/nix-profiles.5: $(d)/src/command-ref/files/profiles.md
|
$(d)/nix-profiles.5: $(d)/source/command-ref/files/profiles.md
|
||||||
@printf "Title: %s\n\n" "$$(basename $@ .5)" > $^.tmp
|
@printf "Title: %s\n\n" "$$(basename $@ .5)" > $^.tmp
|
||||||
@cat $^ >> $^.tmp
|
@cat $^ >> $^.tmp
|
||||||
$(trace-gen) lowdown -sT man --nroff-nolinks -M section=5 $^.tmp -o $@
|
$(trace-gen) lowdown -sT man --nroff-nolinks -M section=5 $^.tmp -o $@
|
||||||
@rm $^.tmp
|
@rm $^.tmp
|
||||||
|
|
||||||
$(d)/src/SUMMARY.md: $(d)/src/SUMMARY.md.in $(d)/src/SUMMARY-rl-next.md $(d)/src/store/types $(d)/src/command-ref/new-cli $(d)/src/development/experimental-feature-descriptions.md
|
$(d)/source/SUMMARY.md: $(d)/source/SUMMARY.md.in $(d)/source/SUMMARY-rl-next.md $(d)/source/store/types $(d)/source/command-ref/new-cli $(d)/source/development/experimental-feature-descriptions.md
|
||||||
@cp $< $@
|
@cp $< $@
|
||||||
@$(call process-includes,$@,$@)
|
@$(call process-includes,$@,$@)
|
||||||
|
|
||||||
$(d)/src/store/types: $(d)/nix.json $(d)/utils.nix $(d)/generate-store-info.nix $(d)/generate-store-types.nix $(d)/src/store/types/index.md.in $(doc_nix)
|
$(d)/source/store/types: $(d)/nix.json $(d)/utils.nix $(d)/generate-store-info.nix $(d)/generate-store-types.nix $(d)/source/store/types/index.md.in $(doc_nix)
|
||||||
@# FIXME: build out of tree!
|
@# FIXME: build out of tree!
|
||||||
@rm -rf $@.tmp
|
@rm -rf $@.tmp
|
||||||
$(trace-gen) $(nix-eval) --write-to $@.tmp --expr 'import doc/manual/generate-store-types.nix (builtins.fromJSON (builtins.readFile $<)).stores'
|
$(trace-gen) $(nix-eval) --write-to $@.tmp --expr 'import doc/manual/generate-store-types.nix (builtins.fromJSON (builtins.readFile $<)).stores'
|
||||||
@# do not destroy existing contents
|
@# do not destroy existing contents
|
||||||
@mv $@.tmp/* $@/
|
@mv $@.tmp/* $@/
|
||||||
|
|
||||||
$(d)/src/command-ref/new-cli: $(d)/nix.json $(d)/utils.nix $(d)/generate-manpage.nix $(d)/generate-settings.nix $(d)/generate-store-info.nix $(doc_nix)
|
$(d)/source/command-ref/new-cli: $(d)/nix.json $(d)/utils.nix $(d)/generate-manpage.nix $(d)/generate-settings.nix $(d)/generate-store-info.nix $(doc_nix)
|
||||||
@rm -rf $@ $@.tmp
|
@rm -rf $@ $@.tmp
|
||||||
$(trace-gen) $(nix-eval) --write-to $@.tmp --expr 'import doc/manual/generate-manpage.nix true (builtins.readFile $<)'
|
$(trace-gen) $(nix-eval) --write-to $@.tmp --expr 'import doc/manual/generate-manpage.nix true (builtins.readFile $<)'
|
||||||
@mv $@.tmp $@
|
@mv $@.tmp $@
|
||||||
|
|
||||||
$(d)/src/command-ref/conf-file.md: $(d)/conf-file.json $(d)/utils.nix $(d)/generate-settings.nix $(d)/src/command-ref/conf-file-prefix.md $(d)/src/command-ref/experimental-features-shortlist.md $(doc_nix)
|
$(d)/source/command-ref/conf-file.md: $(d)/conf-file.json $(d)/utils.nix $(d)/generate-settings.nix $(d)/source/command-ref/conf-file-prefix.md $(d)/source/command-ref/experimental-features-shortlist.md $(doc_nix)
|
||||||
@cat doc/manual/src/command-ref/conf-file-prefix.md > $@.tmp
|
@cat doc/manual/source/command-ref/conf-file-prefix.md > $@.tmp
|
||||||
$(trace-gen) $(nix-eval) --expr 'import doc/manual/generate-settings.nix { prefix = "conf"; } (builtins.fromJSON (builtins.readFile $<))' >> $@.tmp;
|
$(trace-gen) $(nix-eval) --expr 'import doc/manual/generate-settings.nix { prefix = "conf"; } (builtins.fromJSON (builtins.readFile $<))' >> $@.tmp;
|
||||||
@mv $@.tmp $@
|
@mv $@.tmp $@
|
||||||
|
|
||||||
|
@ -124,12 +124,12 @@ $(d)/conf-file.json: $(doc_nix)
|
||||||
$(trace-gen) $(dummy-env) $(doc_nix) config show --json --experimental-features nix-command > $@.tmp
|
$(trace-gen) $(dummy-env) $(doc_nix) config show --json --experimental-features nix-command > $@.tmp
|
||||||
@mv $@.tmp $@
|
@mv $@.tmp $@
|
||||||
|
|
||||||
$(d)/src/development/experimental-feature-descriptions.md: $(d)/xp-features.json $(d)/utils.nix $(d)/generate-xp-features.nix $(doc_nix)
|
$(d)/source/development/experimental-feature-descriptions.md: $(d)/xp-features.json $(d)/utils.nix $(d)/generate-xp-features.nix $(doc_nix)
|
||||||
@rm -rf $@ $@.tmp
|
@rm -rf $@ $@.tmp
|
||||||
$(trace-gen) $(nix-eval) --write-to $@.tmp --expr 'import doc/manual/generate-xp-features.nix (builtins.fromJSON (builtins.readFile $<))'
|
$(trace-gen) $(nix-eval) --write-to $@.tmp --expr 'import doc/manual/generate-xp-features.nix (builtins.fromJSON (builtins.readFile $<))'
|
||||||
@mv $@.tmp $@
|
@mv $@.tmp $@
|
||||||
|
|
||||||
$(d)/src/command-ref/experimental-features-shortlist.md: $(d)/xp-features.json $(d)/utils.nix $(d)/generate-xp-features-shortlist.nix $(doc_nix)
|
$(d)/source/command-ref/experimental-features-shortlist.md: $(d)/xp-features.json $(d)/utils.nix $(d)/generate-xp-features-shortlist.nix $(doc_nix)
|
||||||
@rm -rf $@ $@.tmp
|
@rm -rf $@ $@.tmp
|
||||||
$(trace-gen) $(nix-eval) --write-to $@.tmp --expr 'import doc/manual/generate-xp-features-shortlist.nix (builtins.fromJSON (builtins.readFile $<))'
|
$(trace-gen) $(nix-eval) --write-to $@.tmp --expr 'import doc/manual/generate-xp-features-shortlist.nix (builtins.fromJSON (builtins.readFile $<))'
|
||||||
@mv $@.tmp $@
|
@mv $@.tmp $@
|
||||||
|
@ -138,10 +138,10 @@ $(d)/xp-features.json: $(doc_nix)
|
||||||
$(trace-gen) $(dummy-env) $(doc_nix) __dump-xp-features > $@.tmp
|
$(trace-gen) $(dummy-env) $(doc_nix) __dump-xp-features > $@.tmp
|
||||||
@mv $@.tmp $@
|
@mv $@.tmp $@
|
||||||
|
|
||||||
$(d)/src/language/builtins.md: $(d)/language.json $(d)/generate-builtins.nix $(d)/src/language/builtins-prefix.md $(doc_nix)
|
$(d)/source/language/builtins.md: $(d)/language.json $(d)/generate-builtins.nix $(d)/source/language/builtins-prefix.md $(doc_nix)
|
||||||
@cat doc/manual/src/language/builtins-prefix.md > $@.tmp
|
@cat doc/manual/source/language/builtins-prefix.md > $@.tmp
|
||||||
$(trace-gen) $(nix-eval) --expr 'import doc/manual/generate-builtins.nix (builtins.fromJSON (builtins.readFile $<))' >> $@.tmp;
|
$(trace-gen) $(nix-eval) --expr 'import doc/manual/generate-builtins.nix (builtins.fromJSON (builtins.readFile $<))' >> $@.tmp;
|
||||||
@cat doc/manual/src/language/builtins-suffix.md >> $@.tmp
|
@cat doc/manual/source/language/builtins-suffix.md >> $@.tmp
|
||||||
@mv $@.tmp $@
|
@mv $@.tmp $@
|
||||||
|
|
||||||
$(d)/language.json: $(doc_nix)
|
$(d)/language.json: $(doc_nix)
|
||||||
|
@ -149,7 +149,7 @@ $(d)/language.json: $(doc_nix)
|
||||||
@mv $@.tmp $@
|
@mv $@.tmp $@
|
||||||
|
|
||||||
# Generate "Upcoming release" notes (or clear it and remove from menu)
|
# Generate "Upcoming release" notes (or clear it and remove from menu)
|
||||||
$(d)/src/release-notes/rl-next.md: $(d)/rl-next $(d)/rl-next/*
|
$(d)/source/release-notes/rl-next.md: $(d)/rl-next $(d)/rl-next/*
|
||||||
@if type -p changelog-d > /dev/null; then \
|
@if type -p changelog-d > /dev/null; then \
|
||||||
echo " GEN " $@; \
|
echo " GEN " $@; \
|
||||||
changelog-d doc/manual/rl-next > $@; \
|
changelog-d doc/manual/rl-next > $@; \
|
||||||
|
@ -158,7 +158,7 @@ $(d)/src/release-notes/rl-next.md: $(d)/rl-next $(d)/rl-next/*
|
||||||
true > $@; \
|
true > $@; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$(d)/src/SUMMARY-rl-next.md: $(d)/src/release-notes/rl-next.md
|
$(d)/source/SUMMARY-rl-next.md: $(d)/source/release-notes/rl-next.md
|
||||||
$(trace-gen) true
|
$(trace-gen) true
|
||||||
@if [ -s $< ]; then \
|
@if [ -s $< ]; then \
|
||||||
echo ' - [Upcoming release](release-notes/rl-next.md)' > $@; \
|
echo ' - [Upcoming release](release-notes/rl-next.md)' > $@; \
|
||||||
|
@ -194,9 +194,9 @@ $(mandir)/man1/nix3-manpages: doc/manual/generated/man1/nix3-manpages
|
||||||
@mkdir -p $(DESTDIR)$$(dirname $@)
|
@mkdir -p $(DESTDIR)$$(dirname $@)
|
||||||
$(trace-install) install -m 0644 $$(dirname $<)/* $(DESTDIR)$$(dirname $@)
|
$(trace-install) install -m 0644 $$(dirname $<)/* $(DESTDIR)$$(dirname $@)
|
||||||
|
|
||||||
doc/manual/generated/man1/nix3-manpages: $(d)/src/command-ref/new-cli
|
doc/manual/generated/man1/nix3-manpages: $(d)/source/command-ref/new-cli
|
||||||
@mkdir -p $(DESTDIR)$$(dirname $@)
|
@mkdir -p $(DESTDIR)$$(dirname $@)
|
||||||
$(trace-gen) for i in doc/manual/src/command-ref/new-cli/*.md; do \
|
$(trace-gen) for i in doc/manual/source/command-ref/new-cli/*.md; do \
|
||||||
name=$$(basename $$i .md); \
|
name=$$(basename $$i .md); \
|
||||||
tmpFile=$$(mktemp); \
|
tmpFile=$$(mktemp); \
|
||||||
if [[ $$name = SUMMARY ]]; then continue; fi; \
|
if [[ $$name = SUMMARY ]]; then continue; fi; \
|
||||||
|
@ -211,7 +211,7 @@ doc/manual/generated/man1/nix3-manpages: $(d)/src/command-ref/new-cli
|
||||||
# `@docroot@` is to be preserved for documenting the mechanism
|
# `@docroot@` is to be preserved for documenting the mechanism
|
||||||
# FIXME: maybe contributing guides should live right next to the code
|
# FIXME: maybe contributing guides should live right next to the code
|
||||||
# instead of in the manual
|
# instead of in the manual
|
||||||
$(docdir)/manual/index.html: $(MANUAL_SRCS) $(d)/book.toml $(d)/anchors.jq $(d)/custom.css $(d)/src/SUMMARY.md $(d)/src/store/types $(d)/src/command-ref/new-cli $(d)/src/development/experimental-feature-descriptions.md $(d)/src/command-ref/conf-file.md $(d)/src/language/builtins.md $(d)/src/release-notes/rl-next.md $(d)/src/figures $(d)/src/favicon.png $(d)/src/favicon.svg
|
$(docdir)/manual/index.html: $(MANUAL_SRCS) $(d)/book.toml $(d)/anchors.jq $(d)/custom.css $(d)/source/SUMMARY.md $(d)/source/store/types $(d)/source/command-ref/new-cli $(d)/source/development/experimental-feature-descriptions.md $(d)/source/command-ref/conf-file.md $(d)/source/language/builtins.md $(d)/source/release-notes/rl-next.md $(d)/source/figures $(d)/source/favicon.png $(d)/source/favicon.svg
|
||||||
$(trace-gen) \
|
$(trace-gen) \
|
||||||
tmp="$$(mktemp -d)"; \
|
tmp="$$(mktemp -d)"; \
|
||||||
cp -r doc/manual "$$tmp"; \
|
cp -r doc/manual "$$tmp"; \
|
||||||
|
@ -219,14 +219,14 @@ $(docdir)/manual/index.html: $(MANUAL_SRCS) $(d)/book.toml $(d)/anchors.jq $(d)/
|
||||||
$(call process-includes,$$file,$$file); \
|
$(call process-includes,$$file,$$file); \
|
||||||
done; \
|
done; \
|
||||||
find "$$tmp" -name '*.md' ! -name 'documentation.md' | while read -r file; do \
|
find "$$tmp" -name '*.md' ! -name 'documentation.md' | while read -r file; do \
|
||||||
docroot="$$(realpath --relative-to="$$(dirname "$$file")" $$tmp/manual/src)"; \
|
docroot="$$(realpath --relative-to="$$(dirname "$$file")" $$tmp/manual/source)"; \
|
||||||
sed -i "s,@docroot@,$$docroot,g" "$$file"; \
|
sed -i "s,@docroot@,$$docroot,g" "$$file"; \
|
||||||
done; \
|
done; \
|
||||||
set -euo pipefail; \
|
set -euo pipefail; \
|
||||||
( \
|
( \
|
||||||
cd "$$tmp/manual"; \
|
cd "$$tmp/manual"; \
|
||||||
RUST_LOG=warn \
|
RUST_LOG=warn \
|
||||||
MDBOOK_SUBSTITUTE_SEARCH=$(d)/src \
|
MDBOOK_SUBSTITUTE_SEARCH=$(d)/source \
|
||||||
mdbook build -d $(DESTDIR)$(docdir)/manual.tmp 2>&1 \
|
mdbook build -d $(DESTDIR)$(docdir)/manual.tmp 2>&1 \
|
||||||
| { grep -Fv "because fragment resolution isn't implemented" || :; } \
|
| { grep -Fv "because fragment resolution isn't implemented" || :; } \
|
||||||
); \
|
); \
|
||||||
|
|
|
@ -55,16 +55,16 @@ generate_manual_deps = files(
|
||||||
)
|
)
|
||||||
|
|
||||||
# Generates types
|
# Generates types
|
||||||
subdir('src/store')
|
subdir('source/store')
|
||||||
# Generates builtins.md and builtin-constants.md.
|
# Generates builtins.md and builtin-constants.md.
|
||||||
subdir('src/language')
|
subdir('source/language')
|
||||||
# Generates new-cli pages, experimental-features-shortlist.md, and conf-file.md.
|
# Generates new-cli pages, experimental-features-shortlist.md, and conf-file.md.
|
||||||
subdir('src/command-ref')
|
subdir('source/command-ref')
|
||||||
# Generates experimental-feature-descriptions.md.
|
# Generates experimental-feature-descriptions.md.
|
||||||
subdir('src/development')
|
subdir('source/development')
|
||||||
# Generates rl-next-generated.md.
|
# Generates rl-next-generated.md.
|
||||||
subdir('src/release-notes')
|
subdir('source/release-notes')
|
||||||
subdir('src')
|
subdir('source')
|
||||||
|
|
||||||
# Hacky way to figure out if `nix` is an `ExternalProgram` or
|
# Hacky way to figure out if `nix` is an `ExternalProgram` or
|
||||||
# `Exectuable`. Only the latter can occur in custom target input lists.
|
# `Exectuable`. Only the latter can occur in custom target input lists.
|
||||||
|
@ -82,7 +82,7 @@ manual = custom_target(
|
||||||
'-c',
|
'-c',
|
||||||
'''
|
'''
|
||||||
@0@ @INPUT0@ @CURRENT_SOURCE_DIR@ > @DEPFILE@
|
@0@ @INPUT0@ @CURRENT_SOURCE_DIR@ > @DEPFILE@
|
||||||
@0@ @INPUT1@ summary @2@ < @CURRENT_SOURCE_DIR@/src/SUMMARY.md.in > @2@/src/SUMMARY.md
|
@0@ @INPUT1@ summary @2@ < @CURRENT_SOURCE_DIR@/source/SUMMARY.md.in > @2@/source/SUMMARY.md
|
||||||
rsync -r --include='*.md' @CURRENT_SOURCE_DIR@/ @2@/
|
rsync -r --include='*.md' @CURRENT_SOURCE_DIR@/ @2@/
|
||||||
(cd @2@; RUST_LOG=warn @1@ build -d @2@ 3>&2 2>&1 1>&3) | { grep -Fv "because fragment resolution isn't implemented" || :; } 3>&2 2>&1 1>&3
|
(cd @2@; RUST_LOG=warn @1@ build -d @2@ 3>&2 2>&1 1>&3) | { grep -Fv "because fragment resolution isn't implemented" || :; } 3>&2 2>&1 1>&3
|
||||||
rm -rf @2@/manual
|
rm -rf @2@/manual
|
||||||
|
@ -117,7 +117,7 @@ manual = custom_target(
|
||||||
depfile : 'manual.d',
|
depfile : 'manual.d',
|
||||||
env : {
|
env : {
|
||||||
'RUST_LOG': 'info',
|
'RUST_LOG': 'info',
|
||||||
'MDBOOK_SUBSTITUTE_SEARCH': meson.current_build_dir() / 'src',
|
'MDBOOK_SUBSTITUTE_SEARCH': meson.current_build_dir() / 'source',
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
manual_html = manual[0]
|
manual_html = manual[0]
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// redirect rules for URL fragments (client-side) to prevent link rot.
|
// redirect rules for URL fragments (client-side) to prevent link rot.
|
||||||
// this must be done on the client side, as web servers do not see the fragment part of the URL.
|
// this must be done on the client side, as web servers do not see the fragment part of the URL.
|
||||||
// it will only work with JavaScript enabled in the browser, but this is the best we can do here.
|
// it will only work with JavaScript enabled in the browser, but this is the best we can do here.
|
||||||
// see src/_redirects for path redirects (server-side)
|
// see source/_redirects for path redirects (server-side)
|
||||||
|
|
||||||
// redirects are declared as follows:
|
// redirects are declared as follows:
|
||||||
// each entry has as its key a path matching the requested URL path, relative to the mdBook document root.
|
// each entry has as its key a path matching the requested URL path, relative to the mdBook document root.
|
||||||
|
|
108
doc/manual/source/advanced-topics/distributed-builds.md
Normal file
108
doc/manual/source/advanced-topics/distributed-builds.md
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
# Remote Builds
|
||||||
|
|
||||||
|
A local Nix installation can forward Nix builds to other machines,
|
||||||
|
this allows multiple builds to be performed in parallel.
|
||||||
|
|
||||||
|
Remote builds also allow Nix to perform multi-platform builds in a
|
||||||
|
semi-transparent way. For example, if you perform a build for a
|
||||||
|
`x86_64-darwin` on an `i686-linux` machine, Nix can automatically
|
||||||
|
forward the build to a `x86_64-darwin` machine, if one is available.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
For a local machine to forward a build to a remote machine, the remote machine must:
|
||||||
|
|
||||||
|
- Have Nix installed
|
||||||
|
- Be running an SSH server, e.g. `sshd`
|
||||||
|
- Be accessible via SSH from the local machine over the network
|
||||||
|
- Have the local machine's public SSH key in `/etc/ssh/authorized_keys.d/<username>`
|
||||||
|
- Have the username of the SSH user in the `trusted-users` setting in `nix.conf`
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
To test connecting to a remote Nix instance (in this case `mac`), run:
|
||||||
|
|
||||||
|
```console
|
||||||
|
nix store info --store ssh://username@mac
|
||||||
|
```
|
||||||
|
|
||||||
|
To specify an SSH identity file as part of the remote store URI add a
|
||||||
|
query paramater, e.g.
|
||||||
|
|
||||||
|
```console
|
||||||
|
nix store info --store ssh://username@mac?ssh-key=/home/alice/my-key
|
||||||
|
```
|
||||||
|
|
||||||
|
Since builds should be non-interactive, the key should not have a
|
||||||
|
passphrase. Alternatively, you can load identities ahead of time into
|
||||||
|
`ssh-agent` or `gpg-agent`.
|
||||||
|
|
||||||
|
In a multi-user installation (default), builds are executed by the Nix
|
||||||
|
Daemon. The Nix Daemon cannot prompt for a passphrase via the terminal
|
||||||
|
or `ssh-agent`, so the SSH key must not have a passphrase.
|
||||||
|
|
||||||
|
In addition, the Nix Daemon's user (typically root) needs to have SSH
|
||||||
|
access to the remote builder.
|
||||||
|
|
||||||
|
Access can be verified by running `sudo su`, and then validating SSH
|
||||||
|
access, e.g. by running `ssh mac`. SSH identity files for root users
|
||||||
|
are usually stored in `/root/.ssh/` (Linux) or `/var/root/.ssh` (MacOS).
|
||||||
|
|
||||||
|
If you get the error
|
||||||
|
|
||||||
|
```console
|
||||||
|
bash: nix: command not found
|
||||||
|
error: cannot connect to 'mac'
|
||||||
|
```
|
||||||
|
|
||||||
|
then you need to ensure that the `PATH` of non-interactive login shells
|
||||||
|
contains Nix.
|
||||||
|
|
||||||
|
The [list of remote build machines](@docroot@/command-ref/conf-file.md#conf-builders) can be specified on the command line or in the Nix configuration file.
|
||||||
|
For example, the following command allows you to build a derivation for `x86_64-darwin` on a Linux machine:
|
||||||
|
|
||||||
|
```console
|
||||||
|
uname
|
||||||
|
```
|
||||||
|
|
||||||
|
```console
|
||||||
|
Linux
|
||||||
|
```
|
||||||
|
|
||||||
|
```console
|
||||||
|
nix build --impure \
|
||||||
|
--expr '(with import <nixpkgs> { system = "x86_64-darwin"; }; runCommand "foo" {} "uname > $out")' \
|
||||||
|
--builders 'ssh://mac x86_64-darwin'
|
||||||
|
```
|
||||||
|
|
||||||
|
```console
|
||||||
|
[1/0/1 built, 0.0 MiB DL] building foo on ssh://mac
|
||||||
|
```
|
||||||
|
|
||||||
|
```console
|
||||||
|
cat ./result
|
||||||
|
```
|
||||||
|
|
||||||
|
```console
|
||||||
|
Darwin
|
||||||
|
```
|
||||||
|
|
||||||
|
It is possible to specify multiple build machines separated by a semicolon or a newline, e.g.
|
||||||
|
|
||||||
|
```console
|
||||||
|
--builders 'ssh://mac x86_64-darwin ; ssh://beastie x86_64-freebsd'
|
||||||
|
```
|
||||||
|
|
||||||
|
Remote build machines can also be configured in [`nix.conf`](@docroot@/command-ref/conf-file.md), e.g.
|
||||||
|
|
||||||
|
builders = ssh://mac x86_64-darwin ; ssh://beastie x86_64-freebsd
|
||||||
|
|
||||||
|
After making changes to `nix.conf`, restart the Nix daemon for changes to take effect.
|
||||||
|
|
||||||
|
Finally, remote build machines can be configured in a separate configuration
|
||||||
|
file included in `builders` via the syntax `@/path/to/file`. For example,
|
||||||
|
|
||||||
|
builders = @/etc/nix/machines
|
||||||
|
|
||||||
|
causes the list of machines in `/etc/nix/machines` to be included.
|
||||||
|
(This is the default.)
|
|
@ -35,7 +35,7 @@ In order to reflect changes to the [Makefile for the manual], clear all generate
|
||||||
[Makefile for the manual]: https://github.com/NixOS/nix/blob/master/doc/manual/local.mk
|
[Makefile for the manual]: https://github.com/NixOS/nix/blob/master/doc/manual/local.mk
|
||||||
|
|
||||||
```console
|
```console
|
||||||
rm $(git ls-files doc/manual/ -o | grep -F '.md') && rmdir doc/manual/src/command-ref/new-cli && make manual-html -j $NIX_BUILD_CORES
|
rm $(git ls-files doc/manual/ -o | grep -F '.md') && rmdir doc/manual/source/command-ref/new-cli && make manual-html -j $NIX_BUILD_CORES
|
||||||
```
|
```
|
||||||
|
|
||||||
## Style guide
|
## Style guide
|
||||||
|
@ -182,7 +182,7 @@ Please observe these guidelines to ease reviews:
|
||||||
|
|
||||||
`@docroot@` provides a base path for links that occur in reusable snippets or other documentation that doesn't have a base path of its own.
|
`@docroot@` provides a base path for links that occur in reusable snippets or other documentation that doesn't have a base path of its own.
|
||||||
|
|
||||||
If a broken link occurs in a snippet that was inserted into multiple generated files in different directories, use `@docroot@` to reference the `doc/manual/src` directory.
|
If a broken link occurs in a snippet that was inserted into multiple generated files in different directories, use `@docroot@` to reference the `doc/manual/source` directory.
|
||||||
|
|
||||||
If the `@docroot@` literal appears in an error message from the [`mdbook-linkcheck`] tool, the `@docroot@` replacement needs to be applied to the generated source file that mentions it.
|
If the `@docroot@` literal appears in an error message from the [`mdbook-linkcheck`] tool, the `@docroot@` replacement needs to be applied to the generated source file that mentions it.
|
||||||
See existing `@docroot@` logic in the [Makefile for the manual].
|
See existing `@docroot@` logic in the [Makefile for the manual].
|
|
@ -60,10 +60,10 @@ The unit tests are defined using the [googletest] and [rapidcheck] frameworks.
|
||||||
> ```
|
> ```
|
||||||
|
|
||||||
The tests for each Nix library (`libnixexpr`, `libnixstore`, etc..) live inside a directory `src/${library_name_without-nix}-test`.
|
The tests for each Nix library (`libnixexpr`, `libnixstore`, etc..) live inside a directory `src/${library_name_without-nix}-test`.
|
||||||
Given an interface (header) and implementation pair in the original library, say, `src/libexpr/value/context.{hh,cc}`, we write tests for it in `src/nix-expr-tests/value/context.cc`, and (possibly) declare/define additional interfaces for testing purposes in `src/nix-expr-test-support/tests/value/context.{hh,cc}`.
|
Given an interface (header) and implementation pair in the original library, say, `src/libexpr/value/context.{hh,cc}`, we write tests for it in `src/libexpr-tests/value/context.cc`, and (possibly) declare/define additional interfaces for testing purposes in `src/libexpr-test-support/tests/value/context.{hh,cc}`.
|
||||||
|
|
||||||
Data for unit tests is stored in a `data` subdir of the directory for each unit test executable.
|
Data for unit tests is stored in a `data` subdir of the directory for each unit test executable.
|
||||||
For example, `libnixstore` code is in `src/libstore`, and its test data is in `src/nix-store-tests/data`.
|
For example, `libnixstore` code is in `src/libstore`, and its test data is in `src/libstore-tests/data`.
|
||||||
The path to the `src/${library_name_without-nix}-test/data` directory is passed to the unit test executable with the environment variable `_NIX_TEST_UNIT_DATA`.
|
The path to the `src/${library_name_without-nix}-test/data` directory is passed to the unit test executable with the environment variable `_NIX_TEST_UNIT_DATA`.
|
||||||
Note that each executable only gets the data for its tests.
|
Note that each executable only gets the data for its tests.
|
||||||
|
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue