Optimize `store-path?'.

* guix/store.scm (store-path?): Check with `string-prefix?' instead of a
  regexp.
This commit is contained in:
Ludovic Courtès 2012-09-01 19:21:06 +02:00
parent d118c548b5
commit f39bd08ad2

View File

@ -414,13 +414,12 @@ Return #t on success."
;; Absolute path to the Nix store. ;; Absolute path to the Nix store.
(make-parameter "/nix/store")) (make-parameter "/nix/store"))
(define store-path? (define (store-path? path)
(let ((store-path-rx
(delay (make-regexp
(string-append "^.*" (%store-prefix) "/[^-]{32}-(.+)$")))))
(lambda (path)
"Return #t if PATH is a store path." "Return #t if PATH is a store path."
(not (not (regexp-exec (force store-path-rx) path)))))) ;; This is a lightweight check, compared to using a regexp, but this has to
;; be fast as it's called often in `derivation', for instance.
;; `isStorePath' in Nix does something similar.
(string-prefix? (%store-prefix) path))
(define (derivation-path? path) (define (derivation-path? path)
"Return #t if PATH is a derivation path." "Return #t if PATH is a derivation path."