GNU bug report logs -
#78462
[PATCH 1/2] refresh: Allow specifying a partial version via the version specification.
Previous Next
To reply to this bug, email your comments to 78462 AT debbugs.gnu.org.
There is no need to reopen the bug first.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
guix <at> cbaines.net, gabriel <at> erlikon.ch, dev <at> jpoiret.xyz, ludo <at> gnu.org, othacehe <at> gnu.org, maxim.cournoyer <at> gmail.com, zimon.toutoune <at> gmail.com, me <at> tobias.gr, guix-patches <at> gnu.org
:
bug#78462
; Package
guix-patches
.
(Sat, 17 May 2025 05:41:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
:
New bug report received and forwarded. Copy sent to
guix <at> cbaines.net, gabriel <at> erlikon.ch, dev <at> jpoiret.xyz, ludo <at> gnu.org, othacehe <at> gnu.org, maxim.cournoyer <at> gmail.com, zimon.toutoune <at> gmail.com, me <at> tobias.gr, guix-patches <at> gnu.org
.
(Sat, 17 May 2025 05:41:01 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
* guix/scripts/refresh.scm (update-specification->update-spec): Flag the
update-spec as partial when it is prefixed with '~'.
* tests/guix-refresh.sh: Test it.
* doc/guix.texi (Invoking guix refresh): Document it.
Change-Id: Iab4482d9367105f6ffcd2d6a49148736c93d53e4
---
doc/guix.texi | 11 +++++++++++
guix/scripts/refresh.scm | 7 +++++--
tests/guix-refresh.sh | 20 ++++++++++++++++++++
3 files changed, 36 insertions(+), 2 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 8e73685a216..584a42b6a79 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -15147,6 +15147,17 @@ Invoking guix refresh
gnu/packages/qt.scm:452:13: qtbase would be upgraded from 5.15.8 to 5.15.10
@end example
+@cindex partial version specification, guix refresh
+A per-package equivalent to --target-version is made available by
+prefixing the version specification with the @samp{~} (tilde) character.
+For example:
+
+@example
+$ guix refresh bash=~5 guile=~3
+gnu/packages/guile.scm:354:13: guile would be upgraded from 3.0.9 to 3.0.10
+gnu/packages/bash.scm:150:15: bash would be upgraded from 5.1.16 to 5.2.37
+@end example
+
Sometimes the upstream name differs from the package name used in Guix,
and @command{guix refresh} needs a little help. Most updaters honor the
@code{upstream-name} property in package definitions, which can be used
diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm
index 2d086073284..4a94ec637bb 100644
--- a/guix/scripts/refresh.scm
+++ b/guix/scripts/refresh.scm
@@ -231,8 +231,11 @@ (define (update-specification->update-spec spec fallback-version)
(match (string-rindex spec #\=)
(#f (update-spec (specification->package spec) fallback-version
(not (not fallback-version))))
- (idx (update-spec (specification->package (substring spec 0 idx))
- (substring spec (1+ idx))))))
+ (idx (let ((version (substring spec (1+ idx)))
+ (package (specification->package (substring spec 0 idx))))
+ (if (string-prefix? "~" version)
+ (update-spec package (string-drop version 1) #t) ;partial
+ (update-spec package version))))))
(define (options->update-specs opts)
"Return the list of <update-spec> records requested by OPTS, honoring
diff --git a/tests/guix-refresh.sh b/tests/guix-refresh.sh
index 0f1af8cae7c..e287f37717f 100644
--- a/tests/guix-refresh.sh
+++ b/tests/guix-refresh.sh
@@ -126,6 +126,12 @@ case "$(guix refresh -t test guile --target-version=2.0.0 2>&1)" in
*) false;;
esac
+guix refresh -t test guile=~2.0.0 # XXX: should return non-zero?
+case "$(guix refresh -t test guile=~2.0.0 2>&1)" in
+ *"failed to find"*"2.0.0"*) true;;
+ *) false;;
+esac
+
# Partial target version => select the newest release prefixed by it.
guix refresh -t test guile --target-version=3 # XXX: should return non-zero?
case "$(guix refresh -t test guile --target-version=3 2>&1)" in
@@ -133,6 +139,20 @@ case "$(guix refresh -t test guile --target-version=3 2>&1)" in
*) false;;
esac
+# Partial spec version => select the newest release prefixed by it.
+guix refresh -t test guile=~3 # XXX: should return non-zero?
+case "$(guix refresh -t test guile=~3 2>&1)" in
+ *"would be upgraded"*"3.13.3"*) true;;
+ *) false;;
+esac
+
+# Conflicting --target-version and spec: spec wins
+guix refresh -t test guile=~3 --target-version=1 # XXX: should return non-zero?
+case "$(guix refresh -t test guile=~3 2>&1)" in
+ *"would be upgraded"*"3.13.3"*) true;;
+ *) false;;
+esac
+
for spec in "guile=1.6.4" "guile <at> 3=1.6.4"
do
guix refresh -t test "$spec"
base-commit: 3fadea42548389141e84a8481d271ac7280de7bc
--
2.49.0
Forcibly Merged 78462 78463.
Request was from
Maxim Cournoyer <maxim.cournoyer <at> gmail.com>
to
control <at> debbugs.gnu.org
.
(Sat, 17 May 2025 05:45:02 GMT)
Full text and
rfc822 format available.
Information forwarded
to
guix-patches <at> gnu.org
:
bug#78462
; Package
guix-patches
.
(Sun, 18 May 2025 21:04:03 GMT)
Full text and
rfc822 format available.
Message #10 received at 78462 <at> debbugs.gnu.org (full text, mbox):
Maxim Cournoyer <maxim.cournoyer <at> gmail.com> writes:
> * guix/scripts/refresh.scm (update-specification->update-spec): Flag the
> update-spec as partial when it is prefixed with '~'.
> * tests/guix-refresh.sh: Test it.
> * doc/guix.texi (Invoking guix refresh): Document it.
>
> Change-Id: Iab4482d9367105f6ffcd2d6a49148736c93d53e4
LGTM!
This bug report was last modified 24 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.