On Tue, Oct 10, 2006 at 07:39:03PM +0400, Dmitry V. Levin wrote: > On Tue, Oct 10, 2006 at 04:40:28AM +0400, Alexey Tourbin wrote: > > On Tue, Oct 10, 2006 at 02:41:52AM +0400, Dmitry V. Levin wrote: > > > > Можно конечно в багзиллу написать или самому > > > > в апте ковыряться, но может быть уже кто-то знает? > > > > > > Я буду признателен тому, кто решит эту задачу (т.е. зафиксит apt). > > > > Я вроде бы зафиксил, хотя меня гложут сомнения. > [...] > > Смысле в том, что версия PrvPkgCandVer, найденная через reverse lookup, > > должна совпадать с непосредственной версией Prv.OwnerVer(). Тогда пакет > > -- хороший кандидат. Но PrvPkgCandVer -- это итератор. Кстати, кажется > > Prv.OwnerVer это тоже итератор. Если в репозитарии оказывается два > > пакета с одинаковым именем и версией, то совпадение сразу же не > > гарантируется. Один из этих итераторов нужно "прокрутить" и проверять > > условие в цикле, что я и делаю. > > Видимо, ты прав. Надо бы, конечно, проверить экспериментально, но код > говорит в твою пользу. Я проверил экспериментально. Я в общем-то начал с "printf debugging" (правда, в Си+плюс это правильнее называть "cerr debugging") на двух песочницах, в одной из которым лежит самосборный libdb4.4-devel, а в другой нет. Соответственно стало ясно, что отсев происходит именно в этом месте. Теперь, этот патч сделан относительно rpm -bp, он конфликтует с ещё одним патчем alt-TryToInstall.patch. Как его правильно приложить я не знаю, поэтому публиковать свой /packages/apt не буду. Хотелось думать, что с git'ом такие проблемы уйдут, но они не уходят. Типа PATH=$PWD:$PATH ~tmp/build1/aptbox/apt-get --dry-run install gcc-c++ PATH=$PWD:$PATH ~tmp/build2/aptbox/apt-get --dry-run install gcc-c++ То есть я подошел к этому как естествоиспытатель. Как ещё такие вещи отлаживать я просто ума не приложу. > > Скажите, кто-нибудь понимает внутренние структуры апта? > Хм. Я их лишь отчасти, очень приблизительно, понял, когда просматривал исходники перловых привязок к libapt-pkg. Одна из проблем в том что они self-referring (цикличны/рекурисивны) и их в перле нельзя стандартными средствами по-нормальному сдампить (в читаемом виде), чтобы посмотреть что же там на самом деле есть. > > Муть какая-то. > > Где об этом можно что-нибудь прочитать? > Боюсь что RTFS. Си+плюс не способствует пониманию исходников. Ну что такое у итератора перегрузка оператора "=="? Головная боль. Тем более что ctags тоже что-то не очень мне помог.