Tim Cross <theophil...@gmail.com> writes: > David Masterson <dsmaster...@gmail.com> writes: > >> "Michel Schinz" <mic...@schi.nz> writes: >> >>> Just for the record, I also ran into problems when installing Org 9.6 >>> using Emacs' package system on top of an older version that came with >>> Emacs. If I tried to install it as usual (M-x list-packages, then >>> install the package from there), I had errors during compilation related >>> to `org-assert-version`, and then if I restarted Emacs, I would get a >>> fatal error in an unrelated package. >>> >>> I managed to solve that problem by: >>> 1. uninstalling Org 9.6 and exiting Emacs, >>> 2. starting Emacs with -q, >>> 3. installing Org 9.6 from there (using M-x list-packages as usual), >>> 4. restarting Emacs. >> >> Interesting! I tried this (essentially) and it worked for my case. In >> my case, I had a built-in Org-9.3 and I was trying to use list-packages >> to install Org-9.6. I checked that using -q still added Org-9.3 to >> the >> load-path, but, since Org wasn't loaded, the install via list-packages >> worked. >> >> The question is what's the proper way of doing this without '-q'?
[...] > I don't think there is any safe way to install an updated version of > org-mode other than > > 1. Use the -q approach outlined above Thinking about it, this only works if Org is in elpa as melpa (etc.) are not added to package-archives. You'd have to do some handwritten elisp out of *scratch* to setup package-archives if Org-9.6 was still coming out of melpa. That's why this can only be labeled as a hack and not a solution. > 2. Craft your init.el file such that org functionality is only loaded > when explicitly requested and always update as the first action after > starting emacs. In this case, something happened in package-install when trying to install Org-9.6 with a built-in Org-9.3. During the compilation check (.el -> .elc) many files failed because the new 'org-assert-version' macro was not defined. Sort of like, after package-install started working on Org-9.6, org-macs.el (where org-assert-version should be) got loaded *before* the new load-path had been set causing it to load the old one from 9.3. Thereafter, everything went awry. > The first approach is actually the easiest. The second is hard to get > right and very fragile because packages like use-package and more > specifically, other packages with leverage off org functionality, make it > impossible to reliably know exactly when org is loaded. Using ':after" in use-package is supposed to help that, but I'm not sure it is reliable. Packages are often incomplete about what other packages it depends on. > An approach used by many 'canned' distributions is to postpone package > updates. You have a function you run to check for updates which > generates a list of packages to update and writes that list to a > file. Each time emacs is started, it looks for this update list and if > it finds it, it installs packages updates at the very beginning of the > init process (before any of your other init.el code or custom > blocks). The process also looks for org in the list of packages to > update and if it is found, updates it first. Probably doesn't work in this case as you would need to be able to use package.el suggesting that the load-path has been updated for all built-ins already. The thing I note is that the load-path has already been updated for built-ins at the beginning of '~/.emacs.d/early-init.el', but the libraries haven't been loaded yet (unless needed). That's okay if the newer version of a package then cleanly replaces all the files in the old version. > I don't think there is a safe way to load org mode after the init > process i.e. after booting emacs by M-x package-update. Where is package-update called in the boot process of emacs? I don't see package-update in Emacs v2.7. > I've had good success using straight.el. I had to be careful regarding > how I structured my init.el file (ensuring any straight stuff happens > first and the first use package stanza is for org. The main reason > straight works well for me is that my work flow is to do a M-x > straight-pull-all when I want to update my packages. This does a git > pull for all the sources, but does not do any build/install. This occurs > when I next start Emacs and because I have all the straight stuff at the > start and because org mode is the first straight-use-package, the update > and install happens before any other org functionality is loaded, > avoiding mixed version issues. Where do you get straight.el? I don't see it in [m]elpa. -- David Masterson