guix package: '--upgrade' preserves package order.

Fixes <https://bugs.gnu.org/31142>.
Reported by Chris Marusich <cmmarusich@gmail.com>.

* guix/scripts/package.scm (options->installable)[upgraded]: Use 'fold'
instead of 'fold-right'.  This reverts
eca16a3d1d.
* tests/guix-package-net.sh: Add 'guix package u' test.
This commit is contained in:
Ludovic Courtès 2019-01-15 11:31:16 +01:00
parent 74a8b2cca1
commit 35225dc579
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 38 additions and 7 deletions

View file

@ -604,12 +604,12 @@ (define upgrade?
(options->upgrade-predicate opts))
(define upgraded
(fold-right (lambda (entry transaction)
(if (upgrade? (manifest-entry-name entry))
(transaction-upgrade-entry entry transaction)
transaction))
transaction
(manifest-entries manifest)))
(fold (lambda (entry transaction)
(if (upgrade? (manifest-entry-name entry))
(transaction-upgrade-entry entry transaction)
transaction))
transaction
(manifest-entries manifest)))
(define to-install
(filter-map (match-lambda

View file

@ -1,5 +1,5 @@
# GNU Guix --- Functional package management for GNU
# Copyright © 2012, 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2012, 2013, 2014, 2015, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
#
# This file is part of GNU Guix.
@ -167,6 +167,37 @@ then false; fi
guix package -p "$profile" -p "$profile_alt" --search-paths \
| grep "LIBRARY_PATH.*$profile/lib.$profile_alt/lib"
# Simulate an upgrade and make sure the package order is preserved.
module_dir="t-guix-package-net-$$"
trap 'rm -rf "$module_dir"' EXIT
mkdir "$module_dir"
cat > "$module_dir/new.scm" <<EOF
(define-module (new)
#:use-module (guix)
#:use-module (gnu packages bootstrap))
(define-public new-guile
(package (inherit %bootstrap-guile)
(version (string-append "42." (getenv "V_MINOR")))))
(define-public new-gcc
(package (inherit %bootstrap-gcc)
(version (string-append "77." (getenv "V_MINOR")))))
EOF
guix package --bootstrap -p "$profile" -i gcc-bootstrap
installed="`guix package -p "$profile" -I | cut -f1`"
for i in 1 2
do
V_MINOR="$i"
export V_MINOR
guix package -p "$profile" --bootstrap -L "$module_dir" -u .
post_upgrade="`guix package -p "$profile" -I | cut -f1`"
test "$post_upgrade" = "$installed"
done
#
# Try with the default profile.
#