[opam-devel] Determining all required versions of all packages

Louis Gesbert louis.gesbert at ocamlpro.com
Tue Nov 10 09:48:51 GMT 2015

Le mardi 10 novembre 2015, 09:12:08 David Allsopp a écrit :
> I'm starting to assemble high quality Windows amendments[1] for
> opam-repository in dra27/opam-repository/opam-windows. OPAM's age and the
> speed at which OCaml development moves means lots of packages have many
> versions (see, for example,
> https://github.com/dra27/opam-repository/commit/b7269d2ac853aeb45b1096ec0dba
> 7febbad149f2).
> Patching them all is tedious (and actually testing the installation of each
> version even more so!), especially as it's not that likely that too many
> people will ever bother installing older versions. Is there already a clever
> way where given a repository I can query all dependent packages of a
> specific version of each package. Most (probably all) packages depend just
> on ocamlfind, for example, not on ocamlfind 1.4.x?

It's not repository-specific, but

    opam list --rec --depends-on <pkglist>

will give you the packages depending on the mentionned packages. Now it seems 
that what you want to know is all packages that _would be made uninstallable_ 
if you were to remove this package. The closest we have to that is implemented 
within the camelus bot, but submitting a PR with the given package removed is 
likely not the UI you were hoping for :)

That part of the code is quite simple though [1], you build two package 
universes using sets of opam files, call `OpamSolver.installable` on them, then 
do some set operations. This completely ignores compiler/os constraints 
though, so for something more thorough you may want to look into the more 
complete Dose lib, like OWS does.

The script here [2] also tries to cover all installable packages in a minimum 
of steps (greedily, minimum is not guaranteed at all). So another approach may 
be to just run that and take the union of all solutions it returns.

Louis Gesbert - OCamlPro

[1]: https://github.com/AltGr/opam-bot/blob/aaa4ddefc83f9906480d24ae52d6da5c2a567ceb/opam_ci.ml#L320-L377

[2]: https://github.com/ocaml/opam/blob/master/admin-scripts/couverture.ml

More information about the opam-devel mailing list