diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm index 4b9c5f210d..9699c70c6d 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 Ludovic Courtès +;;; Copyright © 2012-2022 Ludovic Courtès ;;; Copyright © 2013 Nikita Karetnikov ;;; Copyright © 2013, 2015 Mark H Weaver ;;; Copyright © 2014, 2016 Alex Kost @@ -139,6 +139,7 @@ denote ranges as interpreted by 'matching-generations'." (define* (build-and-use-profile store profile manifest #:key + dry-run? (hooks %default-profile-hooks) allow-collisions? bootstrap?) @@ -154,6 +155,7 @@ hooks\" run when building the profile." (prof (derivation->output-path prof-drv))) (cond + (dry-run? #t) ((and (file-exists? profile) (and=> (readlink* profile) (cut string=? prof <>))) (format (current-error-port) (G_ "nothing to be done~%"))) @@ -1069,6 +1071,7 @@ processed, #f otherwise." trans #:dry-run? dry-run?) (build-and-use-profile store profile new + #:dry-run? dry-run? #:allow-collisions? allow-collisions? #:bootstrap? bootstrap?))))) diff --git a/tests/guix-package-net.sh b/tests/guix-package-net.sh index a3beb238fe..1cdeff773a 100644 --- a/tests/guix-package-net.sh +++ b/tests/guix-package-net.sh @@ -196,6 +196,16 @@ EOF guix package --bootstrap -p "$profile" -i gcc-bootstrap installed="`guix package -p "$profile" -I | cut -f1`" +# Dry-run upgrade. Make sure no new generation is created when things are +# already in store and '-n' is used: . +V_MINOR=0 +export V_MINOR +profile_before="$(readlink "$profile")" +guix package -p "$profile" --bootstrap -L "$module_dir" -u # build the profile +guix package -p "$profile" --roll-back +guix package -p "$profile" --bootstrap -L "$module_dir" -u . -n # check '-n' +test "$(readlink "$profile")" = "$profile_before" + for i in 1 2 do V_MINOR="$i"