guix-devel/guix
Ludovic Courtès 161094c8e2 packages: Rewrite 'transitive-inputs' to be linear and remove duplicates.
There were two issues:

  1. Use of 'delete-duplicates', which is quadratic, was a serious problem for
     closures with lots of propagated inputs, such as that of the 'hydra'
     package (several minutes for 'guix build hydra -n'!).

  2. The 'delete-duplicates' call essentially had no effect since duplicate
     inputs typically had a different label and were thus kept.  For
     instance, (bag-transitive-inputs (package->bag inkscape)) would return
     216 items whereas (delete-duplicates (map cdr THAT)) contains only 67
     items.

     The new implementation returns 67 items in this case.  For 'hydra', we're
     down from 42211 items to 361, and roughly 13s for 'guix build hydra'.

* guix/packages.scm (transitive-inputs): Rewrite as a breadth-first
  traversal.  Remove duplicate propagated inputs.
* tests/packages.scm ("package-transitive-inputs", "package->bag, propagated
  inputs"): Adjust to use simple labels for propagated inputs, without "/".
  ("package-transitive-inputs, no duplicates"): New test.
2015-07-12 01:27:00 +02:00
..
build build: Add 'emacs-build-system'. 2015-07-08 10:53:05 +02:00
build-system build: Add 'emacs-build-system'. 2015-07-08 10:53:05 +02:00
import import: cabal: Make token recognition case-insensitive. 2015-07-08 10:53:05 +02:00
scripts offload: Add 'ssh-options' field to <build-machine>. 2015-07-09 11:59:26 +02:00
base32.scm base32: Use a custom error condition instead of 'misc-error'. 2015-05-31 22:39:48 +02:00
base64.scm base64: Inline arithmetic operations. 2015-01-09 01:01:04 +01:00
build-system.scm build-system: Bags record their system and target. 2014-10-05 21:58:42 +02:00
config.scm.in build: Change state and log directories to $localstatedir/.../guix. 2014-03-09 22:10:01 +01:00
cpio.scm linux-initrd: Produce cpio archives with zeroed timestamps, etc. 2015-06-24 18:05:03 +02:00
cvs-download.scm packages: Refer to the native tools when handling sources and downloads. 2015-04-15 10:19:47 +02:00
derivations.scm derivations: Add #:substitutable?, distinguished from #:local-build?. 2015-07-03 00:30:55 +02:00
download.scm download: Reference tls instead of renamed gnutls module. 2015-07-05 19:11:04 +02:00
elf.scm elf: Add missing argument in 'elf-segment'. 2015-03-30 15:21:11 +02:00
ftp-client.scm ftp-client: Throw when log-in fails. 2015-05-20 12:13:39 +02:00
gcrypt.scm Add (guix gcrypt). 2015-01-26 21:58:12 +01:00
gexp.scm derivations: Add #:substitutable?, distinguished from #:local-build?. 2015-07-03 00:30:55 +02:00
git-download.scm derivations: Add #:substitutable?, distinguished from #:local-build?. 2015-07-03 00:30:55 +02:00
gnu-maintenance.scm gnu-maintenance: Use 'home-page' as an additional hint of "GNUness". 2015-06-16 10:31:12 +02:00
gnupg.scm gnupg: Correctly parse current 'SIG_ID' lines. 2014-09-24 19:08:03 +02:00
hash.scm hash: Initialize libgcrypt before use. 2015-01-26 21:58:12 +01:00
http-client.scm http-client: Remove monkey patching for 2.0.5. 2015-05-10 11:07:51 +02:00
licenses.scm licenses: Add the SGI Free Software License B, version 2.0. 2015-06-23 01:04:53 -04:00
monad-repl.scm monads: Move '%store-monad' and related procedures where they belong. 2015-01-14 13:34:52 +01:00
monads.scm monads: Allow n-ary '>>=' expressions. 2015-06-08 23:00:49 +02:00
nar.scm nar: Read archive signatures as Latin-1 strings. 2015-01-18 22:19:04 +01:00
packages.scm packages: Rewrite 'transitive-inputs' to be linear and remove duplicates. 2015-07-12 01:27:00 +02:00
pk-crypto.scm pk-crypto: Improve documentation of 'key-type'. 2015-03-18 14:43:03 +01:00
pki.scm pki: Introduce 'write-acl', and fix wrong conversion in 'ensure-acl'. 2014-04-04 00:23:17 +02:00
profiles.scm profiles: Process ghc conf files only once. 2015-06-11 18:55:48 -05:00
records.scm records: Remove unnecessary 'begin'. 2015-06-11 23:33:32 +02:00
search-paths.scm search-paths: Export 'string-tokenize*'. 2015-05-06 18:26:53 +02:00
serialization.scm Remove assorted Guile 2.0.5 workarounds. 2015-05-10 11:07:51 +02:00
sets.scm Add (guix sets). 2015-01-11 23:50:01 +01:00
store.scm store: 'run-with-store' initializes %CURRENT-TARGET-SYSTEM to #f. 2015-07-08 00:06:45 +02:00
svn-download.scm packages: Refer to the native tools when handling sources and downloads. 2015-04-15 10:19:47 +02:00
tests.scm tests: Move 'file=?' to (guix tests). 2015-06-24 18:05:03 +02:00
ui.scm ui: Replace the global 'symlink' binding. 2015-06-10 10:25:16 +02:00
utils.scm utils: Add call-with-temporary-directory. 2015-07-07 18:47:25 -04:00