Как вывести текущие версии пакетов в OPAM?

opam list -a перечисляет все пакеты, доступные в настоящее время в OPAM, но не отображает номер версии для пакетов, которые в данный момент не установлены, согласно выводу opam list --help:

(...) выходной формат отображает по одному пакету в строке, и каждая строка содержит имя пакета, установленную версию или -- если пакет не установлен, (...)

Как я могу перечислить все пакеты, включая их номера версий?


person anol    schedule 13.10.2015    source источник


Ответы (3)


Уточненная (и более быстрая) версия ответа anol состоит в том, чтобы передать весь список пакетов opam show за один проход (попросив opam вывести поля package и version) и обработать результат с помощью sed, поскольку, по-видимому, show выводит каждое поле на своя строка:

opam show -f package,version $(opam list -a -s) \
 | sed -e '/ *package:/N; s/ *package: \([^\n]*\)\n *version: \([^\n]*\)/\1: \2/'
person Virgile    schedule 13.10.2015

Используйте 1_.

Я предполагаю, что opam list печатает только версии уже установленных пакетов из-за зависимостей пакетов. Список последних версий пакетов, например, еще не установленных пакетов, не совсем полезен.

person camlspotter    schedule 13.10.2015
comment
Проблема с opam info заключается в том, что он принимает только один пакет за раз, например, если я хочу быстро просмотреть последние версии каждого пакета mirage*, мне нужно перечислить их все, а затем индивидуально запросить каждую версию. - person anol; 13.10.2015

Это не идеальное решение, но, используя рекомендацию camlspotter, я вручную запросил каждый пакет для его поля version, используя следующий цикл оболочки:

for p in $(opam list -a -s); do echo "$p $(opam show -f version $p)"; done

Это работает, но на моем компьютере это занимает ~85 секунд (в настоящее время запрашивается более 1000 доступных пакетов).

person anol    schedule 13.10.2015