summaryrefslogtreecommitdiff
path: root/guix/scripts/pull.scm
AgeCommit message (Expand)Author
2019-09-23pull: Display news titles directly upon 'pull'....* guix/scripts/pull.scm (display-profile-news): Return true when there's more to display. (display-news-entry-title): New procedure. (display-news-entry): Use it. (display-channel-specific-news): Return true when there's more to display. (display-channel-news-headlines): New procedure. (build-and-install): Call it. When 'display-channel-news-headlines' or 'display-profile-news' returns #t, print a hint to run "pull --news". (display-new/upgraded-packages): Return true when there's more to display. Ludovic Courtès
2019-09-23pull: '-l' displays channel news....* guix/scripts/pull.scm (display-channel-news): Make 'previous' a parameter. (process-query)[list-generations]: Call 'display-channel-news'. Ludovic Courtès
2019-09-23pull: 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. Ludovic Courtès
2019-09-23pull: '--news' shows the list of channels added or removed....* guix/scripts/pull.scm (display-channel, channel=?) (display-channel-news, display-news): New procedures. (process-query): Call 'display-news' instead of 'display-profile-news'. Ludovic Courtès
2019-09-18scripts: pull: Add options for generation management...* guix/scripts/pull.scm (%options) Add --roll-back, --switch-generation, --delete-generations (process-generation-change): New function (guix-pull): Execute generation management operations * doc/guix.texi: Document the generation management operations Signed-off-by: Ludovic Courtès <ludo@gnu.org> Konrad Hinsen
2019-09-18pull: Work around Ubuntu's 'sudo'....Partly fixes <https://bugs.gnu.org/36785>. Reported by Julien Lepiller <julien@lepiller.eu>. * guix/scripts/pull.scm (ensure-default-profile): Do not call 'migrate-generations' when "SUDO_USER" is set. Ludovic Courtès
2019-07-18pull: Pass #:use-substitutes? to 'show-what-to-build'....Fixes <https://bugs.gnu.org/36509>. Reported by Robert Vollmert <rob@vllmrt.net>. * guix/scripts/pull.scm (build-and-install): Add #:use-substitutes? parameter and pass it to UPDATE-PROFILE. (guix-pull): Pass #:use-substitutes? to 'build-and-install'. Ludovic Courtès
2019-07-18pull: Use (ice-9 format)....* guix/scripts/pull.scm (guix): Use (ice-9 format), as reported by '-Wformat'. Ludovic Courtès
2019-07-18pull: Remove unused procedures....* guix/scripts/pull.scm (what-to-build, indirect-root-added): Remove. Ludovic Courtès
2019-07-11guix gc: Correctly handle '--delete-generations' with no arguments....Previously, 'guix gc --delete-generations' would crash: the "" pattern would be passed to 'matching-generations', which would return #f instead of returning a list. Reported by Raghav Gururajan <rvgn@disroot.org> in <https://bugs.gnu.org/36466>. * guix/ui.scm (matching-generations): Raise an error when passed an invalid pattern. * guix/scripts/gc.scm (delete-old-generations): Check if PATTERN is true. (%options): Leave ARG as-is for 'delete-generations'. (guix-gc): Use 'assq' instead of 'assoc-ref' for 'delete-generations'. * guix/scripts/package.scm (delete-matching-generations): Replace (string-null? pattern) with (not pattern). Remove 'else' clause. (%options): Leave ARG as-is for 'delete-generations'. * guix/scripts/pull.scm (%options): Leave ARG as-is for 'list-generations'. (process-query): Replace (string-null? pattern) with (not pattern). * guix/scripts/system.scm (list-generations): Likewise, and remove 'else' clause. (process-command): Use #f instead of "" when no pattern is given. Ludovic Courtès
2019-05-09pull: Display 'hash guix' hint when the new and old 'guix' are different....Fixes <https://bugs.gnu.org/35601>. Reported by Diego Nicola Barbato <dnbarbato@posteo.de>. Previously we were calling (which "guix") after the new profile had been built and symlinked, so in most cases the hint would not be triggered, even though it should have been triggered. * guix/scripts/pull.scm (build-and-install)[guix-command]: New variable. Compare PROFILE/bin/guix against GUIX-COMMAND. Ludovic Courtès
2019-04-22pull: Create profile after the store connection has been opened....Fixes <https://bugs.gnu.org/35341>. Reported by Florian Pelz <pelzflorian@pelzflorian.de>. Previously, we'd call 'ensure-default-profile' before the connection to the daemon has been opened. On the first connection, the daemon ensures that /var/guix/profiles/per-user is world-writable. Since we were calling 'ensure-default-profile' before that, /var/guix/profiles/per-user was typically non-writable (555 and root-owned), and thus 'guix pull' would error out. * guix/scripts/pull.scm (guix-pull): Call 'ensure-default-profile' within 'with-store'. Ludovic Courtès
2019-04-22pull: Add '--news'....Suggested by Tobias Geerinckx-Rice <me@tobias.gr>. * guix/scripts/pull.scm (%options, show-help): Add '--news'. (display-profile-news): Add #:current-is-newer? and #:concise?. Honor them. (build-and-install): Pass #:concise? #t. (display-new/upgraded-packages)[concise/max-item-count]: New variable. Add call to 'display-hint'. (process-query): Add clause for 'display-news'. * doc/guix.texi (Invoking guix pull): Add '--news'. Ludovic Courtès
2019-04-17pull: '--url', '--commit', and '--branch' apply to the 'guix' channel....Suggested by pkill9 <pkill9@runbox.com>. * guix/scripts/pull.scm (channel-list): Apply REF and URL to the 'guix' channel. * doc/guix.texi (Invoking guix pull): Adjust accordingly. Ludovic Courtès
2019-04-10pull: Remove duplicate '--dry-run' description....Reported by pkill9. * guix/scripts/pull.scm (show-help): Remove duplicate '--dry-run' description. Ludovic Courtès
2019-03-28pull: Truncate the list of packages displayed on completion....Previously, if you'd run 'guix pull' after a couple of weeks, it would fill your screen with package names, which is unhelpful. * guix/scripts/pull.scm (ellipsis): New procedure. (display-new/upgraded-packages): Add #:concise?. [list->enumeration]: New procedure. Use it instead of 'string-join'. (display-profile-news): Pass #:concise? #t. Ludovic Courtès
2019-03-28pull: Factorize pretty-printing for new/upgraded package lists....* guix/scripts/pull.scm (display-new/upgraded-packages)[pretty]: New procedure. Use it. Ludovic Courtès
2019-02-12pull: Speed up the new/upgraded package computation....* guix/scripts/pull.scm (new/upgraded-packages): OLD no longer stores all the versions of each package. Remove 'vhash-fold*' call and reduce the number of 'version>?' calls when computing UPGRADED. Ludovic Courtès
2019-02-12pull: Move profile comparison to 'new/upgraded-packages'....* guix/scripts/pull.scm (new/upgraded-packages): New procedure, with code formerly in 'display-new/upgraded-packages'. (display-new/upgraded-packages): Use it. Ludovic Courtès
2019-02-12pull: Use 'fold-available-packages' for the current package list....* guix/scripts/pull.scm (display-profile-news): Use 'fold-available-packages' instead of 'fold-packages' to compute OLD. (profile-package-alist): Use 'inferior-available-packages'. Ludovic Courtès
2019-02-11Avoid name clash with 'build' from (guix store) and (guix status)....Since commit 976ef2d97887d16eab8d4eb9dad811786b04d690, (guix status) exports 'build', which clashes with 'build' from (guix store). * build-aux/run-system-tests.scm: Select 'with-status-verbosity' from (guix status). * guix/scripts/archive.scm: Likewise. * guix/scripts/build.scm: Likewise. * guix/scripts/copy.scm: Likewise. * guix/scripts/environment.scm: Likewise. * guix/scripts/pack.scm: Likewise. * guix/scripts/package.scm: Likewise. * guix/scripts/pull.scm: Likewise. * guix/scripts/system.scm: Likewise. Ludovic Courtès
2019-02-08git: Always use the system certificates by default....'guix pull' was always doing it, and now '--with-branch' & co. will do it as well. * guix/git.scm (honor-system-x509-certificates!): New procedure. (%certificates-initialized?): New variable. (with-libgit2): Add call to 'honor-system-x509-certificates!'. * guix/scripts/pull.scm (honor-x509-certificates): Call 'honor-system-x509-certificates!' and fall back to 'honor-lets-encrypt-certificates!'. Ludovic Courtès
2019-01-29pull: Default to verbosity level 1....* guix/scripts/pull.scm (%default-options): Change 'verbosity to 1. Ludovic Courtès
2019-01-28pull: Don't trigger 'hash guix' hint needlessly....Previously if ~/.config/guix/current/bin was in $PATH, we'd still suggest to run 'hash guix' because we'd compare (which "guix") against /var/guix/profiles/per-user/…. * guix/scripts/pull.scm (build-and-install): Check whether (which "guix") matches PROFILE or its user-friendly variant. Ludovic Courtès
2019-01-20pull: Add missing import....Fixes <https://bugs.gnu.org/34136>. Reported by Pierre Neidhardt <mail@ambrevar.xyz>. Fixes wrong-type-arg crash of "guix pull -p /does-not-exist -l". * guix/scripts/pull.scm: Use (srfi srfi-34). Ludovic Courtès
2019-01-18pull: Suggest running 'hash guix' if needed....Fixes <https://bugs.gnu.org/33647>. Suggested by Diego Nicola Barbato <dnbarbato@posteo.de>. * guix/scripts/pull.scm (build-and-install): Before returning, display a hint if (which "guix") is not in PROFILE. Ludovic Courtès
2019-01-15channels: Compute a package cache and use it....* gnu/packages.scm (cache-is-authoritative?, load-package-cache) (cache-lookup, generate-package-cache): New procedures. (%package-cache-file): New variable. (find-packages-by-name): Rename to... (find-packages-by-name/direct): ... this. (find-packages-by-name): Rewrite to use the package cache when 'cache-is-authoritative?' returns true. * tests/packages.scm ("find-packages-by-name + version, with cache") ("find-packages-by-name with cache"): New tests. * guix/channels.scm (package-cache-file): New procedure. (%channel-profile-hooks): New variable. (channel-instances->derivation): Use it in #:hooks. * guix/scripts/package.scm (build-and-use-profile): Add #:hooks and honor it. * guix/scripts/pull.scm (build-and-install): Pass #:hooks to UPDATE-PROFILE. Ludovic Courtès
2019-01-14pull: Don't prepend "origin/" to branch names....This is a followup to 37a6cdbf1b3503d3e60840a176318284b1f7ca25. * guix/scripts/pull.scm (%options): Don't prepend "origin/" to branch names. Ludovic Courtès
2019-01-11guix build: Re-purpose '--verbosity' and add '--debug'....The previous '--verbosity' option was misleading and rarely what users were looking for. The new option provides a consistent way to choose whether or not to display the build log. * guix/scripts/build.scm (show-build-options-help): Remove "--verbosity" and add "--debug". (set-build-options-from-command-line): Use the 'debug key of OPTS for #:verbosity. (%standard-build-options): Change "verbosity" to "debug". Use 'string->number*' instead of 'string->number'. (%default-options): Change 'verbosity to 'debug and add a 'verbosity key. (show-help): Add '--verbosity'. (%options): Likewise, and change '--quiet' to set the 'verbosity key of RESULT. (guix-build): Use 'with-status-verbosity' instead of parameterizing CURRENT-BUILD-OUTPUT-PORT, honor the 'verbosity key of OPTS, and remove 'quiet?'. * guix/scripts/environment.scm (show-help, %options): Add '--verbosity'. (%default-options): Add 'debug'. (guix-environment): Honor the 'verbosity key of OPTS. * guix/scripts/pack.scm (%default-options): Add 'debug. (%options, show-help): Add '--verbosity'. (guix-pack): Honor the 'verbosity key of OPTS. * guix/scripts/package.scm (%default-options): Add 'debug. (show-help, %options): Add '--verbosity'. Mark '--verbose' as deprecated and change it to set 'verbosity. (guix-package): Honor the 'verbosity key of OPTS and remove 'verbose?'. * guix/scripts/pull.scm (%default-options): Add 'debug. (show-help, %options): Add '--verbosity'. (guix-pull): Honor the 'verbosity key of OPTS. * guix/scripts/system.scm (show-help, %options): Add '--verbosity'. (%default-options): Add 'debug. (guix-system): Honor the 'verbosity key of OPTS. * guix/scripts/archive.scm (%default-options): Add 'debug, 'print-build-trace?, 'print-extended-build-trace?, and 'multiplexed-build-output?. (show-help, %options): Add '--verbosity'. (export-from-store): Remove call to 'set-build-options-from-command-line'. (guix-archive): Wrap body in 'with-status-verbosity'. Add call to 'set-build-options-from-command-line. * doc/guix.texi (Common Build Options): Document '--verbosity' and '--debug'. (Additional Build Options): Adjust description of '--quiet'. Ludovic Courtès
2019-01-11status: Add 'with-status-verbosity'....* guix/status.scm (logger-for-level, call-with-status-verbosity): New procedures. (with-status-verbosity): New macro. * guix/scripts/environment.scm (guix-environment): Use 'with-status-verbosity' instead of 'with-status-report'. * guix/scripts/pack.scm (guix-pack): Likewise. * guix/scripts/package.scm (guix-package): Likewise. * guix/scripts/pull.scm (guix-pull): Likewise. * guix/scripts/system.scm (guix-system): Likewise. * build-aux/run-system-tests.scm (run-system-tests): Likewise. Ludovic Courtès
2019-01-08pull: Document '--system'....Fixes <https://bugs.gnu.org/34010>. Reported by Alex Kost <alezost@gmail.com>. This is a followup to 5923102f7b58f0a0120926ec5b81ed48b26a188e. * guix/scripts/pull.scm (show-help): Add '--system'. Ludovic Courtès
2018-12-27pull: Add '--system'....* guix/scripts/pull.scm (%options): Add '--system'. (guix-pull): Honor it. * doc/guix.texi (Invoking guix pull): Document it. Ludovic Courtès
2018-11-07pull: Add missing monadic 'return'....Fixes a regression introduced in 5f7dd092ca577a534067f577b8849ed06cabf970 where, upon completion, 'guix pull' would fail (instead of printing the new/upgraded packages) with ugly errors like: successfully built /gnu/store/…-profile.drv 1 package in profile Backtrace: […] In guix/store.scm: 1605:24 1 (run-with-store _ _ #:guile-for-build _ #:system _ # _) In unknown file: 0 (_ #<build-daemon 256.97 2476b40>) ERROR: Wrong type to apply: #t Reported by thorwil on #guix. * guix/scripts/pull.scm (build-and-install): Add missing 'return' when DRY-RUN? is wrong. Ludovic Courtès
2018-11-06pull: Make '--dry-run' behave as expected....* guix/scripts/pull.scm (show-help): Document '--dry-run'. (build-and-install): Add #:dry-run? parameter and honor it. (guix-pull): Remove (assoc-ref opts 'dry-run?) condition. Instead, pass it as #:dry-run? to 'build-and-install'. * doc/guix.texi (Invoking guix pull): Document '--dry-run'. Move '--verbose' to the bottom. Ludovic Courtès
2018-10-15status: Build upon multiplexed build output....This allows for more accurate status tracking and parsing of extended build traces. * guix/status.scm (multiplexed-output-supported?): New procedure. (print-build-event): Don't print \r when PRINT-LOG? is true. Adjust 'build-log' handling for when 'multiplexed-output-supported?' returns true. (bytevector-index, split-lines): New procedures. (build-event-output-port)[%build-output-pid, %build-output] [%build-output-left]: New variables. [process-line]: Handle "@ build-output" traces. [process-build-output]: New procedure. [write!]: Add case for when %BUILD-OUTPUT-PID is true. Use 'bytevector-index' rather than 'string-index'. (compute-status): Add #:derivation-path->output-path. Use it. * tests/status.scm ("compute-status, multiplexed build output"): New test. ("build-output-port, UTF-8") ("current-build-output-port, UTF-8 + garbage"): Adjust to new 'build-log' output. * guix/scripts/build.scm (set-build-options-from-command-line): Pass #:multiplexed-build-output?. (%default-options): Add 'multiplexed-build-output?'. * guix/scripts/environment.scm (%default-options): Likewise. * guix/scripts/pack.scm (%default-options): Likewise. * guix/scripts/package.scm (%default-options): Likewise. * guix/scripts/pull.scm (%default-options): Likewise. * guix/scripts/system.scm (%default-options): Likewise. Ludovic Courtès
2018-10-12pull: Fix target of /var/guix/profiles/per-user/USER/current-guix....This is a followup to 8155a209071f981fbf359975f463be4bcf8fa23e. * guix/scripts/pull.scm (migrate-generations): Compute the right target for /var/guix/profiles/per-user/USER/current-guix. Previously we'd return "current-N-link" instead of "current-guix-N-link'. Ludovic Courtès
2018-10-12pull: Don't use rename(2) across potentially different devices....Reported by Formbi on #guix. * guix/scripts/pull.scm (migrate-generations): Use 'symlink' and 'delete-file' instead of 'rename-file'. The latter could lead to EXDEV when $HOME and /var were different partitions. Ludovic Courtès
2018-10-12pull: Create /var/guix/profiles/per-user/USER/current-guix....Previously the migration code would fail to create that file, so ~/.config/guix/current would be dangling. * guix/scripts/pull.scm (migrate-generations): Create /var/guix/profiles/per-user/USER/current-guix. Ludovic Courtès
2018-10-11pull: Turn ~/.config/guix/current into a symlink to /var/guix/profiles....This is more consistent with what 'guix package' does, more pleasant for users (we no longer clobber ~/.config/guix), and more cluster-friendly (since /var/guix/profiles is usually an NFS share already.) * guix/scripts/pull.scm (%current-profile, %user-profile-directory): New variables. (migrate-generations, ensure-default-profile): New procedures. (guix-pull): Use %CURRENT-PROFILE by default. Call 'ensure-default-profile'. * doc/guix.texi (Invoking guix pull): Adjust 'guix package -p ~/.config/guix/current' example. * guix/scripts.scm (warn-about-old-distro): Check %PROFILE-DIRECTORY "/current-guix". Ludovic Courtès
2018-10-09pull: '-l' now honors '-p'....* guix/scripts/pull.scm (process-query): Add 'profile' parameter and remove 'profile' local variable. (guix-pull): Adjust caller. Ludovic Courtès
2018-09-27Add (guix status) and use it for pretty colored output....* guix/progress.scm (progress-reporter/trace): New procedure. (%progress-interval): New variable. (progress-reporter/file): Use it. * guix/scripts/build.scm (set-build-options-from-command-line): Pass #:print-extended-build-trace?. (%default-options): Add 'print-extended-build-trace?'. (guix-build): Parameterize CURRENT-TERMINAL-COLUMNS. Use 'build-status-updater'. * guix/scripts/environment.scm (%default-options): Add 'print-extended-build-trace?'. (guix-environment): Wrap body in 'with-status-report'. * guix/scripts/pack.scm (%default-options): Add 'print-build-trace?' and 'print-extended-build-trace?'. (guix-pack): Wrap body in 'with-status-report'. * guix/scripts/package.scm (%default-options, guix-package): Likewise. * guix/scripts/system.scm (%default-options, guix-system): Likewise. * guix/scripts/pull.scm (%default-options, guix-pull): Likewise. * guix/scripts/substitute.scm (progress-report-port): Don't call STOP when TOTAL is zero. (process-substitution): Add #:print-build-trace? and honor it. (guix-substitute)[print-build-trace?]: New variable. Pass #:print-build-trace? to 'process-substitution'. * guix/status.scm: New file. * guix/store.scm (set-build-options): Add #:print-extended-build-trace?; pass it into PAIRS. (%protocol-version): Bump. (protocol-version, nix-server-version): New procedures. (current-store-protocol-version): New variable. (with-store, build-things): Parameterize it. * guix/ui.scm (build-output-port): Remove. (colorize-string): Export. * po/guix/POTFILES.in: Add guix/status.scm. * tests/status.scm: New file. * Makefile.am (SCM_TESTS): Add it. * nix/libstore/worker-protocol.hh (PROTOCOL_VERSION): Bump to 0x162. * nix/libstore/build.cc (DerivationGoal::registerOutputs) (SubstitutionGoal::finished): Print a "@ hash-mismatch" trace before throwing. Ludovic Courtès
2018-09-25pull: Try harder to use the host's X.509 certificates....* guix/scripts/pull.scm (honor-x509-certificates): Use commonly-found certificate bundles. Ludovic Courtès
2018-09-18pull: Use /etc/ssl/certs by default if it exists and is non-empty....Previously, on machines where /etc/ssl/certs did exist, we'd have this: $ unset SSL_CERT_DIR $ unset SSL_CERT_FILE $ guix pull Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'... guix pull: error: Git error: the SSL certificate is invalid This is because we'd let OpenSSL look for certificates in its default location, which is an empty directory in its own prefix. * guix/scripts/pull.scm (honor-x509-certificates): New procedure. (guix-pull): Use it instead of calling 'honor-lets-encrypt-certificates!'. Ludovic Courtès
2018-09-18pull: Assume 'set-tls-certificate-locations!' is available....* guix/scripts/pull.scm (honor-lets-encrypt-certificates!): Call 'set-tls-certificate-locations!' unconditionally. Ludovic Courtès
2018-09-18describe: Work correctly on generation-less profiles....Previously a command like: $(readlink -f ~/.config/guix/current)/bin/guix describe would succeed without printing anything. * guix/scripts/describe.scm (display-profile-info): Don't call 'generation-file-name' when NUMBER is zero. * guix/scripts/pull.scm (display-profile-content): Likewise. Ludovic Courtès
2018-09-07Add 'guix describe'....* guix/scripts/describe.scm: New file. * Makefile.am (MODULES): Add it. (SH_TESTS): Add tests/guix-describe.sh. * po/guix/POTFILES.in: Add it. * guix/scripts/pull.scm (display-profile-content): Export. * guix/describe.scm (current-profile, current-profile-entries): Export. * tests/guix-describe.sh: New file. * doc/guix.texi (Features): Mention 'guix pull' and provenance tracking. (Invoking guix pull): Link to 'guix describe'. (Channels): Likewise. (Invoking guix describe): New node. Ludovic Courtès
2018-09-07pull: Add '--profile'....* guix/scripts/pull.scm (show-help, %options): Add '--profile'. (build-and-install): Change 'config-dir' argument to 'profile'. (guix-pull): Honor '--profile'. * doc/guix.texi (Invoking guix pull): Document it. Ludovic Courtès
2018-09-02Add (guix channels) and use it in (guix scripts pull)....* guix/channels.scm: New file. * Makefile.am (MODULES): Add it. * guix/scripts/pull.scm: Use it. (%default-options): Remove 'repository-url' and 'ref'. (show-help, %options): Add '--channels'. (%self-build-file, %pull-version, build-from-source) (whole-package-for-legacy, derivation->manifest-entry): Remove. These now exist in a similar form in (guix channels). (build-and-install): Change 'source' to 'instances'. Remove #:url, #:branch, and #:commit. Rewrite using 'channel-instances->manifest'. (channel-list): New procedure. (guix-pull): Parameterize %REPOSITORY-CACHE-DIRECTORY. Call 'honor-lets-encrypt-certificates!' unconditionally. Load ~/.config/guix/channels.scm. Rewrite to use (guix channels). [use-le-certs?]: Remove. * po/guix/POTFILES.in: Add (guix channels). * doc/guix.texi (Invoking guix pull): Group the description of '--url', '--commit', and '--branch'. Remove mention of 'GUIX_PULL_URL'. Add references to "Channels". Document '--channels'. (Channels): New node. (Defining Packages): Link to "Channels" instead of "Package Modules". (Invoking guix edit): Link to "Package Modules" instead of "Defining Packages". (Package Modules): Document both GUIX_PACKAGE_PATH and channels. Ludovic Courtès
2018-08-27pull: Use (git) and (guix git) unconditionally....The autoload hack was added a year ago, before 0.14.0, i.e., before any release would depend on Guile-Git. Both 0.14.0 and 0.15.0 required Guile-Git, and 'guix pull' now automatically pulls it in, so this hack is no longer necessary. * guix/scripts/pull.scm: Use (git) and (guix git). Remove top-level call to 'module-autoload!'. (ensure-guile-git!): Remove. (guix-pull): Remove call to 'ensure-guile-git!'. Ludovic Courtès
2018-07-13pull: Display new/upgraded packages upon completion....* guix/scripts/pull.scm (display-profile-news): New procedure. (build-and-install): Call it. (display-new/upgraded-packages): Add #:heading and honor it. Ludovic Courtès