From 35eb77b09d957019b2437e7681bd88013d67d3cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 21 Jul 2017 14:50:16 +0200 Subject: 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'. --- guix/store.scm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'guix/store.scm') diff --git a/guix/store.scm b/guix/store.scm index b15da54852..2563d26fa0 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -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 -- cgit v1.2.3