~ruther/guix-local

fc8fdcf56ecc159cb4e85ffdde60a54c4fa5c04f — Ludovic Courtès 8 years ago 6d38233
guix package: 'guix package -r PKG -u' does not upgrade PKG.

Fixes <http://bugs.gnu.org/27262>.
Reported by Mark H Weaver <mhw@netris.org>.

* guix/scripts/package.scm (transaction-upgrade-entry): Check if ENTRY
matches 'manifest-transaction-removal-candidate?' and return TRANSACTION
if it does.
(process-actions): Move 'options->removable' from step 2 to step 1.
2 files changed, 28 insertions(+), 5 deletions(-)

M guix/scripts/package.scm
M tests/guix-package.sh
M guix/scripts/package.scm => guix/scripts/package.scm +9 -5
@@ 294,7 294,11 @@ of relevance scores."
        (output (manifest-entry-output old)))
      transaction)))

  (match entry
  (match (if (manifest-transaction-removal-candidate? entry transaction)
             'dismiss
             entry)
    ('dismiss
     transaction)
    (($ <manifest-entry> name version output (? string? path))
     (match (vhash-assoc name (find-newest-available-packages))
       ((_ candidate-version pkg . rest)


@@ 875,11 879,11 @@ processed, #f otherwise."
                              #:dry-run? dry-run?)))))
            opts)

  ;; Then, process normal package installation/removal/upgrade.
  ;; Then, process normal package removal/installation/upgrade.
  (let* ((manifest (profile-manifest profile))
         (step1    (options->installable opts manifest
                                         (manifest-transaction)))
         (step2    (options->removable opts manifest step1))
         (step1    (options->removable opts manifest
                                       (manifest-transaction)))
         (step2    (options->installable opts manifest step1))
         (step3    (manifest-transaction
                    (inherit step2)
                    (install (map transform-entry

M tests/guix-package.sh => tests/guix-package.sh +19 -0
@@ 279,8 279,27 @@ guix package --bootstrap --install-from-file="$module_dir/package.scm"
test "`guix package -A super-non-portable-emacs`" = ""
test "`guix package -s super-non-portable-emacs | grep ^systems:`" = "systems: "

# Don't upgrade packages marked for removal: <http://bugs.gnu.org/27262>.
guix package --bootstrap -p "$profile" -i guile-bootstrap

cat > "$module_dir/foo.scm"<<EOF
(define-module (foo)
  #:use-module (guix)
  #:use-module (gnu packages bootstrap))

(define-public x
  (package (inherit %bootstrap-guile) (version "42")))
EOF

guix package --bootstrap -p "$profile" -r guile-bootstrap -u guile
test ! -f "$profile/bin/guile"
guix package --bootstrap -p "$profile" --roll-back
test -f "$profile/bin/guile"
rm "$profile-2-link"

unset GUIX_PACKAGE_PATH


# Using 'GUIX_BUILD_OPTIONS'.
available="`guix package -A | sort`"
GUIX_BUILD_OPTIONS="--dry-run --no-grafts"