David Masterson <dsmaster...@gmail.com> writes:
> Adding this to bug #59882 > > "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'm not sure this is related to your problem, or whether that helps (but >> I hope it does)... > > I think it does. > > Side note: > > In my testing, I found a strange case where, in *scratch*, I get: > > (message "%s" org-version) > ;; Error undefined > ;; Do 'C-h v org-version' > (message "%s" org-version) > 9.3 > > So, 'describe-variable' on org-version causes Org to be loaded?!? Why > do I have a feeling this is related to this bug? 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 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. 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. 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. 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. 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.