guix-play/guix/build
Ludovic Courtès 4ff12d1de7
profiles: Do not repeat entries in 'manifest' file.
Fixes <https://issues.guix.gnu.org/55499>.
Reported by Ricardo Wurmus <rekado@elephly.net>.

With this change, the manifest file created for:

  guix install r r-seurat r-cistopic r-monocle3 r-cicero-monocle3 r-assertthat

goes from 5.7M to 176K.  Likewise, on this profile, wall-clock time of:

  GUIX_PROFILING=gc guix package -I

goes from 0.7s to 0.1s, with heap usage going from 55M to 9M.

* guix/profiles.scm (manifest->gexp)[optional]: New procedure.
[entry->gexp]: Turn into a monadic procedure.  Return a 'repeated' sexp
if ENTRY was already visited before.
Adjust caller accordingly.  Bump manifest version.
(sexp->manifest)[sexp->manifest-entry]: Turn into a monadic procedure.
Add case for 'repeated' nodes.  Add each entry to the current state
vhash.
Add clause for version 4 manifests.
[sexp->manifest-entry/v3]: New procedure, with former
'sexp->manifest-entry' code.
* tests/profiles.scm ("deduplication of repeated entries"): New test.
* guix/build/profiles.scm (manifest-sexp->inputs+search-paths)[let-fields]:
New macro.
Use it.  Expect version 4.  Add clause for 'repeated' nodes.
2022-07-01 23:29:16 +02:00
..
maven guix: maven: Fix java parser. 2022-02-05 20:16:32 +01:00
android-ndk-build-system.scm
android-repo.scm
ant-build-system.scm
asdf-build-system.scm doc, gnu, guix: Fix typos. 2021-06-13 23:57:45 +02:00
bournish.scm
bzr.scm gnu: bazaar: Obsolete with breezy. 2022-05-31 14:54:02 -04:00
cargo-build-system.scm build-system/cargo: Don't clobber packaged crates while building. 2021-03-15 15:53:11 +02:00
cargo-utils.scm
chicken-build-system.scm build-system: chicken: Add version information to eggs if missing. 2022-06-21 21:41:32 +02:00
clojure-build-system.scm build-system/clojure: Support compiling Java. 2022-01-24 10:38:14 +01:00
clojure-utils.scm build-system/clojure: Support compiling Java. 2022-01-24 10:38:14 +01:00
cmake-build-system.scm
compile.scm compile: Really disable cross-module inlining and related features. 2022-01-23 23:03:33 +01:00
copy-build-system.scm build-system/copy: Avoid use of 'set!'. 2021-05-04 18:33:20 +03:00
cvs.scm
debug-link.scm
download-nar.scm
download.scm download: Fix typo in procedure name. 2022-03-03 23:57:01 +01:00
dub-build-system.scm build-system/dub: Don't expect ‘.dub/dub.json’. 2022-06-19 02:00:00 +02:00
dune-build-system.scm guix: dune-build-system: Put dune into a reproducible release mode. 2021-09-08 13:39:27 +02:00
elm-build-system.scm guix: Add elm-build-system. 2022-05-22 01:07:51 +02:00
emacs-build-system.scm build-system: emacs: Ensure that package descriptions are generated. 2022-01-29 08:45:06 +01:00
emacs-utils.scm guix: emacs-utils: Add emacs-header-parse. 2022-06-17 23:39:32 +02:00
font-build-system.scm
git.scm
glib-or-gtk-build-system.scm build: glib-or-gtk: Generate the gdk-pixbuf-loaders cache file in a phase. 2021-11-11 12:18:19 -05:00
gnu-bootstrap.scm
gnu-build-system.scm build-system/gnu: Make gzip files writable before resetting timestamps. 2022-01-10 11:44:47 -05:00
gnu-dist.scm
go-build-system.scm build-system/go: Initialize build cache from input packages. 2021-12-24 16:32:25 -05:00
graft.scm grafts: Support rewriting UTF-16 and UTF-32 store references. 2021-04-15 03:22:55 -04:00
gremlin.scm gremlin: 'elf-dynamic-info' returns a file name rathern than a dynamic entry. 2021-04-22 14:04:27 +02:00
guile-build-system.scm
haskell-build-system.scm build-system/haskell: Explain failure. 2021-10-08 09:13:52 +02:00
hg.scm
java-utils.scm guix: java-utils: Look for actual jar files. 2021-06-22 13:10:36 +02:00
json.scm
julia-build-system.scm build: julia-build-system: Fix corner-case for parallel tests. 2022-02-24 12:20:32 +02:00
linux-module-build-system.scm build-system: linux-module: Don't explicitly return #t from phases. 2021-10-01 21:27:35 +02:00
lisp-utils.scm
make-bootstrap.scm
maven-build-system.scm guix: maven: Support fixing modules. 2021-06-22 13:10:28 +02:00
meson-build-system.scm build: meson: Replace the 'test-target' argument by 'test-options'. 2021-11-11 12:18:32 -05:00
meson-configuration.scm build-system/meson: Support cross-compilation. 2021-07-14 15:57:40 +02:00
minetest-build-system.scm build-system/minetest: Install config.txt and _config.txt. 2021-10-16 17:30:31 +02:00
minify-build-system.scm Merge branch 'master' into core-updates-frozen 2021-07-29 22:34:57 +02:00
node-build-system.scm guix: node-build-system: Add 'delete-dependencies' helper function. 2022-01-09 02:07:12 +01:00
ocaml-build-system.scm
pack.scm build: pack: Mute error output when checking if tar supports --sort. 2021-07-18 02:11:13 -04:00
perl-build-system.scm build-system/perl: Use invoke instead of system*. 2018-03-16 05:01:52 -04:00
po.scm maint: Factorize po xref translation. 2021-10-17 18:26:44 +02:00
profiles.scm profiles: Do not repeat entries in 'manifest' file. 2022-07-01 23:29:16 +02:00
python-build-system.scm python-build-system: Look up the interpreter in 'inputs'. 2021-06-04 22:34:31 +02:00
qt-build-system.scm Merge branch 'master' into core-updates 2021-07-18 19:50:01 +02:00
qt-utils.scm Merge branch 'master' into core-updates-frozen 2021-11-17 23:43:14 +01:00
r-build-system.scm
rakudo-build-system.scm rakudo-build-system: Look up the interpreter in 'inputs'. 2021-06-04 22:34:32 +02:00
rebar-build-system.scm build-system: Add 'rebar-build-system'. 2022-06-15 10:17:25 +02:00
renpy-build-system.scm guix: Modernize renpy-build-system. 2022-06-17 18:49:06 +02:00
ruby-build-system.scm
scons-build-system.scm
store-copy.scm build: Fix typo in file-size docstring. 2022-02-07 16:22:37 -05:00
svn.scm
syscalls.scm linux-container: Handle CLONE_NEWCGROUP and use it by default. 2022-01-05 23:44:18 +01:00
texlive-build-system.scm gnu: TeX Live: Use IniTeX to build a couple of packages 2021-07-21 15:55:26 +02:00
union.scm union: Do not warn about "ld.so.cache" collisions. 2021-09-25 18:52:05 +02:00
utils.scm utils: Fix wrap-script argument handling. 2022-01-10 11:44:29 -05:00
waf-build-system.scm