guix/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
bournish.scm
bzr.scm gnu: bazaar: Obsolete with breezy. 2022-05-31 14:54:02 -04:00
cargo-build-system.scm
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
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
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
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
gremlin.scm
guile-build-system.scm
haskell-build-system.scm
hg.scm
java-utils.scm
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
lisp-utils.scm
make-bootstrap.scm
maven-build-system.scm
meson-build-system.scm
meson-configuration.scm
minetest-build-system.scm
minify-build-system.scm
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
perl-build-system.scm
po.scm
profiles.scm profiles: Do not repeat entries in 'manifest' file. 2022-07-01 23:29:16 +02:00
python-build-system.scm
qt-build-system.scm
qt-utils.scm
r-build-system.scm
rakudo-build-system.scm
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
union.scm
utils.scm utils: Fix wrap-script argument handling. 2022-01-10 11:44:29 -05:00
waf-build-system.scm