ocaml / opam

opam is a source-based package manager. It supports multiple simultaneous compiler installations, flexible package constraints, and a Git-friendly development workflow.
https://opam.ocaml.org
Other
1.21k stars 348 forks source link

Detect the reason for a downgrade #6011

Open kit-ty-kate opened 3 weeks ago

kit-ty-kate commented 3 weeks ago

Example by @MisterDA

$ opam install alcotest
<><> Synchronising pinned packages ><><><><><><><><><><><><><><><><><><><><>  🐫
[alcotest.1.7.0] synchronised (no changes)

The following actions will be performed:
=== downgrade 3 packages
  ↘ ocaml                   5.2.0 to 5.1.1     [required by alcotest]
  ↘ ocaml-base-compiler     5.2.0 to 5.1.1     [required by ocaml]
  ↘ ocaml-compiler-libs     v0.17.0 to v0.12.4 [uses ocaml]
=== recompile 20 packages
  ↻ base                    v0.17.0 (pinned)   [uses ocaml]
  ↻ base-domains            base               [uses ocaml]
  ↻ base-nnp                base               [uses base-domains]
  ↻ csexp                   1.5.2              [uses ocaml]
  ↻ dune                    3.15.3             [uses ocaml]
  ↻ dune-configurator       3.15.3             [uses ocaml]
  ↻ ocaml-config            3                  [uses ocaml-base-compiler]
  ↻ ocaml_intrinsics_kernel v0.17.0 (pinned)   [uses ocaml]
  ↻ ppx_base                v0.17.0            [uses ocaml]
  ↻ ppx_cold                v0.17.0            [uses ocaml]
  ↻ ppx_compare             v0.17.0            [uses ocaml]
  ↻ ppx_derivers            1.2.1              [uses ocaml]
  ↻ ppx_enumerate           v0.17.0            [uses ocaml]
  ↻ ppx_globalize           v0.17.0            [uses ocaml]
  ↻ ppx_hash                v0.17.0            [uses ocaml]
  ↻ ppx_sexp_conv           v0.17.0            [uses ocaml]
  ↻ ppxlib                  0.32.1             [uses ocaml]
  ↻ ppxlib_jane             v0.17.0            [uses ocaml]
  ↻ sexplib0                v0.17.0            [uses ocaml]
  ↻ stdlib-shims            0.3.0              [uses ocaml]
=== install 11 packages
  ∗ alcotest                1.7.0 (pinned)
  ∗ astring                 0.8.5              [required by alcotest]
  ∗ cmdliner                1.3.0              [required by alcotest]
  ∗ fmt                     0.9.0              [required by alcotest]
  ∗ ocaml-syntax-shims      1.0.0              [required by alcotest]
  ∗ ocamlbuild              0.14.2+win         [required by fmt, astring, uutf]
  ∗ ocamlfind               1.9.5              [required by fmt, astring, uutf]
  ∗ re                      1.11.0             [required by alcotest]
  ∗ seq                     base               [required by re]
  ∗ topkg                   1.0.7              [required by fmt, astring, uutf]
  ∗ uutf                    1.0.3              [required by alcotest]

Proceed with ↘ 3 downgrades, ↻ 20 recompilations and ∗ 11 installations? [y/n] n

In this case, ocamlbuild was the culprit as 0.14.2+win doesn't work with ocaml 5.2.

However it would be nice for opam to show that fact instead of showing an incomplete and unhelpful in this case [required by ...] information