derivations: Inline 'find' in 'coalesce-duplicate-inputs'.
authorLudovic Courtès <ludo@gnu.org>
Thu, 23 Jan 2020 21:35:43 +0000 (22:35 +0100)
committerLudovic Courtès <ludo@gnu.org>
Thu, 23 Jan 2020 22:34:10 +0000 (23:34 +0100)
Previously the first argument to 'find' would show up high in profiles
of 'package-derivation'.  This speeds things up a big, especially on
Guile 3.

* guix/derivations.scm (coalesce-duplicate-inputs)[find]: New
procedure.

guix/derivations.scm

index 480a65c..f6d6f7d 100644 (file)
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017 Mathieu Lirzin <mthl@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
@@ -240,6 +240,13 @@ the store."
   "Return a list of inputs, such that when INPUTS contains the same DRV twice,
 they are coalesced, with their sub-derivations merged.  This is needed because
 Nix itself keeps only one of them."
+  (define (find pred lst)                         ;inlinable copy of 'find'
+    (let loop ((lst lst))
+      (match lst
+        (() #f)
+        ((head . tail)
+         (if (pred head) head (loop tail))))))
+
   (fold (lambda (input result)
           (match input
             (($ <derivation-input> (= derivation-file-name path) sub-drvs)