17.3.6 Сравнение версий

Модуль RPM2 использует оператор сравнения, <=>, для сравнения версий одноименных пакетов. Следующий скрипт (rpmver.pl) показывает, как сравнить все локальные файлы rpm-пакета с определенным именем с новейшей установленной версией этого пакета (если он установлен).

#!/usr/bin/perl -w

#

# Compare versions of all *.rpm files against the

# latest packages installed (if installed)

#

# Usage:

# rpmver.pl

# This script looks for all *.rpm files.

#

use strict;

use RPM2;

my $rpm_db = RPM2->open_rpm_db();

for my $filename (<*.rpm>) {

my $h = RPM2->open_package( $filename );

# Ensure we compare against the newest

# package of the given name.

my ($installed) =
sort { $b <=> $a } $rpm_db->find_by_name($h->name);

if (not $installed) {

printf "Package %s not installed.\n", $h->as_nvre;

} else {

my ($result) = ($h <=> $installed);

if ($result < 0) {

printf "Installed package %s newer than file %s\n",

$installed->as_nvre,

$h->as_nvre;

} else {

printf "File %s newer than installed package %s\n",

$h->as_nvre,

$installed->as_nvre;

}

}

}

Сортировка { $a <=> $b } перед вызовом find_by_name сортирует все пакеты с заданным именем по версии, поэтому сравнение происходит с новейшей версией установленного пакета. ($h <=> $installed) сравнивает информацию хэдера файла на диске с информацией об установленном пакете из БД.

При запуске скрипта вывод будет зависеть от локальных rpm-файлов, имеющихся в каталоге на диске:

$ perl rpmver.pl

Package acroread-4.0-0 not installed.

Package canvas-7.0b2.0-1 not installed.

Installed package jikes-1.18-1 newer than file jikes-1.14-1

Installed package SDL-1.2.4-5 newer than file SDL-0.9.9-4

Package ted-2.8-1 not installed.

Далее - Закрытие БД RPM
Назад - Получение информации о пакетах
Содержание