guix/guix
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
..
build profiles: Do not repeat entries in 'manifest' file. 2022-07-01 23:29:16 +02:00
build-system build-system/dub: Use the gold linker. 2022-06-19 02:00:00 +02:00
import import: Add hex.pm importer. 2022-06-15 10:18:34 +02:00
platforms platforms: Remove the s390x platform. 2022-05-25 17:11:32 +02:00
scripts substitute: Use SRFI-71 instead of SRFI-11. 2022-06-26 23:19:14 +02:00
store guix: Remove duplicate definitions of dump-port. 2022-05-20 20:42:53 +02:00
tests
android-repo-download.scm
avahi.scm
base16.scm
base32.scm
base64.scm
build-system.scm
bzr-download.scm gnu: bazaar: Obsolete with breezy. 2022-05-31 14:54:02 -04:00
cache.scm cache: Catch invalid 'last-expiry-cleanup'. 2022-06-04 12:04:23 +02:00
channels.scm channels: Print backtrace when generating package cache fails. 2022-06-16 12:50:06 +02:00
ci.scm
colors.scm colors: Add 'colorize-full-matches'. 2022-04-19 18:07:49 +02:00
combinators.scm
config.scm.in
cpio.scm
cpu.scm guix: cpu: Add detection for aarch64 CPUs. 2022-05-17 15:19:41 +03:00
cve.scm
cvs-download.scm
d3.v3.js
deprecation.scm guix: Add define-deprecated/public-alias. 2022-04-12 20:32:32 +02:00
derivations.scm derivations: Coalesce inputs that have the same output path. 2022-03-07 22:49:27 +01:00
describe.scm
diagnostics.scm diagnostics: Fix typo about 0-indexed COL in location. 2022-05-31 14:52:14 -04:00
discovery.scm
docker.scm
download.scm download: Add a mirror for CTAN. 2022-05-12 12:45:49 -04:00
elf.scm
ftp-client.scm
gexp.scm gexp: Add 'references-file'. 2022-05-01 21:30:34 +02:00
git-authenticate.scm
git-download.scm git-download: Set locale to deal with Unicode in git metadata. 2022-04-20 23:46:43 +02:00
git.scm
glob.scm
gnu-maintenance.scm
gnupg.scm
grafts.scm
graph.js
graph.scm graph: Factorize 'lookup-backend'. 2022-03-18 16:03:33 +01:00
hash.scm
hg-download.scm
http-client.scm http-client: 'http-fetch/cached' converts strings to URIs. 2022-05-22 01:07:52 +02:00
i18n.scm
inferior.scm inferior: Close duplicate socketpair file descriptor. 2022-05-20 18:46:07 +02:00
ipfs.scm
least-authority.scm least-authority: Fix typo. 2022-06-10 23:52:34 -04:00
licenses.scm licenses: Add Expat No Attribution license. 2022-05-23 16:24:47 +02:00
lint.scm gnu: Remove python2-setuptools. 2022-05-31 14:54:16 -04:00
man-db.scm
memoization.scm
modules.scm
monad-repl.scm
monads.scm
nar.scm
narinfo.scm
openpgp.scm
packages.scm packages: Change the order of %SUPPORTED-SYSTEMS. 2022-06-16 23:57:40 +02:00
pki.scm
platform.scm guix: platform: Fix typo in lookup-platform-by-target. 2022-06-08 12:02:03 +02:00
profiles.scm profiles: Do not repeat entries in 'manifest' file. 2022-07-01 23:29:16 +02:00
profiling.scm
progress.scm
quirks.scm
records.scm
remote.scm
repl.scm
scripts.scm
search-paths.scm search-paths: Define $SSL_CERT_DIR and $SSL_CERT_FILE. 2022-05-13 17:15:37 +02:00
self.scm self: 'guix-daemon' wrapper refers to the right Guile. 2022-06-26 23:19:13 +02:00
serialization.scm
sets.scm
ssh.scm ssh: Add #:connection-timeout parameter to 'open-ssh-session'. 2022-06-15 00:25:20 +02:00
status.scm status: Relay "updating substitutes" messages. 2022-06-26 23:19:14 +02:00
store.scm store: 'map/accumulate-builds' preserves caches. 2022-05-30 16:34:39 +02:00
substitutes.scm
svn-download.scm
swh.scm
tests.scm
transformations.scm transformations: Preserve transformation order in package property. 2022-05-05 23:56:58 +02:00
ui.scm ui: Improve pager selection logic when less is not installed. 2022-06-16 23:57:41 +02:00
upstream.scm upstream: 'guix refresh -u' no longer stops when upstream info is lacking. 2022-07-01 23:29:15 +02:00
utils.scm utils: Define 'target-x86?' predicate. 2022-06-24 10:21:05 +02:00
workers.scm