[asdf-devel] long-standing bugs fixed in traverse

Faré fahree at gmail.com
Sat Dec 8 15:24:34 UTC 2012

Summary: please update asdf to 2.26.9 to test some major improvements
in its build algorithm.

ASDF had a few major bugs remaining from ASDF 1.

To fix them, its traverse algorithm was, once again, rewritten and
vastly simplified. It's almost readable, now!

To start with, I fixed this long-standing bug, whereby when a system
was recompiled, this didn't trigger the recompilation of systems that
depended on it as part of the same operate session: If you have a
system B that depends on a system A, and A is modified, re-loading B
will cause A to be recompiled, but not B.
This was starting to annoying me a lot, since it causes systems such
as xcvb-utils to often fail to recompile, getting its
automatically-generated package all out of sync. One reason this bug
survived so long is that there were rumors of people relying on the
bug as a "feature". But ever since 2.21, we had the ability with
:force-not to selectively avoid rebuilding

But this led to the deeper issue that ASDF only knew about timestamps
local to a immediate operation, and was not propagating timestamps
from one component to those that depended on it, which means the
previous fix only worked within the same session: if you loaded B in
one session, modified A, recompiled A in another session, then loaded
B in a third session, the latter wouldn't trigger a recompilation of
B: each file looks locally up-to-date, and is blissfully unaware that
it is too old as compared to its dependencies.

I fixed this bug too, which required some major modifications, overall
a simplification, in the way ASDF works. For backwards compatibility
(if it's not backwards, it's not compatible), I had to keep some of
the previous APIs, such as the misnamed operation-done-p the signature
of which I couldn't change. As users, you shouldn't notice that
anything changed. If you are power users, you may notice that do-first
dependencies have been eliminated. There is now only one kind of
dependencies, in-order-to, which does the right thing in both cases of
output-files or no output-files.

It was way too much debugging, but it's now done. Please test.

When all this is cleaned up and released, I'm tempted to declare the
launchpad milestone "asdf 2.1" reached, and open a start a new
milestone 2.2 (numbers obviously disconnected from actual version
numbers, these days).


—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Thinking is the hardest work there is, which is probably the reason why
so few engage in it. — Henry Ford

More information about the asdf-devel mailing list