~ruther/guix-local

35eb77b09d957019b2437e7681bd88013d67d3cd — Ludovic Courtès 8 years ago 3346398
store: Rewrite 'store-path-hash-part' to not use regexps.

* guix/store.scm (store-path-hash-part): Rewrite without using a
regexp.  This speeds up 'guix substitute'.
1 files changed, 6 insertions(+), 3 deletions(-)

M guix/store.scm
M guix/store.scm => guix/store.scm +6 -3
@@ 1549,9 1549,12 @@ valid inputs."
(define (store-path-hash-part path)
  "Return the hash part of PATH as a base32 string, or #f if PATH is not a
syntactically valid store path."
  (let ((path-rx (store-regexp* (%store-prefix))))
    (and=> (regexp-exec path-rx path)
           (cut match:substring <> 1))))
  (and (string-prefix? (%store-prefix) path)
       (let ((base (string-drop path (+ 1 (string-length (%store-prefix))))))
         (and (> (string-length base) 33)
              (let ((hash (string-take base 32)))
                (and (string-every %nix-base32-charset hash)
                     hash))))))

(define (log-file store file)
  "Return the build log file for FILE, or #f if none could be found.  FILE