Google Groups

combining load failures with dependencies information to priorities fixes

Anton Vodonosov Sep 25, 2012 11:06 AM
Posted in group: cl-test-grid
"Juan Jose Garcia-Ripoll" <> on ecls-list:

> Right now it would be very useful to sort the libraries by dependencies:
> those that other depends on and fail will likely cause failures on other
> libraries themselves.

Eventually, as I have tested load status of every library found in Quicklisp,
we can build such a report.

I initially though that "sort the libraries by dependencies" will be just
topological sorting, but it turned out to be not sufficiently illustrative.

The most fruitful systems to fix are those which:
- fails by themselves, i.e. don't have failing dependencies
- have many other systems depending on the given system
- in particular, these depending systems have the given system
  as the only failed dependency (I call this blocked-exclusively)

For example, closer-mop fails to load on ECL, and there are
123 other ASDF systems (related to 59 projects), which depend
on closer-mop and closer-mop is the only failing dependency
for them (in my terms, closer-mop block them exclusively).

This means that fixing closer-mop is likely to fix 123 other ASDF
systems (unless these other systems have their own problems,
in this case we will at least reveal these problems).

Here is the report

In the default sorting is
- number of root-blocker-systems desc,
- number projects of systems blocked exclusively asc
- system name desc.

I.e. the default sorting places the most fruitful systems at the top.

You may change sorting by clicking columns (holding Shift
to sort by multiple columns).

> Again, that should be programatically easy to do, given ASDF's tree
> of dependencies (or quicklisp's for that matter).

Note, there is no way (or at least non trivial) to extract the dependency
information 100% precise. ASDF systems are just lisp code,
sometimes they contain reader conditionals, sometimes
asdf:load-op invocations, instead of just putting the systems
into :depends-on or :defsystem-depend-on. But the information
we can gather is enough to make useful observations. I retrieve
the dependency information from
quicklisp\\dists\\quicklisp\\systems.txt index file.

Best regards,
- Anton