aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2025-05-14 22:05:02 +0200
committerLudovic Courtès <ludo@gnu.org>2025-05-18 22:55:53 +0200
commit6d6d897b5454e9fad50e373e8051cbe1c81e495a (patch)
tree08be991b9940d7719fb2b89aac211f8a59849736
parent7f814149c275615e3acbdf9febe7ba8e7393ffec (diff)
downloadguix-6d6d897b5454e9fad50e373e8051cbe1c81e495a.tar.gz
guix-6d6d897b5454e9fad50e373e8051cbe1c81e495a.zip
channels: Speed up ‘channel-news-for-commit’.
Partly fixes <https://issues.guix.gnu.org/78194>. This makes the wall-clock time of: guix pull --list-generations > /dev/null shrink from 33s to 4s on a profile with 8 generations. * guix/channels.scm (channel-news-for-commit): Rewrite in terms of ‘commit-descendant?’. Reported-by: Ian Eure <ian@retrospec.tv> Change-Id: I387e3dc37437e2d98bfd7ab710417f68d16146ad
-rw-r--r--guix/channels.scm24
1 files changed, 12 insertions, 12 deletions
diff --git a/guix/channels.scm b/guix/channels.scm
index 7a02d24a84..f6b3f40cc3 100644
--- a/guix/channels.scm
+++ b/guix/channels.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2018-2024 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2018-2025 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2018 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
@@ -31,7 +31,7 @@
#:autoload (git structs) (git-error-code)
#:autoload (guix git) (update-cached-checkout
url+commit->name
- commit-difference
+ commit-descendant?
repository-info
commit-short-id
tag->commit
@@ -48,7 +48,6 @@
#:use-module (guix progress)
#:use-module (guix derivations)
#:use-module (guix diagnostics)
- #:use-module (guix sets)
#:use-module (guix store)
#:use-module (guix i18n)
#:use-module (srfi srfi-1)
@@ -1237,15 +1236,16 @@ NEW. When OLD is omitted or is #f, return all the news entries of CHANNEL."
entry))
(channel-news-entries news))))
(if old
- (let* ((new (commit-lookup repository (string->oid new)))
- (old (commit-lookup repository (string->oid old)))
- (commits (list->set
- (map (compose oid->string commit-id)
- (commit-difference new old)))))
- (filter (lambda (entry)
- (set-contains? commits
- (channel-news-entry-commit entry)))
- entries))
+ (let ((new (commit-lookup repository (string->oid new)))
+ (old (commit-lookup repository (string->oid old))))
+ (take-while (lambda (entry)
+ (let ((entry (commit-lookup
+ repository
+ (string->oid
+ (channel-news-entry-commit entry)))))
+ (and (commit-descendant? new (list entry))
+ (not (commit-descendant? old (list entry))))))
+ entries))
entries)))
'())))
(lambda (key error . rest)