On Tue, Aug 07, 2007 at 02:20:48AM +0400, Alexey Tourbin wrote: > On Mon, Aug 06, 2007 at 03:08:04PM +0400, Alexey Tourbin wrote: > ЗАОСТРЯЮ ПРОБЛЕМУ "ПОЛУ-АНМЕТОВ". > > > Это проблема проявляется тогда, когда зависимость имеет вид /ПУТЬ, > но у соответствующего пакета не стоит Provides: /ПУТЬ. На уровне > rpm это не является unmet'ом: если при установке пакета с такой > зависимостью имеется какой-либо другой пакет с файлом /ПУТЬ, > то для rpm это "канает". > > С другой стороны, apt видит такую зависимость именно как unmet. > Вообще-то у апта к каждому пакету есть файловые листы, и он использует > их для разрешения такого рода зависимостей. Но при изготовлении > репозитария аптовые листы у нас насильно "оптимизируются". > > Два простых варианта решения это проблемы: > > 1) Генерировать более полный content_index для hasher, чтобы любой путь > более гарантированно трансформировался в название пакета (насколько > более полный/гарантированно?). > > 2) Восстановить файловые листы для апт. Насколько потяжелеет > pkglist.classic.bz2? Я немного захачил апт, но это всё равно как следует не работает, см. ниже. commit 30e27b0f1c74b4f67354a6035fae3e210131bca1 Author: Alexey Tourbin Date: Sat Aug 11 20:01:05 2007 +0400 apt-0.5.15lorg2-alt-genpkglist-reqfiles.patch genpkglist strips file lists by default (without --bloat option). It keeps only some "useful files" by using a few ad hoc patterns. This can break file-level dependencies. Consider pkgA requires /usr/lib/foo1/bar, and pkgB owns this file without explicitly providing it. Now if genpkglist strips /usr/lib/foo1/bar from pkgB file list, this is going to be an unmet dependency. This patch changes genpkglist behaviour, so that, when genpkglist is invoked without --bloat option, it first finds all file-level dependencies (something like "rpm -qaR |grep ^/"). This requires a separate pass. The list of file-level dependencies is saved into "reqfiles" global variable. And on the second (normal) pass, the function usefulFile() is modified to check the "reqfiles" variable; that is, it should keep a file in the file list if it's been required by some package in the repo. (Unfortunately, this patch does not solve all of the problems I want it to solve; we have separate repos for i586 and noarch -- inter-repo file-level dependencies cannot be resolved this way.)