aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-04-06 14:52:56 +0200
committerLudovic Courtès <ludo@gnu.org>2019-04-07 11:36:00 +0200
commit1199da08aa76f7bba57692b4b8e9272fd305e9f2 (patch)
treef82aaace2b120d3868f22e38a192b99f75a79103
parent32c055fd32059cbe0ab6f94eb3ef3a8c7e49dc92 (diff)
downloadgnu-guix-1199da08aa76f7bba57692b4b8e9272fd305e9f2.tar
gnu-guix-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.scm14
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)))))