[devel] Q: automated update of CPAN perl modules

Igor Vlasenko vlasenko на imath.kiev.ua
Ср Июл 21 16:31:30 UTC 2010


On Wed, Jul 21, 2010 at 12:57:47AM +0400, Alexey Tourbin wrote:
> > написать робота, который обновит сотню-другую пакетов
> > (были бы acl), и который потом можно было бы регулярно,
> > скажем, ежемесячно, запускать.
> 
> Если робот очень хороший (вплоть до того, что наделен искусственным
> интеллектом), то имеет смысл большую часть перловых пакетов обновлять
> автоматически.  В принципе это касается не только перловых пакетов.
> Поскольку кому охота там одно и то же вручную ковыряться whatever.

Роботы снижают механическую работу, не более.
Скажем, без робота для поддержки 2000 перловых пакетов
понадобился бы Алексей Турбин или другой майнтайнер его уровня
+ 40 помощников, вникающих в проблему на уровне Васи Пупкина.
А с роботом, чем умнее робот, тем меньше помощников нужно.
В идеале автоматизация должна дойти до того, что

1) в помощниках не будет необходимости (да, запустить робота 
сможет и Вася Пупкин, но вот исправить за роботом сможет только 
кто-то владеющий вопросом на уровне Алексея Турбина)

2) после робота будет оставаться только интересные проблемы,
требующие обдумывания, поэтому с роботом работать будет намного 
интереснее. Он как бы фильтрует тривиальные проблемы.

> Но роботы у нас не шибко-то умные (да и ...).  Поэтому приходится
> задумываться, как не въехать на полной скорости в бетонный столб.

робота можно и нужно постоянно улучшать.
Я текущего написал на коленке, больше как иллюстрация
к выступлению в Переяславле, чтобы утверждения о 
автоматизации не показались надуманными или голословными.
Если сравнивать его с cpan2rpm, то он еще код-младенец:
wc -l CPANupdate.pl /usr/bin/cpan2rpm
  144 CPANupdate.pl
 2088 /usr/bin/cpan2rpm

> Вот, например, стандартная грабля с версией:
> Была версия 0.15, стала версия 0.17016.  Что сделает очень хороший
> робот, если следующая версия станет 0.18?

сейчас робот лохонется, так как он пользуется evrcmp, 
а rpmevrcmp 0.17016 0.18=1. Но его можно улучшить,
если написать собственный sub perlvercmp и при распознавании
такой ситуации дополнительно инкрементировать Serial или Epoch,
из того, что найдено в спеке.
 
> Есть другие тонкости - например, как обновлять BuildRequires?

В >85% случаев их обновлять не понадобилось,
а в оставшихся случаях добавил руками, что было все же удобнее,
чем с нуля: под рукой был пакет или git с обновленными исходниками, 
версией и changelog'ом, и его лог пересборки (неудавшейся).

Но опять же, если подойти к роботу серьезно, 
то можно ежедневно генерировать из базы репокопа 
таблицу соответствия перловых модулей перловым rpm пакетам.
пройдясь grep по .pm/.t файлам в поиске use директив,
получим список модулей. С пом. таблицы он переводится в
список BuildRequires:. Сравнить его с имеющимся.
А уже обновить спек - не проблема.

И этот механизм также было бы скрестить с cpan2rpm.

Т.е. трюкам робота обучить можно.

Там возникла более важная проблема,
которую можно решить, и нужно решать,
но нужна помощь сообщества. 
Это стандартизация работы с gear+git репозиториями,
я в отдельном письме напишу.


-- 

Dr. Igor Vlasenko
--------------------
Topology Department
Institute of Math
Kiev, Ukraine



Подробная информация о списке рассылки Devel