Subject: bug#22550: (require 'magit) produces error: "no such file or directory" "dash"

From: myglc2 <[email-masked]>
Date: Thu, 04 Feb 2016 10:16:46 -0500

Alex Kost <[email-masked]> writes:

> myglc2 (2016-02-04 07:15 +0300) wrote:
>
>> with magit installed on guixSD following the config shown further below.
>>
>> With init.el containing ...
>>
>> VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
>> (add-to-list 'load-path "/run/current-system/profile/share/emacs/site-lisp")
>> (require 'guix-init nil t)
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> You don't need to add these lines to your init file.  On GuixSD this
> code is executed by "/etc/emacs/site-start.el" (it is a default value of
> EMACSLOADPATH which is honored by Emacs).
>

I added these lies because, without them, '(require 'magit)' produced ...

VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
Debugger entered--Lisp error: (file-error "Cannot open load file" "no such file or directory" "magit")
  require(magit)
  eval((require (quote magit)) nil)
  eval-last-sexp-1(nil) eval-last-sexp(nil)
  call-interactively(eval-last-sexp nil nil)
  command-execute(eval-last-sexp)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

... my EMACSLOADPATH ...

glc4@g1 ~$ echo $EMACSLOADPATH
:/etc/emacs

If I set it to match what you say ...

glc4@g1 ~$ EMACSLOADPATH=/etc/emacs/site-start.el
glc4@g1 ~$ emacs

... produces *Messages* 
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
Warning: Lisp directory `/etc/emacs/site-start.el': Not a directory

timer-set-idle-time: Cannot open load file: not a directory, time-date
Error in post-command-hook (global-font-lock-mode-check-buffers): (file-error "Cannot open load file" "not a directory" "time-date")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

If I set it to match what I think you mean ...

glc4@g1 ~$ EMACSLOADPATH=:/etc/emacs/site-start.el
glc4@g1 ~$ emacs

... I get ...
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
Warning: Lisp directory `/etc/emacs/site-start.el': Not a directory

Directory '/home/glc4/.guix-profile/share/emacs/site-lisp' does not exist.
For information about GNU Emacs and the GNU system, type C-h C-a.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

... If I look in /etc/emacs I see ...
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
  /etc/emacs:
  total used in directory 684 available 225716120
  dr-xr-xr-x   2 root root        4096 Dec 31  1969 .
  drwxrwxr-t 992 root guixbuild 692224 Feb  3 23:33 ..
  lrwxrwxrwx   2 root root          57 Dec 31  1969 site-start.el -> /gnu/store/3jkv4favm6q2vphkm3m4wmpr8p75d6vx-site-start.el
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Note: below, I have EMACSLOADPATH=:/etc/emacs

>> (require 'magit)
>>
>> ... generates this traceback ...
>>
>> VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
>> Debugger entered--Lisp error: (file-error "Cannot open load file" "no such file or directory" "dash")
>>   require(dash)
>>   byte-code("\300\301!\210\300\302!\210\300\303!\210\300\304!\210\300\305!\210\300\306!\210\300\307!\210\300\310!\210\300\311!\210\300\312\313\314#\207" [require cl-lib dash with-editor git-commit magit-core magit-diff magit-apply magit-log format-spec package nil t] 4)
>>   require(magit)
>>   eval((require (quote magit)) nil)
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> Yes, the problem is: currently only a user profile is "inspected" for
> emacs packages, but not a system profile.  I didn't realize people could
> install emacs packages globally, but apparently we should also check the
> system profile as well.  Thanks for reporting!
>
>> Adding emac-dash to config.h.scm does not change the behavior.
>
> There is no need to install emacs-dash explicitly, as magit "propagates"
> this library.  You can do "M-x guix-edit magit" to see that "dash" is in
> "propagated-inputs".

When I do  "M-x guix-edit" I get ...

M-x guix-edit [No match]

... which is what lead me to believe I needed to fix load-path

>
> Now could you try this after starting Emacs:
>
>   M-: (guix-emacs-load-autoloads "/run/current-system/profile")
>
> and check that "M-x magit-status" works after that?

YES! That makes everything work.

So, should I put ...

'(guix-emacs-load-autoloads "/run/current-system/profile")'

... in init.el, in which case guix INFO should say so.

Or, is there something wrong with EMACSLOADPATH?