diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-04-06 14:52:56 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-04-07 11:36:00 +0200 |
commit | 1199da08aa76f7bba57692b4b8e9272fd305e9f2 (patch) | |
tree | f82aaace2b120d3868f22e38a192b99f75a79103 | |
parent | 32c055fd32059cbe0ab6f94eb3ef3a8c7e49dc92 (diff) | |
download | patches-1199da08aa76f7bba57692b4b8e9272fd305e9f2.tar patches-1199da08aa76f7bba57692b4b8e9272fd305e9f2.tar.gz |
size: Optimize dependency size computation.
This reduces 'guix size' run time by ~4% here:
items="$(guix build icecat inkscape emacs libreoffice)"
guix size $items
* guix/scripts/size.scm (store-profile): Define 'size-table' and use it
to lookup the size of ITEM in 'dependency-size'.
-rw-r--r-- | guix/scripts/size.scm | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/guix/scripts/size.scm b/guix/scripts/size.scm index 25218a2945..f549ce05b8 100644 --- a/guix/scripts/size.scm +++ b/guix/scripts/size.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -34,6 +34,7 @@ #:use-module (srfi srfi-37) #:use-module (ice-9 match) #:use-module (ice-9 format) + #:use-module (ice-9 vlist) #:export (profile? profile-file profile-self-size @@ -142,11 +143,20 @@ profile of ITEMS and their requisites." (lambda (size) (return (cons item size))))) refs))) + (define size-table + (fold (lambda (pair result) + (match pair + ((item . size) + (vhash-cons item size result)))) + vlist-null sizes)) + (define (dependency-size item) (mlet %store-monad ((deps (requisites* (list item)))) (foldm %store-monad (lambda (item total) - (return (+ (assoc-ref sizes item) total))) + (return (+ (match (vhash-assoc item size-table) + ((_ . size) size)) + total))) 0 (delete-duplicates (cons item deps))))) |