[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
07/11: pull: Display channel news.
From: |
guix-commits |
Subject: |
07/11: pull: Display channel news. |
Date: |
Mon, 23 Sep 2019 05:08:34 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit 7faffdc2d53b982d8443c376d6ed2f41a13b3f36
Author: Ludovic Courtès <address@hidden>
Date: Sun Sep 15 17:57:10 2019 +0200
pull: Display channel news.
* guix/scripts/pull.scm (display-news-entry)
(display-channel-specific-news): New procedures.
(display-channel-news): Call it.
(display-new/upgraded-packages): Adjust hint message.
* doc/guix.texi (Invoking guix pull): Mention it.
---
doc/guix.texi | 11 ++++++----
guix/scripts/pull.scm | 61 ++++++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 65 insertions(+), 7 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 33bf08e9..4830f39 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -3720,13 +3720,16 @@ Read the list of channels from @var{file} instead of
evaluates to a list of channel objects. @xref{Channels}, for more
information.
+@cindex channel news
@item --news
@itemx -N
-Display the list of packages added or upgraded since the previous generation.
+Display the list of packages added or upgraded since the previous
+generation, as well as, occasionally, news written by channel authors
+for their users (@pxref{Channels, Writing Channel News}).
-This is the same information as displayed upon @command{guix pull} completion,
-but without ellipses; it is also similar to the output of @command{guix pull
--l} for the last generation (see below).
+The package information is the same as displayed upon @command{guix
+pull} completion, but without ellipses; it is also similar to the output
+of @command{guix pull -l} for the last generation (see below).
@item --list-generations[=@var{pattern}]
@itemx -l [@var{pattern}]
diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm
index 472947b..d734df5 100644
--- a/guix/scripts/pull.scm
+++ b/guix/scripts/pull.scm
@@ -19,6 +19,7 @@
(define-module (guix scripts pull)
#:use-module (guix ui)
+ #:use-module (guix colors)
#:use-module (guix utils)
#:use-module ((guix status) #:select (with-status-verbosity))
#:use-module (guix scripts)
@@ -229,6 +230,48 @@ purposes."
;; Assume that the URL matters less than the name.
(eq? (channel-name channel1) (channel-name channel2)))
+(define (display-news-entry entry language port)
+ "Display ENTRY, a <channel-news-entry>, in LANGUAGE, a language code, to
+PORT."
+ (let ((title (channel-news-entry-title entry))
+ (body (channel-news-entry-body entry)))
+ (format port " ~a~%"
+ (highlight
+ (string-trim-right
+ (texi->plain-text (or (assoc-ref title language)
+ (assoc-ref title
(%default-message-language))
+ "")))))
+ (format port (G_ " commit ~a~%")
+ (channel-news-entry-commit entry))
+ (newline port)
+ (format port " ~a~%"
+ (indented-string
+ (parameterize ((%text-width (- (%text-width) 4)))
+ (string-trim-right
+ (texi->plain-text (or (assoc-ref body language)
+ (assoc-ref body
(%default-message-language))
+ ""))))
+ 4))))
+
+(define* (display-channel-specific-news new old
+ #:key (port (current-output-port)))
+ "Display channel news applicable the commits between OLD and NEW, where OLD
+and NEW are <channel> records with a proper 'commit' field."
+ (let ((channel new)
+ (old (channel-commit old))
+ (new (channel-commit new)))
+ (when (and old new)
+ (let ((language (current-message-language)))
+ (match (channel-news-for-commit channel new old)
+ (() ;no news is good news
+ #t)
+ ((entries ...)
+ (newline port)
+ (format port (G_ "News for channel '~a'~%")
+ (channel-name channel))
+ (for-each (cut display-news-entry <> language port) entries)
+ (newline port)))))))
+
(define (display-channel-news profile)
"Display news about the channels of PROFILE "
(define previous
@@ -259,7 +302,20 @@ purposes."
(N_ " ~*One channel removed:~%"
" ~a channels removed:~%" count)
count)
- (for-each display-channel removed)))))))))
+ (for-each display-channel removed))))
+
+ ;; Display channel-specific news for those channels that were
+ ;; here before and are still around afterwards.
+ (for-each (match-lambda
+ ((new old)
+ (display-channel-specific-news new old)))
+ (filter-map (lambda (new)
+ (define old
+ (find (cut channel=? new <>)
+ old-channels))
+
+ (and old (list new old)))
+ new-channels)))))))
(define (display-news profile)
;; Display profile news, with the understanding that this process represents
@@ -534,8 +590,7 @@ display long package lists that would fill the user's
screen."
(when (and concise?
(or (> new-count concise/max-item-count)
(> upgraded-count concise/max-item-count)))
- (display-hint (G_ "Run @command{guix pull --news} to view the complete
-list of package changes.")))))
+ (display-hint (G_ "Run @command{guix pull --news} to read all the
news.")))))
(define (display-profile-content-diff profile gen1 gen2)
"Display the changes in PROFILE GEN2 compared to generation GEN1."
- branch master updated (acedaec -> 90ca791), guix-commits, 2019/09/23
- 01/11: pull: '--news' shows the list of channels added or removed., guix-commits, 2019/09/23
- 02/11: git: 'update-cached-checkout' avoids network access when unnecessary., guix-commits, 2019/09/23
- 06/11: ui: Add 'current-message-language'., guix-commits, 2019/09/23
- 03/11: git: Add 'commit-difference'., guix-commits, 2019/09/23
- 05/11: channels: Allow news entries to refer to a tag., guix-commits, 2019/09/23
- 04/11: channels: Add support for a news file., guix-commits, 2019/09/23
- 08/11: pull: '-l' displays channel news., guix-commits, 2019/09/23
- 10/11: Add '.guix-channel' file., guix-commits, 2019/09/23
- 07/11: pull: Display channel news.,
guix-commits <=
- 09/11: pull: Display news titles directly upon 'pull'., guix-commits, 2019/09/23
- 11/11: etc: Add channel news file., guix-commits, 2019/09/23