summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-07-29 19:48:23 +0200
committerLudovic Courtès <ludo@gnu.org>2016-07-29 22:32:04 +0200
commitda2d893e324fcdd4ab9e3ccdd62d7aab520da3b5 (patch)
treea12247fb19480a74cb1429cf5bff992c77e3b072
parent31c995f8afbb3dc2913c9bfb17ea8de68cf804cb (diff)
downloadguix-da2d893e324fcdd4ab9e3ccdd62d7aab520da3b5.tar.gz
size: Fix corner case with multiple items on the command line.
Fixes 'guix size foo bar' when 'foo' is in the local store and 'bar'
isn't, which could lead to an incomplete requisite list.

* guix/scripts/size.scm (requisites*): Partition ITEMS according to
'valid-path?'.  Use 'substitutable-requisites' only on invalid items.
-rw-r--r--guix/scripts/size.scm11
1 files changed, 7 insertions, 4 deletions
diff --git a/guix/scripts/size.scm b/guix/scripts/size.scm
index f28832ce90..ea259f3758 100644
--- a/guix/scripts/size.scm
+++ b/guix/scripts/size.scm
@@ -29,6 +29,7 @@
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-11)
+  #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-37)
   #:use-module (ice-9 match)
@@ -119,10 +120,12 @@ substitutes."
 information available in the local store or using information about
 substitutes."
   (lambda (store)
-    (guard (c ((nix-protocol-error? c)
-               (values (substitutable-requisites store items)
-                       store)))
-      (values (requisites store items) store))))
+    (let-values (((local missing)
+                  (partition (cut valid-path? store <>) items)))
+      (values (delete-duplicates
+               (append (requisites store local)
+                       (substitutable-requisites store missing)))
+              store))))
 
 (define (store-profile items)
   "Return as a monadic value a list of <profile> objects representing the