3

After updating to magit 20190517.1750 from ELPA, I've got this warning

slot-missing: Invalid slot name: "#<transient-prefix transient-prefix>", :incompatible

which breaks a lot of magit functionality. Does somebody know a fix or a quick workaround?

The Dude
  • 463
  • 3
  • 6

2 Answers2

2

Update the transient package and restart Emacs.


  1. The incompatible object slot was added fairly recently to the transient-prefix class. I do not use package.el myself, but believe that normally it updates all packages at once but also supports just updating one package. Maybe you did the latter.

  2. Updating a package does not unload the previously loaded version and then load the new version. It is even possible to end up with half of the old version and half of the new version being loaded. E.g. if the library foo-bar is already loaded before you update the package foo and then you do something that causes library foo-baz to be loaded, then the foo-bar from the previous version is loaded alongside the foo-baz of the new version.

So maybe you actually did update transient at the same time at magit, but because transient was already loaded and (parts of) magit were not you ended up with incompatible versions installed.

You should always restart Emacs after updating packages. You can also forgo doing so (it often works or you won't notice the issues), but before you report an issue you must restart to test whether that "fixes" the issue.


If after doing all that you still get this error, then something™ is trying to use transient before that has been loaded. Explicitly (require 'transient) near the beginning of your init file might be good enough as a workaround. But of course it would be better to figure out the identity of something™.

tarsius
  • 25,298
  • 4
  • 69
  • 109
  • 1
    Can you elaborate? If this is because the package needs to be recompiled, mention it. As is, your answer is lacking in content. –  May 18 '19 at 23:20
  • Well, I've tried to remove `magit` and `transient` from ELPA packages. Restarted Emacs, reinstalled them, restarted Emacs. I've got a different but related error now: `progn: Symbol’s function definition is void: transient-append-suffix` I'd rather stick to the ELPA distribution for now as I don't want to spend to much time on package management issues. – The Dude May 19 '19 at 14:59
  • Sounds like something is trying to use `transient` before that has been loaded. Explicitly `(require 'transient)` near the beginning of your init file might be good enough as a workaround. – tarsius May 19 '19 at 20:09
  • I've tried to require transient early and now I seem to be back to the magit problem: `error: magit-dispatch is not a transient command`. – The Dude May 30 '19 at 09:05
  • @TheDude did you ever fix this? I'm getting slot errors from forge after a while away from emacs and a package update from straight. – RichieHH Jul 03 '23 at 06:57
2

So the solutions seem to be as @tarsius suggested to (require 'transient) package early on in the init.el and to reinstall the magit package from ELPA. Now everything seem to work again.

The Dude
  • 463
  • 3
  • 6