* bug#67048: guix refresh -u -L does not work with relative path
2023-11-10 17:11 bug#67048: guix refresh -u -L does not work with relative path Andreas Enge
[not found] ` <handler.67048.B.16996363526587.ack@debbugs.gnu.org>
@ 2023-11-13 18:28 ` Simon Tournier
2023-11-14 17:52 ` Simon Tournier
2023-11-14 17:28 ` bug#67048: [PATCH] DRAFT guix: upstream: Allow relative file name Simon Tournier
2 siblings, 1 reply; 5+ messages in thread
From: Simon Tournier @ 2023-11-13 18:28 UTC (permalink / raw)
To: Andreas Enge, 67048; +Cc: Ludovic Courtès
Hi,
On Fri, 10 Nov 2023 at 18:11, Andreas Enge <andreas@enge.fr> wrote:
> guix refresh -u -L proj python-numpy-illustrated
> yields the error
> proj/example.scm:10:2: python-numpy-illustrated: updating from version 0.3 to version 0.3.1...
> proj/example.scm:10:2: warning: python-numpy-illustrated: no `version' field in source; skipping
The issue is from several layers; (search-path %load-path file) returns
#false. See:
1. package-field-location from (guix packages)
called by update-package-source from (guix upstream)
2. update-package-source from (guix upstream)
called by package-update from same module
called by update-package from (guix scripts refresh)
The issue looks similar as #66901 [1]. Well, I have tried to improve
the situation by setting some ’canonicalize-path’ here or there.
However, then the next issue is from the call ’(absolute-location loc)’
in ’update-package-source’ from module (guix upstream); it returns:
--8<---------------cut here---------------start------------->8---
Backtrace:
In ice-9/boot-9.scm:
724:2 19 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
In ice-9/eval.scm:
619:8 18 (_ #(#(#<directory (guile-user) 7f45f4f17c80>)))
In guix/ui.scm:
2324:7 17 (run-guix . _)
2287:10 16 (run-guix-command _ . _)
In ice-9/boot-9.scm:
1752:10 15 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
1752:10 14 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In guix/store.scm:
659:37 13 (thunk)
2168:25 12 (run-with-store #<store-connection 256.99 7f45d56dc1e0> #<procedure 7f45d5385ca0 at ice-9/eval.scm:333:13 (a)> #:guile-for-build _ #:system _ …)
In ice-9/eval.scm:
191:27 11 (_ #(#(#<directory (guix scripts refresh) 7f45ea7c1d20> #<procedure 7f45d5385d60 at ice-9/eval.scm:333:13 (a)>) (#<<update-spec> package…>) …))
In ice-9/boot-9.scm:
152:2 10 (with-fluid* _ _ _)
152:2 9 (with-fluid* _ _ _)
152:2 8 (with-fluid* _ _ _)
In ice-9/eval.scm:
619:8 7 (_ #(#(#<directory (guix scripts refresh) 7f45ea7c1d20> (#<<update-spec> package: #<package python-numpy-illustrated@0.3 proj/example.s…>) …)))
In srfi/srfi-1.scm:
634:9 6 (for-each #<procedure 7f45d41d1280 at ice-9/eval.scm:333:13 (a)> (#<<update-spec> package: #<package python-numpy-illustrated@0.3 proj/exam…>))
In ice-9/eval.scm:
619:8 5 (_ #(#(#(#(#(#(#(#(#(#(#(#(#<directory (guix upstream) 7f45e9af08c0>) #<package python-numpy-illustrated@0.…> …) …) …) …) …) …) …) …) …) …) …))
155:9 4 (_ #(#(#(#(#(#(#(#(#(#(#(#(#<directory (guix upstream) 7f45e9af08c0>) #<package python-numpy-illustrated@0.…> …) …) …) …) …) …) …) …) …) …) …))
In guix/diagnostics.scm:
354:20 3 (absolute-location #<<location> file: "proj/example.scm" line: 10 column: 2>)
In unknown file:
2 (raise #<&formatted-message format: "file '~a' not found on load path\n" arguments: ("proj/example.scm")>)
In ice-9/boot-9.scm:
1685:16 1 (raise-exception _ #:continuable? _)
1685:16 0 (raise-exception _ #:continuable? _)
ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Wrong type (expecting exact integer): #<&formatted-message format: "file '~a' not found on load path\n" arguments: ("proj/example.scm")>
--8<---------------cut here---------------end--------------->8---
Hum, it needs to be investigated…
1: https://issues.guix.gnu.org/66901
Cheers,
simon
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#67048: [PATCH] DRAFT guix: upstream: Allow relative file name.
2023-11-10 17:11 bug#67048: guix refresh -u -L does not work with relative path Andreas Enge
[not found] ` <handler.67048.B.16996363526587.ack@debbugs.gnu.org>
2023-11-13 18:28 ` bug#67048: guix refresh -u -L does not work with relative path Simon Tournier
@ 2023-11-14 17:28 ` Simon Tournier
2 siblings, 0 replies; 5+ messages in thread
From: Simon Tournier @ 2023-11-14 17:28 UTC (permalink / raw)
To: 67048
Cc: Simon Tournier, Christopher Baines, Josselin Poiret,
Ludovic Courtès, Mathieu Othacehe, Ricardo Wurmus,
Simon Tournier, Tobias Geerinckx-Rice
Fixes <https://issues.guix.gnu.org/issue/67048>.
Reported by Andreas Enge <andreas@enge.fr>.
* guix/diagnostics.scm (absolute-location): Return FILE from
'canonicalize-path' when 'search-path' fails.
* guix/packages.scm (package-field-location): New procedure 'file-name' and
use it. When 'search-path' does not find FILE in %LOAD-PATH, try
'canonicalize-path'.
* guix/upstream.scm (update-package-source): When 'search-path' fails, test if
FILE exists.
Change-Id: I9337041b43e17ace82416db5840f04113f9544fc
---
guix/diagnostics.scm | 13 +++++-----
guix/packages.scm | 57 +++++++++++++++++++++++++-------------------
guix/upstream.scm | 6 +++--
3 files changed, 43 insertions(+), 33 deletions(-)
diff --git a/guix/diagnostics.scm b/guix/diagnostics.scm
index 3f1f527b43..f79df1ca2d 100644
--- a/guix/diagnostics.scm
+++ b/guix/diagnostics.scm
@@ -349,12 +349,13 @@ (define (absolute-location loc)
;; 'search-path' might return #f in obscure cases, such as
;; when %LOAD-PATH includes "." or ".." and LOC comes from a
;; file in a subdirectory thereof.
- (match (search-path %load-path (location-file loc))
- (#f
- (raise (formatted-message
- (G_ "file '~a' not found on load path")
- (location-file loc))))
- (str str)))
+ (let ((file (location-file loc)))
+ (or (search-path %load-path file)
+ (and (file-exists? file)
+ (canonicalize-path file))
+ (raise (formatted-message
+ (G_ "file '~a' not found on load path")
+ file)))))
(location-line loc)
(location-column loc)))
diff --git a/guix/packages.scm b/guix/packages.scm
index e2e82692ad..ea05b739a8 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -750,37 +750,44 @@ (define (deprecated-package old-name p)
(define (package-field-location package field)
"Return the source code location of the definition of FIELD for PACKAGE, or
#f if it could not be determined."
+ (define (file-name relative-file file-found line column)
+ (catch 'system-error
+ (lambda ()
+ ;; In general we want to keep relative file names for modules.
+ (call-with-input-file file-found
+ (lambda (port)
+ (go-to-location port line column)
+ (match (read port)
+ ((or ('package inits ...)
+ ('package/inherit _ inits ...))
+ (let ((field (assoc field inits)))
+ (match field
+ ((_ value)
+ (let ((loc (and=> (source-properties value)
+ source-properties->location)))
+ (and loc
+ ;; Preserve the original file name, which may be a
+ ;; relative file name.
+ (set-field loc (location-file) relative-file))))
+ (_
+ #f))))
+ (_
+ #f)))))
+ (lambda _
+ #f)))
+
(match (package-location package)
(($ <location> file line column)
(match (search-path %load-path file)
((? string? file-found)
- (catch 'system-error
- (lambda ()
- ;; In general we want to keep relative file names for modules.
- (call-with-input-file file-found
- (lambda (port)
- (go-to-location port line column)
- (match (read port)
- ((or ('package inits ...)
- ('package/inherit _ inits ...))
- (let ((field (assoc field inits)))
- (match field
- ((_ value)
- (let ((loc (and=> (source-properties value)
- source-properties->location)))
- (and loc
- ;; Preserve the original file name, which may be a
- ;; relative file name.
- (set-field loc (location-file) file))))
- (_
- #f))))
- (_
- #f)))))
- (lambda _
- #f)))
+ (file-name file file-found line column))
(#f
;; FILE could not be found in %LOAD-PATH.
- #f)))
+ (let ((file-found (and (file-exists? file)
+ (canonicalize-path file))))
+ (if file-found
+ (file-name file file-found line column)
+ #f)))))
(_ #f)))
(define-syntax-rule (this-package-input name)
diff --git a/guix/upstream.scm b/guix/upstream.scm
index e28ae12f3f..5403aa833d 100644
--- a/guix/upstream.scm
+++ b/guix/upstream.scm
@@ -645,8 +645,10 @@ (define* (update-package-source package source hash)
((? git-reference? ref)
(git-reference-commit ref))
(_ #f)))
- (file (and=> (location-file loc)
- (cut search-path %load-path <>))))
+ (file (or (and=> (location-file loc)
+ (cut search-path %load-path <>))
+ (and=> (location-file loc)
+ file-exists?))))
(if file
;; Be sure to use absolute filename. Replace the URL directory
;; when OLD-URL is available; this is useful notably for
base-commit: 3d15e9e5bcd7cdad33f9832e4956f494c47e1937
--
2.41.0
^ permalink raw reply related [flat|nested] 5+ messages in thread