On 2016-01-21, Oleksandr Gavenko wrote: > aptitude search работает на паре (package,version) или только на 1 параметре > package? > > Из https://www.debian.org/doc/manuals/aptitude/ch02s04s05.ru.html#searchAnd > > ?and(pattern1, pattern2), pattern1 pattern2 > Matches packages that match both pattern1 and pattern2. > > ничего не говорится об версиях. > > Мне кажется что aptitude просто работает с множеством пакетов безотносительно > к версии. Для работы с версиями есть специальная форме: > > ?narrow(filter, pattern), ~S filter pattern > > This term “narrows” the search to package versions matching filter. In > particular, it matches any package version which matches both filter and > pattern. The string value of the match is the string value of pattern. > > Kali базируется на stable. Я на testing. Потому временно включил stable что бы > узнать чем Kali отличается от Debian (т.е. не только именем пакета - но и > версии различны!!): > > > $ aptitude search '?narrow(?origin(Kali),!?origin(Debian))' > ...
В общем "aptitude search" работает на списке пакетов (над множествами с именами пакетов в качестве элементов). Есть пару специальных опреаторов типа "?narrow(X, Y)" которые учитывают версии и только на равенство. Я хотел тест на новизну: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=812444 aptitude: REQUEST: operator to version order test in "aptitude search" query syntax. но не учел что aptitude не имеет синтаксиса для вывода нескольких версий одновременно с доп. информацией (через ключ "-F"). Т.е. и просьба бессмысленая оказалась. По итогу за пол часика exploration analysis "python-apt" API получил работающий пример: import apt_pkg apt_pkg.init() cache = apt_pkg.Cache() for pkg in cache.packages: vkali = [] vdeb = [] for ver in pkg.version_list: for fl, _ in ver.file_list: if fl.origin == 'Kali': vkali.append(ver.ver_str) elif fl.origin == 'Debian': vdeb.append(ver.ver_str) if len(vdeb) == 0: continue diff = set(vkali) - set(vdeb) if len(diff) == 0: continue ver0 = vkali[0] if all(apt_pkg.version_compare(x, ver0) < 0 for x in vdeb): print pkg.name, vkali, vdeb Код находит пакеты в Kali с версиями старше чем в Debian. Такое через aptitude не выразишь. И не надо мучится с парсингом текстового вывода и вызывать "dpkg --compare-versions". Теперь мини-язык aptitude для выборки пакетов кажется тусклым и не интересно бится над его особенностями. -- http://defun.work/

