[devel] Q: unmets closure
Igor Vlasenko
=?iso-8859-1?q?vlasenko_=CE=C1_imath=2Ekiev=2Eua?=
Вт Дек 9 18:48:02 MSK 2008
On Tue, Dec 09, 2008 at 05:22:45AM +0300, Dmitry V. Levin wrote:
> Hi,
>
> У кого-нибудь есть инструмент для вычисления замыкания анметов по
> репозиторию, или, что равносильно, вычисления подмножества пакетов
> репозитория, у которых нет прямых или косвенных анметов?
У меня давно в планах сделать (равносильные указанным)
замыкания сборочных и установочных requires+conflicts под
repocop, так как с их помощью можно реализовать много полезных тестов.
Например, Замыкание_Requires и Замыкание_Conflicts c учетом версий
пересекаются, либо Замыкание_Requires содержит c учетом версий unmets --
пакет не может быть установлен.
строительный метериал уже есть -
в rpm.db хранятся Requires и Conflicts (BuildRequires и BuildConflicts)
всех пакетов Сизифа.
Также реализованы функции для sqlite3, которые умеют делать
rpm_vercmp/rpm_evrcmp, позавчера тестировались на тестах
unmet-dependency-* и unmet-dependency-build-*.
алгоритм следующий:
создаются таблицы Замыкание_Requires и Замыкание_Conflicts.
(c Unique constraint index).
Шаг 1.
Содержимое Requires и Conflicts копируется в
Замыкание_Requires и Замыкание_Conflicts.
Шаг N.
таблица Замыкание_Requires соединяется (join) сама с собой с
учетом Замыкание_Conflicts и условий в Requires,
давая в результате временную таблицу
(пакет foo) тянет (пакеты bar), после чего производится
вставка в Замыкание_Requires и Замыкание_Conflicts
Requires и Conflicts пакетов bar как Requires и Conflicts пакета foo.
Шаг N повторяется до тех пор, пока таблица Замыкание_Requires
перестанет расти (N < числа пакетов в Сизифе).
В принципе, это можно где-то за день реализовать,
если полученная таблица будет разумных размеров,
итерации займут разумное время и нагрузку выдержит песочница.
--
Dr. Igor Vlasenko
--------------------
Topology Department
Institute of Math
Kiev, Ukraine
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Подробная информация о списке рассылки Devel