aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-01-15 11:31:16 +0100
committerLudovic Courtès <ludo@gnu.org>2019-01-15 12:05:25 +0100
commit35225dc57996ebc7a5a55462e0e52d85239195d9 (patch)
treeac2db7b9e83448679b1abf2fe7f37962109e51ff
parent74a8b2cca1f522b8230bd7e8533bdebb011d0d2e (diff)
downloadguix-35225dc57996ebc7a5a55462e0e52d85239195d9.tar
guix-35225dc57996ebc7a5a55462e0e52d85239195d9.tar.gz
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 eca16a3d1d9e6b2c064e0105c1015258bf2755f2. * tests/guix-package-net.sh: Add 'guix package u' test.
-rw-r--r--guix/scripts/package.scm12
-rw-r--r--tests/guix-package-net.sh33
2 files changed, 38 insertions, 7 deletions
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 7ff6bfd6d8..5a8fd203ee 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -604,12 +604,12 @@ and upgrades."
(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
diff --git a/tests/guix-package-net.sh b/tests/guix-package-net.sh
index 927c856b23..82c346dd4c 100644
--- a/tests/guix-package-net.sh
+++ b/tests/guix-package-net.sh
@@ -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.
#