guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Cookbook recipe from "The Repository as a Channel" section does not


From: Nigko Yerden
Subject: Re: Cookbook recipe from "The Repository as a Channel" section does not work for Guix with properly configured GUILE_LOAD_PATH
Date: Thu, 22 Aug 2024 14:53:57 +0500
User-agent: Mozilla Thunderbird

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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]