Hello Florian, I am sure you have nothing to apologize for. I have been thinking about your suggestion to submit `absolute-dirname' patch. In the Guix manual at the end of the section 6.7 Creating a channel [1] there is the following statement about Guix policy on changing API, not to mention ABI:
"We, Guix developers, never change APIs gratuitously, but we do not commit to freezing APIs either. When you maintain package definitions outside Guix, we consider that the compatibility burden is on you." So it is okay to change the behavior of some procedures if it will improve Guix. But does changing the 'current-source-directory' to follow symlinks improve Guix? This change would adjust Guix in accordance with the documentation... What? Sounds very wrong. Should be the other way round, shouldn't it? Maybe this change would make Guix API more powerful and convenient? I assume that generally there is a practical necessity in determining current source directory both with and without following symlinks, 50/50. If I need to follow symlinks I still may use 'current-source-directory' not following symlinks this way: (dirname (canonicalize-path (string-append (current-source-directory) (current-filename)))) But what should I do if I need not to follow symlinks and 'current-source-directory' follows symlinks. There is no simple way. pelzflorian (Florian Pelz) wrote:
Would you send a patch doing implementing another option to guix-patches? However, I would ask of you to send a patch to guix-patches first and not to guile, since guile takes longer and guix-patches would in my hope get others’ opinions involved.
Yes, I could. I wonder which alternative should I implement? One, discussed earlier, adds an intermediate directory to the channel relative path in the repository. This is simple, but somewhat limited solution. Also changing directory structure may require additional (and undesirable) modifications to other files in guile repository. Thanks to Attila there is another variant [2] which leaves the directory structure intact: (define checkout-dir ;; search %load-path for module filename, ;; follow symlink and return checkout directory (string-append (dirname (canonicalize-path (search-path %load-path (module-filename (current-module))))) "/../..")) (define vcs-file? ;; Return true if the given file is under version control. (or (git-predicate checkout-dir) (const #t))) (define-public guile (package ... (source (local-file checkout-dir "guile-checkout" #:recursive? #t #:select? vcs-file?)) What do you think? Regards, Nigko [1] https://guix.gnu.org/en/manual/devel/en/html_node/Creating-a-Channel.html [2] https://gitlab.com/anigko/test-channel/-/blob/ef07ce6904c16533f0fc21fda74216ce0a38bafd/.guix/modules/test-repo-package.scm ('channel-dir' is a macro instead of a variable, but I don't see any real benefits in using macro here)