From b46712159c15f72fc28b71d17d5a7c74fcb64ed0 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 12 Jun 2017 15:38:49 +0200 Subject: store: Speed up 'add-to-store'. * guix/store.scm (add-to-store): Remove 'lstat' call. --- guix/store.scm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/guix/store.scm b/guix/store.scm index c94dfea959..ed588aae47 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -830,10 +830,11 @@ (define add-to-store When RECURSIVE? is true, call (SELECT? FILE STAT) for each directory entry, where FILE is the entry's absolute file name and STAT is the result of 'lstat'; exclude entries for which SELECT? does not return true." - (let* ((st (false-if-exception (lstat file-name))) - (args `(,st ,basename ,recursive? ,hash-algo ,select?)) + ;; Note: We don't stat FILE-NAME at each call, and thus we assume that + ;; the file remains unchanged for the lifetime of SERVER. + (let* ((args `(,file-name ,basename ,recursive? ,hash-algo ,select?)) (cache (nix-server-add-to-store-cache server))) - (or (and st (hash-ref cache args)) + (or (hash-ref cache args) (let ((path (add-to-store server basename recursive? hash-algo file-name #:select? select?))) -- cgit v1.2.3