On 18/12/2022 22:40, Stefan Monnier wrote:
Could Someone™ investigate why that code
doesn't do its job.
The code in question is in `package--reload-previously-loaded` and
my understanding is that it should cause `org-macs` to be reloaded
I do not see obvious flaws in `package--reload-previously-loaded' code.
My guess is that we get reports from users who have installed released
versions of emacs.
Notice that my complain concerning failure `byte-recompile-directory',
hidden from its caller, is still valid.
On 25/12/2022 16:48, Ihor Radchenko wrote:
Max Nikulin writes:
I have tried the following in Emacs-27. For Emacs >= 29 add -L to Org <=
9.5.
Stefan convinced me that I was too optimistic concerning Emacs-29.
- "emacs -l org" to simulate a regular user session with some opened files.
- Update to Org-9.6 from ELPA.
- Close emacs and start it again "emacs -l org"
Result:
byte-code: Invalid function: org-assert-version
I tried to follow these steps, but unfortunately I am unable to
reproduce. Everything works fine using Emacs 27 on my side. Strange.
I tried it once more in a minimal LXC container with Ubuntu-22.04 LTS
jammy. This time I even removed the elpa-org-9.5.2 system package, so
built-in version of org is really used. So, emacs-27
- emacs -l org
- M-x list-packages RET
- / n org RET
- move cursor to org, install it
- i x y
- compilation buffers pops up with warning and errors.
Due to "-l org" some libraries like org, org-macs, ob are loaded. Files
that `require' already loaded libraries generate warnings
Compiling file /home/emcs/.emacs.d/elpa/org-9.6/ob-R.el at Sun Dec 18
04:30:49 2022
In end of data:
ob-R.el:562:1:Warning: the function ‘org-assert-version’ is not known to be
defined.
because `org-assert-version' is defined in org-macs.el, but the old
version without it is already loaded. Call to `org-assert-version' is
just added to the .elc file.
E.g. org-keys.el produce the same warning. Another case is
Compiling file /home/emcs/.emacs.d/elpa/org-9.6/ob-matlab.el at Sun Dec
18 04:30:50 2022
ob-matlab.el:43:1:Error: Symbol’s function definition is void:
org-assert-version
This file contains "(require 'ob-octave)". Attempt of load new version
of ob-octave fails because during execution of it contents causes an
error due to the `org-assert-version' call.
In particular, compilation of org.el fails because the new version has
new "(require 'org-fold)" and the latter also tries to call undefined
`org-assert-version'.
So at this point we have partially compiled broken install. Some files
are not compiled, others have call to `org-assert-version' instead of
its expansion.
Let's try to start emacs again and load org. Since org.el is not
compiled, "(org-assert-version)" inside it is unable to catch any
problem due to mixed-version compilation. Now `org-release' returns new
version. The failure happens during "(require 'org-keys)" that was
compiled with the warning.
Debugger entered--Lisp error: (invalid-function org-assert-version)
org-assert-version()
byte-code("\300\301!\210\302 \210\300\303!\210\300\304!\207" [require
org-macs org-assert-version cl-lib oc] 2)
require(org-keys)
So we have an obscure load time error. I would say that compile *error*
messages are obscure as well because it is unclear that errors happen in
`require'. E.g. when compiling org-matlab.el the reported line number is
for "(require 'ob-maxima)" while compiling of ob.maxima.el finished with
a warning, not an error and it is really confusing. "ob-octave:34:" in
addition to "ob-matlab:43:" during compiling of ob-matlab.el would be
more informative.