From: "pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de>
To: Nigko Yerden <nigko.yerden@gmail.com>
Cc: Attila Lendvai <attila@lendvai.name>, guix-devel@gnu.org
Subject: Re: Cookbook recipe from "The Repository as a Channel" section does not work for Guix with properly configured GUILE_LOAD_PATH
Date: Fri, 23 Aug 2024 17:47:28 +0200 [thread overview]
Message-ID: <87ed6f5jhr.fsf@pelzflorian.de> (raw)
In-Reply-To: <5224b08c-90bb-4822-a89f-f6cf1bf8a6a9@gmail.com> (Nigko Yerden's message of "Fri, 23 Aug 2024 10:07:49 +0500")
Hello Nigko. I believe that it is natural to think local-file were the
right procedure to use, and it could be used with relative path. Your
work-around puts in an absolute path, which perhaps really is what we
should put in the cookbook and guile-channel and blog post.
If a relative path is bad, we should warn against `local-file' with
relative paths in the manual and cookbook, and not just change the
example. Or yet rather make a change to `local-file' so calling it with
"../.." relative paths is treated right in all cases. Your diff makes
it right in more cases.
I believe `local-file' already is symlink-resolving in most cases:
Nigko Yerden <nigko.yerden@gmail.com> writes:
> pelzflorian (Florian Pelz) wrote:
>> But then again, the current current-source-directory
>> already does follow symlinks in nearly all cases, even in configuration
>> files
> Don't see it neither in the code nor in our examples. 'syntax-source' doesn't
> do this. The second branch of 'if' in 'absolute-dirname' bringing in
> 'canonicalize-path' is never executed in the examples (remember, the original
> patch didn't work because of this).
>
>> but actually I do not know why `local-file', when
>> calling `absolute-dirname', takes this case of `if'.
> Only the first branch of 'if' is executed in all practical cases I can
> imagine.
While processing guile-package.scm,
(search-path %load-path "guile-package.scm")
returns an absolute path if and only if guile-package.scm is in the
load-path, like when using it from a channel. Then, your diff makes it
resolve symlinks.
If the configuration or package file is not in the load-path,
guile-package.scm is returned, absolute-dirname’s other `if' branch
calls `canonicalize-path' on all but the basename and directory symlinks
already got resolved.
Do I misunderstand? I think symlinks are followed by design here.
(I wonder if such non-channel evaluation might cause problems when a
non-channel scheme file has the same name as a file in a channel. This
might be a rationale for never using local-file with relative paths.)
In a guix repl evaluating a file at a path with symlinks, containing a
call to the built-in pk procedure on (current-source-directory),
(let ((f (open-input-file "/tmp/a/b/c/a/b/c/d.scm")))
(eval (read f) (interaction-environment))
(eval (read f) (interaction-environment))
(eval (read f) (interaction-environment))
(eval (read f) (interaction-environment)) )
all unnecessary path components remain, no symlinks are resolved and
absolute-dirname is not called at all. This weird usage is unlike guix
home/system reconfigure or what normal people do.
>> Why does current-source-directory use syntax-source?
> What can it use instead? Related syntaxes such as
> 'current-source-location' and 'current-filename' are all using
> 'syntax-source' under the hood.
`current-module' from your work-around does not use syntax-source, but
outside modules cannot replace more powerful current-source-directory.
Regards,
Florian
next prev parent reply other threads:[~2024-08-23 15:49 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-13 12:45 Cookbook recipe from "The Repository as a Channel" section does not work for Guix with properly configured GUILE_LOAD_PATH Nigko Yerden
2024-08-13 14:38 ` pelzflorian (Florian Pelz)
2024-08-13 15:06 ` Nigko Yerden
2024-08-13 17:25 ` pelzflorian (Florian Pelz)
2024-08-13 17:49 ` Nigko Yerden
2024-08-14 15:35 ` pelzflorian (Florian Pelz)
2024-08-14 16:40 ` pelzflorian (Florian Pelz)
2024-08-14 19:29 ` pelzflorian (Florian Pelz)
2024-08-15 4:11 ` Nigko Yerden
2024-08-18 21:33 ` pelzflorian (Florian Pelz)
2024-08-19 7:43 ` Nigko Yerden
2024-08-19 19:28 ` pelzflorian (Florian Pelz)
2024-08-20 7:18 ` Nigko Yerden
2024-08-20 16:49 ` pelzflorian (Florian Pelz)
2024-08-22 4:45 ` pelzflorian (Florian Pelz)
2024-08-22 9:53 ` Nigko Yerden
2024-08-22 13:22 ` Nigko Yerden
2024-08-22 16:00 ` pelzflorian (Florian Pelz)
2024-08-23 5:07 ` Nigko Yerden
2024-08-23 15:47 ` pelzflorian (Florian Pelz) [this message]
2024-08-23 16:25 ` pelzflorian (Florian Pelz)
2024-08-24 14:47 ` Nigko Yerden
2024-08-26 8:50 ` pelzflorian (Florian Pelz)
2024-08-28 12:36 ` Nigko Yerden
2024-08-28 16:40 ` pelzflorian (Florian Pelz)
2024-08-29 6:17 ` Nigko Yerden
2024-08-19 9:30 ` Nigko Yerden
2024-08-19 16:17 ` Nigko Yerden
2024-08-14 14:00 ` Attila Lendvai
2024-08-15 16:34 ` Nigko Yerden
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ed6f5jhr.fsf@pelzflorian.de \
--to=pelzflorian@pelzflorian.de \
--cc=attila@lendvai.name \
--cc=guix-devel@gnu.org \
--cc=nigko.yerden@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).