diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-06-26 17:48:28 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2018-12-19 23:52:25 +0100 |
commit | 87b711d200ad13eaef284bdd1ab77f85618b0498 (patch) | |
tree | da4d5c6a0261e64ae1858a048c2e64d2930b180e | |
parent | 0b1be8fd57233c11e3b8ad71bd20af9349539cbd (diff) | |
download | guix-87b711d200ad13eaef284bdd1ab77f85618b0498.tar.gz |
utils: Memoize 'absolute-dirname'.
* guix/utils.scm (absolute-dirname): Wrap in 'mlambda'.
-rw-r--r-- | guix/utils.scm | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/guix/utils.scm b/guix/utils.scm index 9bad06d52f..ed1a418cca 100644 --- a/guix/utils.scm +++ b/guix/utils.scm @@ -731,17 +731,19 @@ environment variable name like \"XDG_CONFIG_HOME\"; SUFFIX is a suffix like ;;; Source location. ;;; -(define (absolute-dirname file) - "Return the absolute name of the directory containing FILE, or #f upon +(define absolute-dirname + ;; Memoize to avoid repeated 'stat' storms from 'search-path'. + (mlambda (file) + "Return the absolute name of the directory containing FILE, or #f upon failure." - (match (search-path %load-path file) - (#f #f) - ((? string? file) - ;; If there are relative names in %LOAD-PATH, FILE can be relative and - ;; needs to be canonicalized. - (if (string-prefix? "/" file) - (dirname file) - (canonicalize-path (dirname file)))))) + (match (search-path %load-path file) + (#f #f) + ((? string? file) + ;; If there are relative names in %LOAD-PATH, FILE can be relative and + ;; needs to be canonicalized. + (if (string-prefix? "/" file) + (dirname file) + (canonicalize-path (dirname file))))))) (define-syntax current-source-directory (lambda (s) |