[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