Introspecting source registry
Robert Goldman
rpgoldman at sift.net
Sun Jun 7 15:37:29 UTC 2015
On 6/7/15 Jun 7 -5:09 AM, Mark Evenson wrote:
> With asdf-3.1.4, how do I introspect the current state of source
> registry configuration? I need to debug a remote user's ASDF
> configuration on a machine which I don't have access to, so I would like
> to have ASDF output the current source registry configuration search
> state. Problematically, the behavior documented in section 8.1 doesn't
> seem to be working as described on the user's machine. And this
> behavior seemingly changes between "patch level" ASDF releases
> especially on marginal platforms like Windows, digging up the "correct"
> version of the manual isn't so easy either.
>
> [1]:
> https://common-lisp.net/project/asdf/asdf.html#Controlling-where-ASDF-searches-for-systems
Yes, the behavior of ASDF has changed a bit within the series of 3.1.4.x
pre-release versions. There was a bug in the treatment of XDG
configuration directories that we have recently fixed.
>
> The contents of ASDF/SOURCE-REGISTRY:*SOURCE-REGISTRY* provides a
> hashtable of systems that ASDF has located, but doesn't help me figure
> out where ASDF *might* have searched for things. For output
> translations the return value of (ASDF:INITIALIZE-OUTPUT-TRANSLATIONS)
> gives me enough information for output translations, so it would be nice
> to have something equivalent for the source registry. Since I suppose
> that all of the behavior specified in section 8.1 is not easily
> transcribed as a s-expr, my request may not be trivial to implement, but
> in lieu of some similar mechanism, I am really having problems with
> debugging ASDF behavior in a particular instance.
I'm afraid I'm not the authority on this. Faré is the authority: I
have stayed with *CENTRAL-REGISTRY* precisely because I can control it
more, and it's easier to introspect. And I don't have the issues of
scale that forced Faré's more efficient implementation.
Here are some thoughts based in inspection of the source:
Perhaps tracing ASDF/SOURCE-REGISTRY:register-asd-directory would help?
That seems to do the business inside COMPUTE-SOURCE-REGISTRY.
I note that COMPUTE-SOURCE-REGISTRY iterates over the return value of
FLATTEN-SOURCE-REGISTRY. I wonder if it would be appropriate to refactor
this code so that it's of the form:
(mapc #'HELPER-FUNCTION (flatten-source-registry parameter))
instead of
(dolist (entry (flatten-source-registry parameter))
yadda yadda yadda)
if we did that, one could trace HELPER-FUNCTION to debug. Right now,
since the DOLIST is effectively open-coded, there's no obvious thing to
trace.
Similarly, there's a very big LAMBDA passed as an argument to
REGISTER-ASD-DIRECTORY. If that was replaced with a named function, one
could trace it. Right now it's not easy to debug.
But I'm not sure whether the action occurs there or in
FLATTEN-SOURCE-REGISTRY. So perhaps tracing PROCESS-SOURCE-REGISTRY is
the important step.... F-S-R seems to do a lot more than I associate
with the name "FLATTEN".
More generally, I think ASDF should be enhanced to provide some kind of
registry debugging that does *NOT* require the programmer to look into
non-exported functions. I.e., some form of VERBOSE behavior that one
could turn on in order to see a log of directories traversed. I'm open
to suggestions about that (although such surgery probably will have to
wait until after 3.1.5 is released). Then one could do something like
(INITIALIZE-SOURCE-REGISTRY NIL ;; ?????
:VERBOSE T)
and get more information.
>
> Additionally, what is the behavior of ASDF when the $XDG_* environment
> variables are not set, as is seemingly the case on a stock Windows
> environment? Are these configuration steps just skipped?
>
The behavior of the XDG code has changed substantially recently, so it's
hard to answer this question without knowing exactly what version of
ASDF your client has.
Best,
r
More information about the asdf-devel
mailing list