The archive-mirrors value from repo files are not overridable, displayed nor deduplicated
There are two forms of archive-mirrors:
- The
archive-mirrorsfrom the global options, displayed inopam optionand changeable there (since https://github.com/ocaml/opam/pull/5315). By default empty. - The
archive-mirrorsfrom each repositories currently set in your switch
Currently the latter isn't used very much due to https://github.com/ocaml/opam/pull/4830, but as most people who will actually set archive-mirrors manually are most likely using opam >= 2.2, the idea of setting it in opam-repository sounds doable.
However i can see some minor problems with the way opam handles archive-mirrors for repositories.
- If one adds several repositories and the all have their
archive-mirrorsset, then any cache miss will actually try downloading the archive as many times as there are repositories and these urls are not de-duplicated. Meaning that for opam-repository for example, a cache miss will keep sending request to opam.ocaml.org as many times as there are opam-repository forks in the current switch. - These values aren't visible anywhere for regular users. The only way for users to know their values is to do
grep archive-mirrors: .opam/repo/*/repoor something of the sort. - These values aren't overridable. If for whatever reason you do not want to use the mirror from a repository, there are currently no ways of doing that without forking it and removing the
archive-mirrorsfield manually, because... - ... removing
archive-mirrorsfrom therepofile cannot currently be done automatically without assuming a certain format (e.g. https://github.com/ocaml-opam/opam2web/pull/247) or without usingopam-ed
To solve these minor issues, i propose to:
- improve the handling of the mirrors by transforming the
string listtoSet.(OpamUrl.t).twhere the values are actually used - add a
Repositories configurationsection inopam optionthat displays the value ofarchive-mirrorsfor each repository - allow to override the repository configuration with a new
opam option --repositoryargument. Setting it could add a note duringopam updateto remind them that the value from the repository isn't taken into account - add a new
opam admin edit-repo-filecommand, which would allow to remove or edit fields in the repo file
Adding a comment here so that the status appears in https://github.com/ocaml/opam-repository/pull/28348
Per 2025/09/22 dev meeting: The variable/option way is a good one, we need to check that it fits well the new repo config format and the variable/option selectors/modifiers. Linked PR is a concluding first draft.