Message ID | 0b6f9a9ec4d5146dfa3cf6182bba38ce889d6fac.1698956890.git.zimon.toutoune@gmail.com |
---|---|
State | New |
Headers | show |
Series | [bug#66901] scripts: edit: Fix relative file-name with 'load-path' option. | expand |
Hi! Simon Tournier <zimon.toutoune@gmail.com> skribis: > * guix/scripts/edit.scm (search-path*): Use 'canonicalize-path' if > 'search-path' fails. [...] > $ guix edit -L src/example hi > guix edit: error: file 'src/example/first.scm' not found in search path ("src/example" "/gnu/store/yzib23ah0rlmim0j4737g2wrhx1r1q3r-guix-module-union/share/guile/site/3.0" "/gnu/store/84rvhd3j7pfqrh7717cv7ddv2dc8xad5-guile-3.0.9/share/guile/3.0" "/gnu/store/84rvhd3j7pfqrh7717cv7ddv2dc8xad5-guile-3.0.9/share/guile/3.0" "/gnu/store/84rvhd3j7pfqrh7717cv7ddv2dc8xad5-guile-3.0.9/share/guile/site/3.0" "/gnu/store/84rvhd3j7pfqrh7717cv7ddv2dc8xad5-guile-3.0.9/share/guile/site" "/gnu/store/84rvhd3j7pfqrh7717cv7ddv2dc8xad5-guile-3.0.9/share/guile" "/home/simon/.guix-profile/share/guile/site/3.0" "/home/simon/.config/guix/profiles/emacs/emacs/share/guile/site/3.0" "/home/simon/.guix-profile/share/guile/site/3.0" "/home/simon/.config/guix/profiles/emacs/emacs/share/guile/site/3.0") > > > The issue is that the procedure 'search-path' returns #f. It looks similar as > fixed bug #42543 [1] by d10474c38d58bdc676e64336769dc2e00cdfa8ed. > > Here, I do not know how to avoid 'canonicalize-path' when 'search-path' > returns #f because some relative. [...] > (define (search-path* path file) > "Like 'search-path' but exit if FILE is not found." > - (let ((absolute-file-name (search-path path file))) > + (let ((absolute-file-name (or (search-path path file) > + ;; It could be that FILE is a relative name > + ;; i.e., not relative to an element of PATH. > + (and (file-exists? file) > + (canonicalize-path file))))) I think we can remove the ‘canonicalize-path’ call here since we know that FILE denotes a valid file at that point. (That’d avoid the extra work ‘canonicalize-path’ does.) Otherwise LGTM! Thanks, Ludo’.
Hi, On Sun, 05 Nov 2023 at 15:58, Ludovic Courtès <ludo@gnu.org> wrote: > I think we can remove the ‘canonicalize-path’ call here since we know > that FILE denotes a valid file at that point. (That’d avoid the extra > work ‘canonicalize-path’ does.) Thanks for the review. Pushed without canonicalize-path as 1eb3133355ef14d6d4c8648504a7e013338779a8. Cheers, simon
diff --git a/guix/scripts/edit.scm b/guix/scripts/edit.scm index ff2d529bcf..7ec725fc08 100644 --- a/guix/scripts/edit.scm +++ b/guix/scripts/edit.scm @@ -64,7 +64,11 @@ (define %editor (define (search-path* path file) "Like 'search-path' but exit if FILE is not found." - (let ((absolute-file-name (search-path path file))) + (let ((absolute-file-name (or (search-path path file) + ;; It could be that FILE is a relative name + ;; i.e., not relative to an element of PATH. + (and (file-exists? file) + (canonicalize-path file))))) (unless absolute-file-name ;; Shouldn't happen unless somebody fiddled with the 'location' field. (leave (G_ "file '~a' not found in search path ~s~%")