[PATCH] scripts: edit: Fix relative file-name with 'load-path' option.

  • Done
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Simon Tournier
Owner
unassigned
Submitted by
Simon Tournier
Severity
normal
S
S
Simon Tournier wrote on 2 Nov 2023 21:34
(address . guix-patches@gnu.org)(name . Simon Tournier)(address . zimon.toutoune@gmail.com)
0b6f9a9ec4d5146dfa3cf6182bba38ce889d6fac.1698956890.git.zimon.toutoune@gmail.com
* guix/scripts/edit.scm (search-path*): Use 'canonicalize-path' if
'search-path' fails.

Change-Id: I891d63d0d28577a7d1732fc59435828ecc0a5c5a
---
guix/scripts/edit.scm | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

Hi,

Using Guix aabfddb, consider:

Toggle snippet (17 lines)
$ guix show -L src/example hi
name: hi
version: 2.10
outputs:
+ out: everything
systems: x86_64-linux i686-linux
dependencies: gawk@5.2.1
location: src/example/first.scm:9:2
homepage: https://www.gnu.org/software/hello/
license: GPL 3+
synopsis: Hello, GNU world: An example GNU package
description: Guess what GNU Hello prints!

$ 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.

WDYT?


Cheers,
simon


Toggle diff (21 lines)
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~%")

base-commit: 28ebbe2be8829a4767b9789c6353ad5e826d1164
--
2.41.0
L
L
Ludovic Courtès wrote on 5 Nov 2023 15:58
(name . Simon Tournier)(address . zimon.toutoune@gmail.com)
875y2g1c3f.fsf@gnu.org
Hi!

Simon Tournier <zimon.toutoune@gmail.com> skribis:

Toggle quote (3 lines)
> * guix/scripts/edit.scm (search-path*): Use 'canonicalize-path' if
> 'search-path' fails.

[...]

Toggle quote (10 lines)
> $ 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.

[...]

Toggle quote (9 lines)
> (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’.
S
S
Simon Tournier wrote on 5 Nov 2023 16:53
(name . Ludovic Courtès)(address . ludo@gnu.org)
87v8agtcwe.fsf@gmail.com
Hi,

On Sun, 05 Nov 2023 at 15:58, Ludovic Courtès <ludo@gnu.org> wrote:

Toggle quote (4 lines)
> 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
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 66901@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 66901
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch