emacs-eldev / eldev

Elisp development tool
https://emacs-eldev.github.io/eldev/
GNU General Public License v3.0
226 stars 17 forks source link

Emacs 29.1 missing `seq-25` ? #93

Closed Silex closed 9 months ago

Silex commented 9 months ago

Hello,

Can you help figure out why I have this error?

https://github.com/Silex/docker.el/actions/runs/6809956722/job/18517267196

It came out of the blue, it was working before.

doublep commented 9 months ago

Doesn't look like a problem with Eldev. It's probably that some unstable package has a bug that is only triggered in Emacs 29.1. I'd suggest you compare exact dependency versions with a workflow where it "was working before". Most likely a change in one of those resulted in this bug.

Paul

On Thu, 9 Nov 2023 at 10:42, Philippe Vaucher @.***> wrote:

Hello,

Can you help figure out why I have this error?

https://github.com/Silex/docker.el/actions/runs/6809956722/job/18517267196

It came out of the blue, it was working before.

— Reply to this email directly, view it on GitHub https://github.com/emacs-eldev/eldev/issues/93, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABYPBKZLZZID6KMXHHWQWTYDSQOTAVCNFSM6AAAAAA7EIANYGVHI2DSMVQWIX3LMV43ASLTON2WKOZRHE4DKMRSHE2DOMA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

Silex commented 9 months ago

Okay, thanks that makes sense given melpa stable builds without any issue 👍

EDIT actually no stable is quite outdated compared to unstable so that's why. Will compare with the previous build that worked.

Silex commented 9 months ago

Well the only thing that seems to have changed is tablist and the changes are so minor I don't get it:

https://github.com/politza/tablist/compare/master...emacsorphanage:tablist:master

Honestly it really looks like emacs 29.1 is missing the seq-25 library:

Working: https://github.com/Silex/docker.el/actions/runs/6423514290/job/17442172631 Not working: https://github.com/Silex/docker.el/actions/runs/6809956722/job/18519519959

We can see that 28.2 also works: https://github.com/Silex/docker.el/actions/runs/6809956722/job/18519519424

Silex commented 9 months ago

Ok I really ran the exact same code as the previous working one and it's still failing, but I think I maybe found why:

https://github.com/Silex/docker.el/actions/runs/6810836257/job/18519948977

@purcell: maybe emacs 29.1 in nix-emacs-ci recently changed (https://github.com/purcell/nix-emacs-ci/commit/fea8d89381cb064d1f3cb6b7ec95d161f640d0b3) and seq-25 is missing from it?

doublep commented 9 months ago

Seems to be a bug in Emacs itself, actually. However, I'm not sure why it is triggered only on certain version.

To reproduce, save the following Elisp snippet:

(require 'package)
(setf package-user-dir "/tmp/elpa"
      package-archives '(("gnu-devel" . "https://elpa.gnu.org/devel/")))
(package-refresh-contents)
(let ((debug-on-error t))
  (package-install (cadr (assq 'seq package-archive-contents))))

and then from the command line run:

$ emacs --batch --load bug.el

Result here:

$ emacs --batch --load ~/test/test.el
Importing package-keyring.gpg...
Importing package-keyring.gpg...done
Contacting host: elpa.gnu.org:443
Contacting host: elpa.gnu.org:443
Package refresh done
Setting ‘package-selected-packages’ temporarily since "emacs -q" would overwrite customizations
Contacting host: elpa.gnu.org:443
Parsing tar file... 
Parsing tar file...done
Extracting... \ 
Extracting...done
  INFO     Scraping files for loaddefs... 
  INFO     Scraping files for loaddefs...done
Source file ‘/tmp/elpa/seq-2.24.0.20230904.183335/seq.el’ newer than byte-compiled file; using older file
Debugger entered--Lisp error: (file-missing "Cannot open load file" "No such file or directory" "seq-25")
  require(seq-25)
  byte-code("\301\10\302\"\203\16\0\303\304!\210\202\22\0\303\305!\210\306\307!\207" [emacs-version version< "25" require seq-24 seq-25 provide seq] 3)
  #<subr F616e6f6e796d6f75732d6c616d626461_anonymous_lambda_32>(("/tmp/elpa/seq-2.24.0.20230904.183335/seq" . 76))
  ...
purcell commented 9 months ago

Yes, I've hit this too, with my own start-up. Here's the workaround I use to avoid it: https://github.com/purcell/emacs.d/blob/bab418cb1c25e435fb8fafdb7144f8024fc75bc0/lisp/init-elpa.el#L89-L98

purcell commented 9 months ago

After installing the ELPA version of seq, Emacs decides it must re-load seq (presumably because it was already loaded from the built-in version), and then loads seq.el from the downloaded ELPA package. The problem is that at this point it hasn't added the new ELPA package's installation directory to load-path, so when seq.el tries to load seq-25.el, Emacs fails to find that file.

I haven't submitted this upstream, and I couldn't see reports of it elsewhere, so I assumed I was the only person with this curse, or that it was caused by transitive dependencies present in my config. Your concise reproduction example makes it very clear that it's an Emacs bug IMO, so I'd encourage you to report it.

doublep commented 9 months ago

Emacs decides it must re-load seq

That's actually a sane thing to do. I have seen quite a few problems arising from mixing up old and new (after upgrade) packages, including several with Eldev too.

The problem is that at this point it hasn't added the new ELPA package's installation directory to load-path, so it fails to find the seq-25.el file there.

Yep, seems so. I'll add a workaround similar to what you have linked above to Eldev too. Even if they fix it upstream, we still have released buggy Emacs versions to test on.

Your concise reproduction example makes it very clear

Yeah, I'm a reproducer junkie, I have created a lot and I love them. This is basically what you need to do (reduce to a short standalone piece of code) to create a good regression test.

I'd encourage you to report it

Frankly, I hate dealing with Emacs upstream. If someone wishes to do that instead, that would be nice.

purcell commented 9 months ago

I hate dealing with Emacs upstream

I don't enjoy it either, but I'll hit M-x report-emacs-bug on your behalf. :)

Silex commented 9 months ago

Ok thanks for your debuggings guys. I guess I was just unlucky with these particular builds and that the problem will solve itself magically just like it arrived.

purcell commented 9 months ago

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=67025

Silex commented 9 months ago

@purcell: just curious, when bugs like this are found, do they update the 29.1 tarball or do we have to live with this bug until 29.2 is out? I never saw 29.1.1 or 29.1.2 releases like for other softwares.

purcell commented 9 months ago

It'd just get fixed in 29.2 afaik.

Silex commented 9 months ago

FYI here's how I fixed it with your help in my project https://github.com/Silex/docker.el/commit/d1f6d3310471b05df395197099627e3d0670e82d

purcell commented 9 months ago

Ah, good idea only applying the advice in that specific emacs version. I should do that too.

doublep commented 9 months ago

Eldev 1.8 includes a workaround for this bug.

Silex commented 9 months ago

I confirm the bug is gone now thanks to Eldev https://github.com/Silex/docker.el/commit/d5255a65b7240d0038cc417f301b43df05a27922