On Sun, Dec 17, 2006 at 04:43:40PM +0300, Alexey Tourbin wrote: > Этот патч был неправильным, потому что версии в ProvidesList на самом > деле не отсортированы. Вот правильный вариант патча (прицеплен). В принципе этот патч почти хороший. То есть его можно брать в очередную сборку. Есть другая идея. В TryToChangeVer можно теперь вызывать не Find(), который вернет наилучшую версию, а новый FindAll(), и применять к нему технику &(Fix.ScoreSort). Ну в общем это техника не совсем родная для апта, она содержится в apt-0.5.15cnc6-alt-virtual-scores.patch. Что-то я уже не понимаю что у апта родное а что кто-то из нас добавил года три назад. В общем смысл в чем. Сейчас как происходит: когда просим ставить пакет без версии, тогда вызывается Fix.ScoreSort. А когда просим ставить пакет с версией, тогда уже никакого ScoreSort нет. Простейший вариант -- при попытке ставить виртуальный или реальный пакет с версией ставить всегда реальный пакет с наибольшей реальной версией, удовлетворяющей зависимость по требуемой версиеи. Это то что сделано в [PATCH]. Второй вариант -- ввести ScoreSort в TryToChangeVer. В общем-то по идее НЕ надо делать различия между виртуальными и реальными пакетам. Одна и та же зависимость может разрешаться в N реальных пактов и M виртуальных пакетов. Тогда что делать? Я тут думал о теории графов но на самом деле графа-то как такового нет. Если нельзя однозначно сконструировать матрицу инциденций тогда это уже не граф.