GNU bug report logs -
#78462
[PATCH 1/2] refresh: Allow specifying a partial version via the version specification.
Previous Next
Full log
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
This bug report was last modified 25 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.