Re: aptitude search работает на паре (package,version) или только на 1 параметре package?

2016-02-03 Пенетрантность Oleksandr Gavenko
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/



aptitude search работает на паре (package,version) или только на 1 параметре package?

2016-01-21 Пенетрантность Oleksandr Gavenko
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))'
  ...

Перепроверяем по произвольному пакету из довольно маленького списка:

  bash# apt-cache policy gnutls-bin
  gnutls-bin:
Installed: 3.3.18-1
Candidate: 3.3.20-1
Version table:
   3.3.20-1 0
  990 http://ftp.us.debian.org/debian/ testing/main amd64 Packages
   *** 3.3.18-1 0
  100 /var/lib/dpkg/status
   3.3.8-6+deb8u3 0
  300 http://debian.volia.net/debian/ stable/main amd64 Packages
   3.3.8-6+deb8u1 0
   50 http://http.kali.org/kali/ kali-current/main amd64 Packages

Мне кажется что без ``?narrow`` оно не работает, точнее покажет список пакетов
имен которых нет в Debian:

  $ aptitude search '?origin(Kali),!?origin(Debian)'
  ...

Перепроверяем по произвольному пакету из списка:

  bash# apt-cache policy wmis
  wmis:
Installed: (none)
Candidate: 4.0.0tp4-1kali0
Version table:
   4.0.0tp4-1kali0 0
   50 http://http.kali.org/kali/ kali-current/main amd64 Packages

К тому же не входящие в Debian пакеты также включены в:

  bash# aptitude search '?narrow(?origin(Kali),!?origin(Debian))' | grep wmis
  30182:p   wmis- Linux native WMIC client  


Тогда ниже - это пакеты что есть в Kali и в Debian, не не совпадают по версии:

  $ aptitude search '!(?origin(Kali) !?origin(Debian)) 
?narrow(?origin(Kali),!?origin(Debian))'



Еще я не понимаю как найти чего есть в Kali свежее чем в Debian. Оператора
сравнения версий - нету в доке...

Можно через ?upgradable, если явно поменять приоритеты. Чего ради запроса
делать не хочется...

-- 
http://defun.work/