GNU bug report logs - #39258
Faster guix search using an sqlite cache

Previous Next

Package: guix-patches;

Reported by: Arun Isaac <arunisaac <at> systemreboot.net>

Date: Thu, 23 Jan 2020 19:53:02 UTC

Severity: important

Done: Arun Isaac <arunisaac <at> systemreboot.net>

Bug is archived. No further changes may be made.

Full log


Message #328 received at 39258 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Arun Isaac <arunisaac <at> systemreboot.net>
Cc: 39258 <at> debbugs.gnu.org
Subject: Re: [bug#39258] [PATCH 1/4] ui: Cut off search early if any regexp
 does not match.
Date: Tue, 09 Jun 2020 10:29:14 +0200
Hi Arun,

Arun Isaac <arunisaac <at> systemreboot.net> skribis:

> * guix/ui.scm (relevance): When one of the regexps does not match, cut off
> early and return 0. Do not try to match the remaining regexps.

Good catch, LGTM!

> diff --git a/guix/ui.scm b/guix/ui.scm
> index ea5f460865..4a22358963 100644
> --- a/guix/ui.scm
> +++ b/guix/ui.scm
> @@ -1519,11 +1519,16 @@ score, the more relevant OBJ is to REGEXPS."
>                      (+ relevance (* weight (apply + (map score-regexp lst)))))))))
>              0 metrics)))
>  
> -  (let ((scores (map regexp->score regexps)))
> -    ;; Return zero if one of REGEXPS doesn't match.
> -    (if (any zero? scores)
> -        0
> -        (reduce + 0 scores))))
> +  (let loop ((regexps regexps)
> +             (total-score 0))
> +    (match regexps
> +      ((head . tail)
> +       (let ((score (regexp->score head)))
> +         ;; Return zero if one of PATTERNS doesn't match.
> +         (cond
> +          ((zero? score) 0)
> +          (else (loop tail (+ total-score score))))))

You can use ‘if’ since there are only two arms.

Thanks,
Ludo’.




This bug report was last modified 38 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.