summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Cournoyer <maxim.cournoyer@gmail.com>2025-04-04 23:15:22 +0900
committerChristopher Baines <mail@cbaines.net>2025-04-06 12:22:41 +0100
commit000e0b067c171bab43d7aa7abb298fff5f6d9b5c (patch)
treeffb57688aa3245725e860dbb856151d5d7164240
parent803a0b0f50bbd788ad9f64e529166ed1bd620e2d (diff)
upstream: Do not update to same version.
Previously, 'guix refresh --update' would do actually rewrite the file with the same version/hash information when the target version was the same as the current version: guix refresh --update idutils=4.6 idutils.scm: warning: downgrading 'idutils' from 4.6 to 4.6 [...] idutils.scm: idutils: updating from version 4.6 to version 4.6... This changes handles this case so that it does and prints nothing. * guix/upstream.scm (package-update): Use `version-compare' to distinguish the equal versions case. Change-Id: I079e030d573f5968725ef13b3f626e2f8d02cb2f
-rw-r--r--guix/upstream.scm63
-rw-r--r--tests/guix-refresh.sh9
2 files changed, 43 insertions, 29 deletions
diff --git a/guix/upstream.scm b/guix/upstream.scm
index af09f62088..259c074412 100644
--- a/guix/upstream.scm
+++ b/guix/upstream.scm
@@ -525,39 +525,44 @@ downgrade. When PARTIAL-VERSION? is true, treat VERSION as having been only
partially specified, in which case the package will be updated to the newest
compatible version if there are no exact match for VERSION. For example,
providing \"46\" as the version may update the package to version \"46.6.4\"."
+ (define (update* source)
+ (let ((method (match (package-source package)
+ ((? origin? origin)
+ (origin-method origin))
+ (_
+ #f))))
+ (match (assq method %method-updates)
+ (#f
+ (raise (make-compound-condition
+ (formatted-message (G_ "cannot download for \
+this method: ~s")
+ method)
+ (condition
+ (&error-location
+ (location (package-location package)))))))
+ ((_ . update)
+ (update store package source
+ #:key-server key-server
+ #:key-download key-download)))))
+
(match (package-latest-release package updaters
#:version version
#:partial-version? partial-version?)
((? upstream-source? source)
- (if (or (version>? (upstream-source-version source)
- (package-version package))
- (and version
- (begin
- (warning (package-location package)
- (G_ "downgrading '~a' from ~a to ~a~%")
- (package-name package)
- (package-version package)
- (upstream-source-version source))
- #t)))
- (let ((method (match (package-source package)
- ((? origin? origin)
- (origin-method origin))
- (_
- #f))))
- (match (assq method %method-updates)
- (#f
- (raise (make-compound-condition
- (formatted-message (G_ "cannot download for \
-this method: ~s")
- method)
- (condition
- (&error-location
- (location (package-location package)))))))
- ((_ . update)
- (update store package source
- #:key-server key-server
- #:key-download key-download))))
- (values #f #f #f)))
+ (case (version-compare (upstream-source-version source)
+ (package-version package))
+ ((>)
+ (update* source))
+ ((<)
+ (and version
+ (warning (package-location package)
+ (G_ "downgrading '~a' from ~a to ~a~%")
+ (package-name package)
+ (package-version package)
+ (upstream-source-version source)))
+ (update* source))
+ (else
+ (values #f #f #f))))
(#f
;; Warn rather than abort so that other updates can still take place.
(if version
diff --git a/tests/guix-refresh.sh b/tests/guix-refresh.sh
index b5b38189cb..0f1af8cae7 100644
--- a/tests/guix-refresh.sh
+++ b/tests/guix-refresh.sh
@@ -44,6 +44,15 @@ case "$(guix refresh -t test idutils 2>&1)" in
*"$idutils_version"*"already the latest version"*) true;;
*) false;;
esac
+
+# No-op when updating to same version.
+case "$(guix refresh -t test -u idutils \
+--target-version=$idutils_version 2>&1)" in
+ *downgrading*) false;;
+ *updating*) false;;
+ *) true;;
+esac
+
guix refresh -t test libreoffice # XXX: should return non-zero?
case "$(guix refresh -t test libreoffice 2>&1)" in
*"greater than the latest known version"*"1.0"*) true;;