GNU bug report logs - #74654
[PATCH 0/5] Optimize 'all-packages'; add ungrafting manifest

Previous Next

Package: guix-patches;

Reported by: Ludovic Courtès <ludo <at> gnu.org>

Date: Mon, 2 Dec 2024 16:53:02 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Simon Tournier <zimon.toutoune <at> gmail.com>
To: Ludovic Courtès <ludo <at> gnu.org>, 74654 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [bug#74654] [PATCH 2/5] packages: Optimize ‘all-packages’.
Date: Tue, 10 Dec 2024 15:05:57 +0100
Hi,

On Mon, 02 Dec 2024 at 17:53, Ludovic Courtès <ludo <at> gnu.org> wrote:

> -    (delete-duplicates
> -     (fold-packages (lambda (package result)
> -                      (match (package-replacement package)
> -                        ((? package? replacement)
> -                         (cons* replacement package result))
> -                        (#f
> -                         (cons package result))))
> -                    '()
> +    ;; Note: 'fold-packages' never traverses the same package twice but
> +    ;; replacements break that (they may or may not be visible to
> +    ;; 'fold-packages'), hence this hash table to track visited packages.
> +    (define visited (make-hash-table))
>  
> -                    ;; Dismiss deprecated packages but keep hidden packages.
> -                    #:select? (negate package-superseded))
> -     eq?)))
> +    (fold-packages (lambda (package result)
> +                     (if (hashq-ref visited package)
> +                         result
> +                         (begin
> +                           (hashq-set! visited package #t)
> +                           (match (package-replacement package)
> +                             ((? package? replacement)
> +                              (hashq-set! visited replacement #t)
> +                              (cons* replacement package result))
> +                             (#f
> +                              (cons package result))))))
> +                   '()
> +
> +                   ;; Dismiss deprecated packages but keep hidden packages.
> +                   #:select? (negate package-superseded))))

Oh!  This is a better implementation, indeed. :-)

LGTM.

Cheers,
simon




This bug report was last modified 158 days ago.

Previous Next


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